// // Class for Leading Charged Track+V0 Correlations Analysis #include #include #include #include #include #include #include #include #include #include #include "AliLog.h" #include "AliAnalysisManager.h" #include "AliAODTrack.h" #include "AliAODEvent.h" #include "AliAODv0.h" #include "AliAODcascade.h" #include "AliAODVertex.h" #include "AliAODPid.h" #include "AliPIDResponse.h" #include "AliEventPoolManager.h" #include "AliCentrality.h" #include "AliAnalyseLeadingTrackUE.h" #include "AliPhysicsSelectionTask.h" #include "AliAODHandler.h" #include "AliAODInputHandler.h" #include "AliAODMCParticle.h" #include "AliInputEventHandler.h" #include "AliLog.h" #include "AliMCEventHandler.h" #include "AliVParticle.h" #include "AliCFContainer.h" #include "AliMultiplicity.h" #include "AliStack.h" #include "AliAODMCHeader.h" #include "AliPID.h" #include "AliPIDResponse.h" #include "AliExternalTrackParam.h" #include "AliLeadingV0Correlation.h" #define CorrBinsX 26 #define CorrBinsY 24 ClassImp(AliLeadingV0Correlation) ClassImp(AliLeadingBasicParticle) //--------------------------------------------------------------------------------------- AliLeadingV0Correlation::AliLeadingV0Correlation() : AliAnalysisTaskSE(), fAODEvent(0x0), fPoolMgr(0x0), fPoolK0(0x0), fPoolLambda(0x0), fPIDResponse(0x0), fPoolMaxNEvents(0), fPoolMinNTracks(0), fMinEventsToMix(0), fNzVtxBins(0), fNCentBins(0), fcollidingSys("PbPb"), fpvzcut(0), fTrackEtaCut(0), fFilterBit(128), ftrigPtLow(0), ftrigPtHigh(0), fassocPtLow(0), fassocPtHigh(0), fAnalysisMC(0), fUsePID(""), fRapidityCut(0.), fCutV0Radius(0.), fCutDCANegToPV(0.), fCutDCAPosToPV(0.), fCutDCAV0Daughters(0.), fCutV0CosPA(0.), fSpecialArmenterosCutK0s(0.), fPerformMultiplicityStudy(0), fLoMultBound(0), fHiMultBound(0), fOutputList(0), fHistMCPrimaryVertexX(0), fHistMCPrimaryVertexY(0), fHistMCPrimaryVertexZ(0), fHistMCtracksProdRadiusK0s(0), fHistMCtracksProdRadiusLambda(0), fHistMCtracksProdRadiusAntiLambda(0), fHistMCtracksDecayRadiusK0s(0), fHistMCtracksDecayRadiusLambda(0), fHistMCtracksDecayRadiusAntiLambda(0), fHistMCPtAllK0s(0), fHistMCPtAllLambda(0), fHistMCPtAllAntiLambda(0), fHistMCProdRadiusK0s(0), fHistMCProdRadiusLambda(0), fHistMCProdRadiusAntiLambda(0), fHistMCRapK0s(0), fHistMCRapLambda(0), fHistMCRapAntiLambda(0), fHistMCPtK0s(0), fHistMCPtLambda(0), fHistMCPtAntiLambda(0), fHistMCPtLambdaFromSigma(0), fHistMCPtAntiLambdaFromSigma(0), fHistNTimesRecK0s(0), fHistNTimesRecLambda(0), fHistNTimesRecAntiLambda(0), fHistNTimesRecK0sVsPt(0), fHistNTimesRecLambdaVsPt(0), fHistNTimesRecAntiLambdaVsPt(0), fHistMCDaughterTrack(0), fHistPrimRawPtVsYK0s(0), fHistPrimRawPtVsYLambda(0), fHistPrimRawPtVsYAntiLambda(0), fHistPrimaryVertexX(0), fHistPrimaryVertexY(0), fHistPrimaryVertexZ(0), fHistDcaPosToPrimVertexK0(0), fHistDcaNegToPrimVertexK0(0), fHistRadiusV0K0(0), fHistDecayLengthV0K0(0), fHistDcaV0DaughtersK0(0), fHistChi2K0(0), fHistCosPointAngleK0(0), fHistDcaPosToPrimVertexK0vsMassK0(0), fHistDcaNegToPrimVertexK0vsMassK0(0), fHistRadiusV0K0vsMassK0(0), fHistDecayLengthV0K0vsMassK0(0), fHistDcaV0DaughtersK0vsMassK0(0), fHistCosPointAngleK0vsMassK0(0), fHistDcaPosToPrimVertexL(0), fHistDcaNegToPrimVertexL(0), fHistRadiusV0L(0), fHistDecayLengthV0L(0), fHistDcaV0DaughtersL(0), fHistChi2L(0), fHistCosPointAngleL(0), fHistcTauL(0), fHistDcaPosToPrimVertexLvsMassL(0), fHistDcaNegToPrimVertexLvsMassL(0), fHistRadiusV0LvsMassL(0), fHistDecayLengthV0LvsMassL(0), fHistDcaV0DaughtersLvsMassL(0), fHistCosPointAngleLvsMassL(0), fHistCosPointAngleLVsMassVsPtsigL(0), fHistCosPointAngleLVsMassVsPtbackL(0), fHistDcaPosToPrimVertexAntiL(0), fHistDcaNegToPrimVertexAntiL(0), fHistRadiusV0AntiL(0), fHistDecayLengthV0AntiL(0), fHistDcaV0DaughtersAntiL(0), fHistChi2AntiL(0), fHistCosPointAngleAntiL(0), fHistDcaPosToPrimVertexAntiLvsMass(0), fHistDcaNegToPrimVertexAntiLvsMass(0), fHistRadiusV0AntiLvsMass(0), fHistDecayLengthV0AntiLvsMass(0), fHistDcaV0DaughtersAntiLvsMass(0), fHistCosPointAngleAntiLvsMass(0), fHistMassK0(0), fHistMassLambda(0), fHistMassAntiLambda(0), fHistMassVsRadiusK0(0), fHistMassVsRadiusLambda(0), fHistMassVsRadiusAntiLambda(0), fHistPtVsMassK0(0), fHistPtVsMassLambda(0), fHistPtVsMassAntiLambda(0), fHistArmenterosPodolanski(0), fHistNsigmaPosProtonLambda(0), fHistNsigmaNegPionLambda(0), fHistNsigmaPosProtonAntiLambda(0), fHistNsigmaNegPionAntiLambda(0), fHistNsigmaPosPionK0(0), fHistNsigmaNegPionK0(0), fHistAsMcPtK0(0), fHistAsMcPtLambda(0), fHistAsMcPtAntiLambda(0), fHistAsMcProdRadiusK0(0), fHistAsMcProdRadiusLambda(0), fHistAsMcProdRadiusAntiLambda(0), fHistAsMcProdRadiusXvsYK0s(0), fHistAsMcProdRadiusXvsYLambda(0), fHistAsMcProdRadiusXvsYAntiLambda(0), fHistPidMcMassK0(0), fHistPidMcMassLambda(0), fHistPidMcMassAntiLambda(0), fHistAsMcMassK0(0), fHistAsMcMassLambda(0), fHistAsMcMassAntiLambda(0), fHistAsMcPtVsMassK0(0), fHistAsMcPtVsMassLambda(0), fHistAsMcPtVsMassAntiLambda(0), fHistAsMcMassVsRadiusK0(0), fHistAsMcMassVsRadiusLambda(0), fHistAsMcMassVsRadiusAntiLambda(0), fHistAsMcResxK0(0), fHistAsMcResyK0(0), fHistAsMcReszK0(0), fHistAsMcResrVsRadiusK0(0), fHistAsMcReszVsRadiusK0(0), fHistAsMcResxLambda(0), fHistAsMcResyLambda(0), fHistAsMcReszLambda(0), fHistAsMcResrVsRadiusLambda(0), fHistAsMcReszVsRadiusLambda(0), fHistAsMcResxAntiLambda(0), fHistAsMcResyAntiLambda(0), fHistAsMcReszAntiLambda(0), fHistAsMcResrVsRadiusAntiLambda(0), fHistAsMcReszVsRadiusAntiLambda(0), fHistAsMcResPtK0(0), fHistAsMcResPtLambda(0), fHistAsMcResPtAntiLambda(0), fHistAsMcResPtVsRapK0(0), fHistAsMcResPtVsRapLambda(0), fHistAsMcResPtVsRapAntiLambda(0), fHistAsMcResPtVsPtK0(0), fHistAsMcResPtVsPtLambda(0), fHistAsMcResPtVsPtAntiLambda(0), fHistAsMcPtLambdaFromSigma(0), fHistAsMcPtAntiLambdaFromSigma(0), fHistAsMcSecondaryPtVsRapK0s(0), fHistAsMcSecondaryPtVsRapLambda(0), fHistAsMcSecondaryPtVsRapAntiLambda(0), fHistAsMcSecondaryProdRadiusK0s(0), fHistAsMcSecondaryProdRadiusLambda(0), fHistAsMcSecondaryProdRadiusAntiLambda(0), fHistAsMcSecondaryProdRadiusXvsYK0s(0), fHistAsMcSecondaryProdRadiusXvsYLambda(0), fHistAsMcSecondaryProdRadiusXvsYAntiLambda(0), fHistAsMcSecondaryPtLambdaFromSigma(0), fHistAsMcSecondaryPtAntiLambdaFromSigma(0), fHistSibK0(0), fHistMixK0(0), fHistSibLambda(0), fHistMixLambda(0), fHistSibK0MC(0), fHistMixK0MC(0), fHistSibLambdaMC(0), fHistMixLambdaMC(0) { fRapidityCut=0.75; fUsePID="withPID"; fCutV0Radius=0.5; fCutDCANegToPV=0.06; fCutDCAPosToPV=0.06; fCutDCAV0Daughters=1.0; fCutV0CosPA=0.995; fSpecialArmenterosCutK0s=5; } //--------------------------------------------------------------------------------------- AliLeadingV0Correlation::AliLeadingV0Correlation(const char *name) : AliAnalysisTaskSE(name), fAODEvent(0x0), fPoolMgr(0x0), fPoolK0(0x0), fPoolLambda(0x0), fPIDResponse(0x0), fPoolMaxNEvents(0), fPoolMinNTracks(0), fMinEventsToMix(0), fNzVtxBins(0), fNCentBins(0), fcollidingSys("PbPb"), fpvzcut(0), fTrackEtaCut(0), fFilterBit(128), ftrigPtLow(0), ftrigPtHigh(0), fassocPtLow(0), fassocPtHigh(0), fAnalysisMC(0), fUsePID(""), fRapidityCut(0.), fCutV0Radius(0.), fCutDCANegToPV(0.), fCutDCAPosToPV(0.), fCutDCAV0Daughters(0.), fCutV0CosPA(0.), fSpecialArmenterosCutK0s(0.), fPerformMultiplicityStudy(0), fLoMultBound(0), fHiMultBound(0), fOutputList(0), fHistMCPrimaryVertexX(0), fHistMCPrimaryVertexY(0), fHistMCPrimaryVertexZ(0), fHistMCtracksProdRadiusK0s(0), fHistMCtracksProdRadiusLambda(0), fHistMCtracksProdRadiusAntiLambda(0), fHistMCtracksDecayRadiusK0s(0), fHistMCtracksDecayRadiusLambda(0), fHistMCtracksDecayRadiusAntiLambda(0), fHistMCPtAllK0s(0), fHistMCPtAllLambda(0), fHistMCPtAllAntiLambda(0), fHistMCProdRadiusK0s(0), fHistMCProdRadiusLambda(0), fHistMCProdRadiusAntiLambda(0), fHistMCRapK0s(0), fHistMCRapLambda(0), fHistMCRapAntiLambda(0), fHistMCPtK0s(0), fHistMCPtLambda(0), fHistMCPtAntiLambda(0), fHistMCPtLambdaFromSigma(0), fHistMCPtAntiLambdaFromSigma(0), fHistNTimesRecK0s(0), fHistNTimesRecLambda(0), fHistNTimesRecAntiLambda(0), fHistNTimesRecK0sVsPt(0), fHistNTimesRecLambdaVsPt(0), fHistNTimesRecAntiLambdaVsPt(0), fHistMCDaughterTrack(0), fHistPrimRawPtVsYK0s(0), fHistPrimRawPtVsYLambda(0), fHistPrimRawPtVsYAntiLambda(0), fHistPrimaryVertexX(0), fHistPrimaryVertexY(0), fHistPrimaryVertexZ(0), fHistDcaPosToPrimVertexK0(0), fHistDcaNegToPrimVertexK0(0), fHistRadiusV0K0(0), fHistDecayLengthV0K0(0), fHistDcaV0DaughtersK0(0), fHistChi2K0(0), fHistCosPointAngleK0(0), fHistDcaPosToPrimVertexK0vsMassK0(0), fHistDcaNegToPrimVertexK0vsMassK0(0), fHistRadiusV0K0vsMassK0(0), fHistDecayLengthV0K0vsMassK0(0), fHistDcaV0DaughtersK0vsMassK0(0), fHistCosPointAngleK0vsMassK0(0), fHistDcaPosToPrimVertexL(0), fHistDcaNegToPrimVertexL(0), fHistRadiusV0L(0), fHistDecayLengthV0L(0), fHistDcaV0DaughtersL(0), fHistChi2L(0), fHistCosPointAngleL(0), fHistcTauL(0), fHistDcaPosToPrimVertexLvsMassL(0), fHistDcaNegToPrimVertexLvsMassL(0), fHistRadiusV0LvsMassL(0), fHistDecayLengthV0LvsMassL(0), fHistDcaV0DaughtersLvsMassL(0), fHistCosPointAngleLvsMassL(0), fHistCosPointAngleLVsMassVsPtsigL(0), fHistCosPointAngleLVsMassVsPtbackL(0), fHistDcaPosToPrimVertexAntiL(0), fHistDcaNegToPrimVertexAntiL(0), fHistRadiusV0AntiL(0), fHistDecayLengthV0AntiL(0), fHistDcaV0DaughtersAntiL(0), fHistChi2AntiL(0), fHistCosPointAngleAntiL(0), fHistDcaPosToPrimVertexAntiLvsMass(0), fHistDcaNegToPrimVertexAntiLvsMass(0), fHistRadiusV0AntiLvsMass(0), fHistDecayLengthV0AntiLvsMass(0), fHistDcaV0DaughtersAntiLvsMass(0), fHistCosPointAngleAntiLvsMass(0), fHistMassK0(0), fHistMassLambda(0), fHistMassAntiLambda(0), fHistMassVsRadiusK0(0), fHistMassVsRadiusLambda(0), fHistMassVsRadiusAntiLambda(0), fHistPtVsMassK0(0), fHistPtVsMassLambda(0), fHistPtVsMassAntiLambda(0), fHistArmenterosPodolanski(0), fHistNsigmaPosProtonLambda(0), fHistNsigmaNegPionLambda(0), fHistNsigmaPosProtonAntiLambda(0), fHistNsigmaNegPionAntiLambda(0), fHistNsigmaPosPionK0(0), fHistNsigmaNegPionK0(0), fHistAsMcPtK0(0), fHistAsMcPtLambda(0), fHistAsMcPtAntiLambda(0), fHistAsMcProdRadiusK0(0), fHistAsMcProdRadiusLambda(0), fHistAsMcProdRadiusAntiLambda(0), fHistAsMcProdRadiusXvsYK0s(0), fHistAsMcProdRadiusXvsYLambda(0), fHistAsMcProdRadiusXvsYAntiLambda(0), fHistPidMcMassK0(0), fHistPidMcMassLambda(0), fHistPidMcMassAntiLambda(0), fHistAsMcMassK0(0), fHistAsMcMassLambda(0), fHistAsMcMassAntiLambda(0), fHistAsMcPtVsMassK0(0), fHistAsMcPtVsMassLambda(0), fHistAsMcPtVsMassAntiLambda(0), fHistAsMcMassVsRadiusK0(0), fHistAsMcMassVsRadiusLambda(0), fHistAsMcMassVsRadiusAntiLambda(0), fHistAsMcResxK0(0), fHistAsMcResyK0(0), fHistAsMcReszK0(0), fHistAsMcResrVsRadiusK0(0), fHistAsMcReszVsRadiusK0(0), fHistAsMcResxLambda(0), fHistAsMcResyLambda(0), fHistAsMcReszLambda(0), fHistAsMcResrVsRadiusLambda(0), fHistAsMcReszVsRadiusLambda(0), fHistAsMcResxAntiLambda(0), fHistAsMcResyAntiLambda(0), fHistAsMcReszAntiLambda(0), fHistAsMcResrVsRadiusAntiLambda(0), fHistAsMcReszVsRadiusAntiLambda(0), fHistAsMcResPtK0(0), fHistAsMcResPtLambda(0), fHistAsMcResPtAntiLambda(0), fHistAsMcResPtVsRapK0(0), fHistAsMcResPtVsRapLambda(0), fHistAsMcResPtVsRapAntiLambda(0), fHistAsMcResPtVsPtK0(0), fHistAsMcResPtVsPtLambda(0), fHistAsMcResPtVsPtAntiLambda(0), fHistAsMcPtLambdaFromSigma(0), fHistAsMcPtAntiLambdaFromSigma(0), fHistAsMcSecondaryPtVsRapK0s(0), fHistAsMcSecondaryPtVsRapLambda(0), fHistAsMcSecondaryPtVsRapAntiLambda(0), fHistAsMcSecondaryProdRadiusK0s(0), fHistAsMcSecondaryProdRadiusLambda(0), fHistAsMcSecondaryProdRadiusAntiLambda(0), fHistAsMcSecondaryProdRadiusXvsYK0s(0), fHistAsMcSecondaryProdRadiusXvsYLambda(0), fHistAsMcSecondaryProdRadiusXvsYAntiLambda(0), fHistAsMcSecondaryPtLambdaFromSigma(0), fHistAsMcSecondaryPtAntiLambdaFromSigma(0), fHistSibK0(0), fHistMixK0(0), fHistSibLambda(0), fHistMixLambda(0), fHistSibK0MC(0), fHistMixK0MC(0), fHistSibLambdaMC(0), fHistMixLambdaMC(0) { fRapidityCut=0.75; fUsePID="withPID"; fCutV0Radius=0.5; fCutDCANegToPV=0.06; fCutDCAPosToPV=0.06; fCutDCAV0Daughters=1.0; fCutV0CosPA=0.995; fSpecialArmenterosCutK0s=5; DefineOutput(1, TList::Class()); } //--------------------------------------------------------------------------------------- AliLeadingV0Correlation::~AliLeadingV0Correlation() { // Destructor. Clean-up the output list, but not the histograms that are put inside // (the list is owner and will clean-up these histograms). Protect in PROOF case. if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) { delete fOutputList; } } //--------------------------------------------------------------------------------------- void AliLeadingV0Correlation::UserCreateOutputObjects() { fOutputList = new TList(); fOutputList->SetOwner(); Int_t lCustomNBins = 200; Double_t lCustomPtUpperLimit = 20; //Int_t lCustomNBinsMultiplicity = 100; //---------------------------------------------- MC histograms -----------------------------------------------------// // Primary Vertex: fHistMCPrimaryVertexX = new TH1F("h1MCPrimaryVertexX", "MC Primary Vertex Position X;Primary Vertex Position X (cm);Events",100,-0.5,0.5); fOutputList->Add(fHistMCPrimaryVertexX); fHistMCPrimaryVertexY = new TH1F("h1MCPrimaryVertexY", "MC Primary Vertex Position Y;Primary Vertex Position Y (cm);Events",100,-0.5,0.5); fOutputList->Add(fHistMCPrimaryVertexY); fHistMCPrimaryVertexZ = new TH1F("h1MCPrimaryVertexZ", "MC Primary Vertex Position Z;Primary Vertex Position Z (cm);Events",200,-20,20); fOutputList->Add(fHistMCPrimaryVertexZ); // Production Radius of non-primary particles: fHistMCtracksProdRadiusK0s = new TH2F("h2MCtracksProdRadiusK0s","Non-primary MC K^{0} Production Radius;x (cm); y (cm)",200,-50,50,200,-50,50); fOutputList->Add(fHistMCtracksProdRadiusK0s); fHistMCtracksProdRadiusLambda = new TH2F("h2MCtracksProdRadiusLambda","Non-primary MC #Lambda^{0} Production Radius;x (cm); y (cm)",200,-50,50,200,-50,50); fOutputList->Add(fHistMCtracksProdRadiusLambda); fHistMCtracksProdRadiusAntiLambda = new TH2F("h2MCtracksProdRadiusAntiLambda","Non-primary MC #bar{#Lambda}^{0} Production Radius;x (cm); y (cm)",200,-50,50,200,-50,50); fOutputList->Add(fHistMCtracksProdRadiusAntiLambda); // Decay Radius of non-primary particles: fHistMCtracksDecayRadiusK0s = new TH1F("h1MCtracksDecayRadiusK0s","Non-primary MC K^{0} Decay Radius;r (cm)",101,-1,100); fOutputList->Add(fHistMCtracksDecayRadiusK0s); fHistMCtracksDecayRadiusLambda = new TH1F("h1MCtracksDecayRadiusLambda","Non-primary MC #Lambda^{0} Decay Radius;r (cm)",101,-1,100); fOutputList->Add(fHistMCtracksDecayRadiusLambda); fHistMCtracksDecayRadiusAntiLambda = new TH1F("h1MCtracksDecayRadiusAntiLambda","Non-primary #bar{#Lambda}^{0} Decay Radius;r (cm)",100,1,101); fOutputList->Add(fHistMCtracksDecayRadiusAntiLambda); // Rapidity distribution: fHistMCRapK0s = new TH1F("h1MCRapK0s", "K^{0};y",160,-4,4); fOutputList->Add(fHistMCRapK0s); fHistMCRapLambda = new TH1F("h1MCRapLambda", "#Lambda;y",160,-4,4); fOutputList->Add(fHistMCRapLambda); fHistMCRapAntiLambda = new TH1F("h1MCRapAntiLambda", "#bar{#Lambda};y",160,-4,4); fOutputList->Add(fHistMCRapAntiLambda); // Production Radius fHistMCProdRadiusK0s = new TH1F("h1MCProdRadiusK0s", "MC K^{0} Production Radius;r (cm);Count", 400, -2, 2); fOutputList->Add(fHistMCProdRadiusK0s); fHistMCProdRadiusLambda = new TH1F("h1MCProdRadiusLambda", "MC #Lambda^{0} Production Radius;r (cm);Count", 400, -2, 2); fOutputList->Add(fHistMCProdRadiusLambda); fHistMCProdRadiusAntiLambda = new TH1F("h1MCProdRadiusAntiLambda", "MC #bar{#Lambda}^{0} Production Radius;r (cm);Count", 400, -2, 2); fOutputList->Add(fHistMCProdRadiusAntiLambda); // Pt distribution: fHistMCPtK0s = new TH1F("h1MCPtK0s", "K^{0};p{t} (GeV/c)",240,0,12); fOutputList->Add(fHistMCPtK0s); fHistMCPtLambda = new TH1F("h1MCPtLambda", "#Lambda^{0};p{t} (GeV/c)",240,0,12); fOutputList->Add(fHistMCPtLambda); fHistMCPtAntiLambda = new TH1F("h1MCPtAntiLambda", "#AntiLambda^{0};p{t} (GeV/c)",240,0,12); fOutputList->Add(fHistMCPtAntiLambda); // Pt distribution of Lambda coming from Sigma decay fHistMCPtLambdaFromSigma = new TH1F("h1MCPtLambdaFromSigma", "#Lambda^{0};p{t} (GeV/c)",240,0,12); fOutputList->Add(fHistMCPtLambdaFromSigma); fHistMCPtAntiLambdaFromSigma = new TH1F("h1MCPtAntiLambdaFromSigma", "#Lambda^{0};p{t} (GeV/c)",240,0,12); fOutputList->Add(fHistMCPtAntiLambdaFromSigma); // Multiple reconstruction studies fHistNTimesRecK0s = new TH1F("h1NTimesRecK0s","number of times a K0s is reconstructed in -1Add(fHistNTimesRecK0s); fHistNTimesRecLambda = new TH1F("h1NTimesRecLambda","number of times a Lambda is reconstructed in -1Add(fHistNTimesRecLambda); fHistNTimesRecAntiLambda = new TH1F("h1NTimesRecAntiLambda","number of times an AntiLambda is reconstructed in -1Add(fHistNTimesRecAntiLambda); fHistNTimesRecK0sVsPt = new TH2F("h2NTimesRecK0sVsPt","NTimes versus Pt, K^{0} in -1Add(fHistNTimesRecK0sVsPt); fHistNTimesRecLambdaVsPt = new TH2F("h2NTimesRecLambdaVsPt","NTimes versus Pt, #Lambda^{0} in -1Add(fHistNTimesRecLambdaVsPt); fHistNTimesRecAntiLambdaVsPt = new TH2F("h2NTimesRecAntiLambdaVsPt","NTimes versus Pt, #bar{#Lambda}^{0} in -1Add(fHistNTimesRecAntiLambdaVsPt); // Pt Distribution of non-primary particles: fHistMCPtAllK0s = new TH1F("h1MCPtAllK0s", "Non-primary MC K^{0};p{t} (GeV/c);Counts",240,0,12); fOutputList->Add(fHistMCPtAllK0s); fHistMCPtAllLambda = new TH1F("h1MCPtAllLambda", "Non-primary MC #Lambda^{0};p{t} (GeV/c);Counts",240,0,12); fOutputList->Add(fHistMCPtAllLambda); fHistMCPtAllAntiLambda = new TH1F("h1MCPtAllAntiLambda", "Non-primary MC #bar{#Lambda}^{0};p{t} (GeV/c);Counts",240,0,12); fOutputList->Add(fHistMCPtAllAntiLambda); fHistMCDaughterTrack = new TH1F("h1MCDaughterTrack","Distribution of mc id for daughters;id tags;Counts",15,0,15); fOutputList->Add(fHistMCDaughterTrack); fHistPrimRawPtVsYK0s = new TH2F( "f3dHistPrimRawPtVsYVsMultK0Short", "Pt{K0S} Vs Y{K0S} Vs Multiplicity; Pt{K0S} (GeV/c); Y{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2); fOutputList->Add(fHistPrimRawPtVsYK0s); fHistPrimRawPtVsYLambda = new TH2F( "f3dHistPrimRawPtVsYVsMultLambda", "Pt{lambda} Vs Y{#Lambda} Vs Multiplicity; Pt{lambda} (GeV/c); Y{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2); fOutputList->Add(fHistPrimRawPtVsYLambda); fHistPrimRawPtVsYAntiLambda = new TH2F( "f3dHistPrimRawPtVsYVsMultAntiLambda", "Pt{antilambda} Vs Y{#Lambda} Vs Multiplicity; Pt{antilambda} (GeV/c); Y{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2); fOutputList->Add(fHistPrimRawPtVsYAntiLambda); //---------------------------------------------End Of MC Histos-----------------------------------------------------// // Primary Vertex: fHistPrimaryVertexX = new TH1F("h1PrimaryVertexX", "Primary Vertex Position X;Primary Vertex Position X (cm);Events",100,-0.5,0.5); fOutputList->Add(fHistPrimaryVertexX); fHistPrimaryVertexY = new TH1F("h1PrimaryVertexY", "Primary Vertex Position Y;Primary Vertex Position Y (cm);Events",100,-0.5,0.5); fOutputList->Add(fHistPrimaryVertexY); fHistPrimaryVertexZ = new TH1F("h1PrimaryVertexZ", "Primary Vertex Position Z;Primary Vertex Position Z (cm);Events",200,-20,20); fOutputList->Add(fHistPrimaryVertexZ); //////K0s///////////////// 2D histos: cut vs on fly status//// fHistDcaPosToPrimVertexK0 = new TH2F("h2DcaPosToPrimVertexK0", "Positive V0 daughter;dca(cm);Status",100,0,10,2,-0.5,1.5); fOutputList->Add(fHistDcaPosToPrimVertexK0); fHistDcaNegToPrimVertexK0 = new TH2F("h2DcaNegToPrimVertexK0", "Negative V0 daughter;dca(cm);Status",100,0,10,2,-0.5,1.5); fOutputList->Add(fHistDcaNegToPrimVertexK0); fHistRadiusV0K0 = new TH2F("h2RadiusV0K0", "Radius;Radius(cm);Status",500,0,500,2,-0.5,1.5); fOutputList->Add(fHistRadiusV0K0); fHistDecayLengthV0K0 = new TH2F("h2DecayLengthV0K0", "V0s decay Length;decay length(cm);Status", 500, 0, 500,2,-0.5,1.5); fOutputList->Add(fHistDecayLengthV0K0); fHistDcaV0DaughtersK0 = new TH2F("h2DcaV0DaughtersK0", "DCA between daughters;dca(cm);Status", 300, 0, 3.0,2,-0.5,1.5); fOutputList->Add(fHistDcaV0DaughtersK0); fHistChi2K0 = new TH2F("h2Chi2K0", "V0s chi2;chi2;Status", 1000, 0, 0.1,2,-0.5,1.5); fOutputList->Add(fHistChi2K0); fHistCosPointAngleK0 = new TH2F("h2CosPointAngleK0", "Cosine of V0's pointing angle", 200,0.99,1.01,2,-0.5,1.5); fOutputList->Add(fHistCosPointAngleK0); ////////////K0s///////////////// 2D histos: cut vs mass//// fHistDcaPosToPrimVertexK0vsMassK0 = new TH2F("h2DcaPosToPrimVertexK0vsMassK0", "Positive V0 daughter;dca(cm);K0s inv. mass",500,0,10,200,0.4,0.6); fOutputList->Add(fHistDcaPosToPrimVertexK0vsMassK0); fHistDcaNegToPrimVertexK0vsMassK0 = new TH2F("h2DcaNegToPrimVertexK0vsMassK0", "Negative V0 daughter;dca(cm);K0s inv. mass",500,0,10,200,0.4,0.6); fOutputList->Add(fHistDcaNegToPrimVertexK0vsMassK0); fHistRadiusV0K0vsMassK0 = new TH2F("h2RadiusV0K0vsMassK0", "Radius;Radius(cm);K0s inv. mass",110,0,110,200,0.4,0.6); fOutputList->Add(fHistRadiusV0K0vsMassK0); fHistDecayLengthV0K0vsMassK0 = new TH2F("h2DecayLengthV0K0vsMassK0", "V0s decay Length;decay length(cm);K0s inv. mass", 100, 0, 100,200,0.4,0.6); fOutputList->Add(fHistDecayLengthV0K0vsMassK0); fHistDcaV0DaughtersK0vsMassK0 = new TH2F("h2DcaV0DaughtersK0vsMassK0", "DCA between daughters;dca(cm);K0s inv. mass", 110, 0, 1.1,200,0.4,0.6); fOutputList->Add(fHistDcaV0DaughtersK0vsMassK0); fHistCosPointAngleK0vsMassK0 = new TH2F("h2CosPointAngleK0vsMassK0", "Cosine of V0's pointing angle", 200,0.997,1.007,200,0.4,0.6); fOutputList->Add(fHistCosPointAngleK0vsMassK0); //////////Lambda////////////// 2D histos: cut vs on fly status//// fHistDcaPosToPrimVertexL = new TH2F("h2DcaPosToPrimVertexL", "Positive V0 daughter;dca(cm);Status",100,0,10,2,-0.5,1.5); fOutputList->Add(fHistDcaPosToPrimVertexL); fHistDcaNegToPrimVertexL = new TH2F("h2DcaNegToPrimVertexL", "Negative V0 daughter;dca(cm);Status",100,0,10,2,-0.5,1.5); fOutputList->Add(fHistDcaNegToPrimVertexL); fHistRadiusV0L = new TH2F("h2RadiusV0L", "Radius;Radius(cm);Status",100,0,110,2,-0.5,1.5); fOutputList->Add(fHistRadiusV0L); fHistDecayLengthV0L = new TH2F("h2DecayLengthV0L", "V0s decay Length;decay length(cm);Status", 500, 0, 500,2,-0.5,1.5); fOutputList->Add(fHistDecayLengthV0L); fHistDcaV0DaughtersL = new TH2F("h2DcaV0DaughtersL", "DCA between daughters;dca(cm);Status", 300, 0, 3.0,2,-0.5,1.5); fOutputList->Add(fHistDcaV0DaughtersL); fHistChi2L = new TH2F("h2Chi2L", "V0s chi2;chi2;Status", 100, 0, 0.10,2,-0.5,1.5); fOutputList->Add(fHistChi2L); fHistCosPointAngleL = new TH2F("h2CosPointAngleL", "Cosine of V0's pointing angle", 200,0.99,1.01,2,-0.5,1.5); fOutputList->Add(fHistCosPointAngleL); fHistcTauL = new TH1F("h1cTauL","cTaou of Lambdas",100,0,100); fOutputList->Add(fHistcTauL); //////////Lambda////////////// 2D histos: cut vs mass//// fHistDcaPosToPrimVertexLvsMassL = new TH2F("h2DcaPosToPrimVertexLvsMassL", "Positive V0 daughter;dca(cm);Status",100,0,10,140, 1.06, 1.2); fOutputList->Add(fHistDcaPosToPrimVertexLvsMassL); fHistDcaNegToPrimVertexLvsMassL = new TH2F("h2DcaNegToPrimVertexLvsMassL", "Negative V0 daughter;dca(cm);Status",100,0,10,140, 1.06, 1.2); fOutputList->Add(fHistDcaNegToPrimVertexLvsMassL); fHistRadiusV0LvsMassL = new TH2F("h2RadiusV0LvsMassL", "Radius;Radius(cm);Status",110,0,110,140, 1.06, 1.2); fOutputList->Add(fHistRadiusV0LvsMassL); fHistDecayLengthV0LvsMassL = new TH2F("h2DecayLengthV0LvsMassL", "V0s decay Length;decay length(cm);Status", 120, 0, 120,140, 1.06, 1.2); fOutputList->Add(fHistDecayLengthV0LvsMassL); fHistDcaV0DaughtersLvsMassL = new TH2F("h2DcaV0DaughtersLvsMassL", "DCA between daughters;dca(cm);Status", 110, 0, 1.1,140, 1.06, 1.2); fOutputList->Add(fHistDcaV0DaughtersLvsMassL); fHistCosPointAngleLvsMassL = new TH2F("h2CosPointAngleLvsMassL", "Cosine of V0's pointing angle", 200,0.997,1.007,140, 1.06, 1.2); fOutputList->Add(fHistCosPointAngleLvsMassL); fHistCosPointAngleLVsMassVsPtsigL = new TH3F("h3McCosPointAngleLVsMassVsPtsigL", "Cosine of V0's pointing angle",3,0,12, 2,00.997,1.007,140, 1.06, 1.2); fOutputList->Add(fHistCosPointAngleLVsMassVsPtsigL); fHistCosPointAngleLVsMassVsPtbackL = new TH3F("h3McCosPointAngleLVsMassVsPtbackL", "Cosine of V0's pointing angle",3,0,12, 20,0.997,1.007,140, 1.06, 1.2); fOutputList->Add(fHistCosPointAngleLVsMassVsPtbackL); //////////AntiLambda////////////// 2D histos: cut vs on fly status//// fHistDcaPosToPrimVertexAntiL = new TH2F("h2DcaPosToPrimVertexAntiL", "Positive V0 daughter;dca(cm);Status",100,0,10,2,-0.5,1.5); fOutputList->Add(fHistDcaPosToPrimVertexAntiL); fHistDcaNegToPrimVertexAntiL = new TH2F("h2DcaNegToPrimVertexAntiL", "Negative V0 daughter;dca(cm);Status",100,0,10,2,-0.5,1.5); fOutputList->Add(fHistDcaNegToPrimVertexAntiL); fHistRadiusV0AntiL = new TH2F("h2RadiusV0AntiL", "Radius;Radius(cm);Status",100,0,110,2,-0.5,1.5); fOutputList->Add(fHistRadiusV0AntiL); fHistDecayLengthV0AntiL = new TH2F("h2DecayLengthV0AntiL", "V0s decay Length;decay length(cm);Status", 500, 0, 500,2,-0.5,1.5); fOutputList->Add(fHistDecayLengthV0AntiL); fHistDcaV0DaughtersAntiL = new TH2F("h2DcaV0DaughtersAntiL", "DCA between daughters;dca(cm);Status", 300, 0, 3.0,2,-0.5,1.5); fOutputList->Add(fHistDcaV0DaughtersAntiL); fHistChi2AntiL = new TH2F("h2Chi2AntiL", "V0s chi2;chi2;Status", 100, 0, 0.10,2,-0.5,1.5); fOutputList->Add(fHistChi2AntiL); fHistCosPointAngleAntiL = new TH2F("h2CosPointAngleAntiL", "Cosine of V0's pointing angle", 200,0.99,1.01,2,-0.5,1.5); fOutputList->Add(fHistCosPointAngleAntiL); //////////AntiLambda////////////// 2D histos: cut vs mass//// fHistDcaPosToPrimVertexAntiLvsMass = new TH2F("h2DcaPosToPrimVertexAntiLvsMass", "Positive V0 daughter;dca(cm);Status",100,0,10,140, 1.06, 1.2); fOutputList->Add(fHistDcaPosToPrimVertexAntiLvsMass); fHistDcaNegToPrimVertexAntiLvsMass = new TH2F("h2DcaNegToPrimVertexAntiLvsMass", "Negative V0 daughter;dca(cm);Status",100,0,10,140, 1.06, 1.2); fOutputList->Add(fHistDcaNegToPrimVertexAntiLvsMass); fHistRadiusV0AntiLvsMass = new TH2F("h2RadiusV0AntiLvsMass", "Radius;Radius(cm);Status",110,0,110,140, 1.06, 1.2); fOutputList->Add(fHistRadiusV0AntiLvsMass); fHistDecayLengthV0AntiLvsMass = new TH2F("h2DecayLengthV0AntiLvsMass", "V0s decay Length;decay length(cm);Status", 120, 0, 120,140, 1.06, 1.2); fOutputList->Add(fHistDecayLengthV0AntiLvsMass); fHistDcaV0DaughtersAntiLvsMass = new TH2F("h2DcaV0DaughtersAntiLvsMass", "DCA between daughters;dca(cm);Status", 110, 0, 1.1,140, 1.06, 1.2); fOutputList->Add(fHistDcaV0DaughtersAntiLvsMass); fHistCosPointAngleAntiLvsMass = new TH2F("h2CosPointAngleAntiLvsMass", "Cosine of V0's pointing angle", 200,0.997,1.007,140, 1.06, 1.2); fOutputList->Add(fHistCosPointAngleAntiLvsMass); // Mass: fHistMassK0 = new TH1F("h1MassK0", "K^{0} candidates;M(#pi^{+}#pi^{-}) (GeV/c^{2});Counts", 200, 0.4, 0.6); fOutputList->Add(fHistMassK0); fHistMassLambda = new TH1F("h1MassLambda", "#Lambda^{0} candidates;M(p#pi^{-}) (GeV/c^{2});Counts", 150, 1.05, 1.2); fOutputList->Add(fHistMassLambda); fHistMassAntiLambda = new TH1F("h1MassAntiLambda", "#bar{#Lambda}^{0} candidates;M(#bar{p}#pi^{+}) (GeV/c^{2});Counts", 150, 1.05, 1.2); fOutputList->Add(fHistMassAntiLambda); fHistMassVsRadiusK0 = new TH2F("h2MassVsRadiusK0", "K^{0} candidates;radius (cm);M(#pi^{+}#pi^{-}) (GeV/c^{2})",200,0,200, 200, 0.4, 0.6); fOutputList->Add(fHistMassVsRadiusK0); fHistMassVsRadiusLambda = new TH2F("h2MassVsRadiusLambda", "#Lambda candidates;radius (cm);M(p#pi^{-}) (GeV/c^{2})",200,0,200, 140, 1.06, 1.2); fOutputList->Add(fHistMassVsRadiusLambda); fHistMassVsRadiusAntiLambda = new TH2F("h2MassVsRadiusAntiLambda", "#bar{#Lambda} candidates;radius (cm);M(#bar{p}#pi^{+}) (GeV/c^{2})",200,0,200, 140, 1.06, 1.2); fOutputList->Add(fHistMassVsRadiusAntiLambda); // Pt Vs Mass fHistPtVsMassK0 = new TH2F("h2PtVsMassK0","K^{0} candidates;M(#pi^{+}#pi^{-}) (GeV/c^{2});p{t} (GeV/c)",400, 0.4, 0.6,240,0,12); fOutputList->Add(fHistPtVsMassK0); fHistPtVsMassLambda = new TH2F("h2PtVsMassLambda","#Lambda^{0} candidates;M(p#pi^{-}) (GeV/c^{2});p{t} (GeV/c)",280, 1.06, 1.2,240,0,12); fOutputList->Add(fHistPtVsMassLambda); fHistPtVsMassAntiLambda = new TH2F("h2PtVsMassAntiLambda","#AntiLambda^{0} candidates;M(p#pi^{-}) (GeV/c^{2});p{t} (GeV/c)",280, 1.06, 1.2,240,0,12); fOutputList->Add(fHistPtVsMassAntiLambda); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///Armenteros Podolansky fHistArmenterosPodolanski = new TH2F("h2ArmenterosPodolanski","Armenteros-Podolanski phase space;#alpha;p{t} arm",100,-1.0,1.0,50,0,0.5); fOutputList->Add(fHistArmenterosPodolanski); //PID fHistNsigmaPosProtonLambda = new TH1F("h1NsigmaPosProtonLambda", "Positive daughter of Lambda;NsigmaProton;Counts",25,0,5); fOutputList->Add(fHistNsigmaPosProtonLambda); fHistNsigmaNegPionLambda = new TH1F("h1NsigmaNegPionLambda", "Negative daughter of Lambda;NsigmaPion;Counts",25,0,5); fOutputList->Add(fHistNsigmaNegPionLambda); fHistNsigmaPosProtonAntiLambda = new TH1F("h1NsigmaPosProtonAntiLambda", "Positive daughter of AntiLambda;NsigmaProton;Counts",25,0,5); fOutputList->Add(fHistNsigmaPosProtonAntiLambda); fHistNsigmaNegPionAntiLambda = new TH1F("h1NsigmaNegPionAntiLambda", "Negative daughter of AntiLambda;NsigmaPion;Counts",25,0,5); fOutputList->Add(fHistNsigmaNegPionAntiLambda); fHistNsigmaPosPionK0 = new TH1F("h1NsigmaPosPionK0", "Positive daughter of K0s;NsigmaPion;Counts",25,0,5); fOutputList->Add(fHistNsigmaPosPionK0); fHistNsigmaNegPionK0 = new TH1F("h1NsigmaNegPionK0", "Negative daughter of K0s;NsigmaPion;Counts",25,0,5); fOutputList->Add(fHistNsigmaNegPionK0); //--------------------------------------------MC Associated histograms -----------------------------------------------------// //Pt distribution fHistAsMcPtK0 = new TH1F("h1AsMcPtK0", "K^{0} associated;p{t} (GeV/c);Counts", 240,0,12); fOutputList->Add(fHistAsMcPtK0); fHistAsMcPtLambda = new TH1F("h1AsMcPtLambda", "#Lambda^{0} associated;p{t} (GeV/c);Counts", 240,0,12); fOutputList->Add(fHistAsMcPtLambda); fHistAsMcPtAntiLambda = new TH1F("h1AsMcPtAntiLambda", "#AntiLambda^{0} associated;p{t} (GeV/c);Counts", 240,0,12); fOutputList->Add(fHistAsMcPtAntiLambda); // Radius distribution fHistAsMcProdRadiusK0 = new TH1F("h1AsMcProdRadiusK0", "K^{0} associated;r (cm);Counts", 500, 0, 100); fOutputList->Add(fHistAsMcProdRadiusK0); fHistAsMcProdRadiusLambda = new TH1F("h1AsMcProdRadiusLambda", "#Lambda^{0} associated;r (cm);Counts", 500, 0, 100); fOutputList->Add(fHistAsMcProdRadiusLambda); fHistAsMcProdRadiusAntiLambda = new TH1F("h1AsMcProdRadiusAntiLambda", "#bar{#Lambda}^{0} associated;r (cm);Counts", 500, 0, 100); fOutputList->Add(fHistAsMcProdRadiusAntiLambda); fHistAsMcProdRadiusXvsYK0s = new TH2F("h2AsMcProdRadiusXvsYK0s","Associated Secondary K^{0} Production Radius;x (cm); y (cm)",200,-50,50,200,-50,50); fOutputList->Add(fHistAsMcProdRadiusXvsYK0s); fHistAsMcProdRadiusXvsYLambda = new TH2F("h2AsMcProdRadiusXvsYLambda","Associated Secondary #Lambda^{0} Production Radius;x (cm); y (cm)",200,-50,50,200,-50,50); fOutputList->Add(fHistAsMcProdRadiusXvsYLambda); fHistAsMcProdRadiusXvsYAntiLambda = new TH2F("h2AsMcProdRadiusXvsYAntiLambda","Associated Secondary #bar{#Lambda}^{0} Production Radius;x (cm); y (cm)",200,-50,50,200,-50,50); fOutputList->Add(fHistAsMcProdRadiusXvsYAntiLambda); // Mass fHistPidMcMassK0 = new TH1F("h1PidMcMassK0", "K^{0} MC PId checked;M(#pi^{+}#pi^{-}) (GeV/c^{2});Counts", 100, 0.4, 0.6); fOutputList->Add(fHistPidMcMassK0); fHistPidMcMassLambda = new TH1F("h1PidMcMassLambda", "#Lambda^{0} MC PId checked;M(p#pi^{-}) (GeV/c^{2});Counts", 75, 1.05, 1.2); fOutputList->Add(fHistPidMcMassLambda); fHistPidMcMassAntiLambda = new TH1F("h1PidMcMassAntiLambda", "#bar{#Lambda}^{0} MC PId checked;M(#bar{p}#pi^{+}) (GeV/c^{2});Counts", 75, 1.05, 1.2); fOutputList->Add(fHistPidMcMassAntiLambda); fHistAsMcMassK0 = new TH1F("h1AsMcMassK0", "K^{0} associated;M(#pi^{+}#pi^{-}) (GeV/c^{2});Counts", 100, 0.4, 0.6); fOutputList->Add(fHistAsMcMassK0); fHistAsMcMassLambda = new TH1F("h1AsMcMassLambda", "#Lambda^{0} associated;M(p#pi^{-}) (GeV/c^{2});Counts", 75, 1.05, 1.2); fOutputList->Add(fHistAsMcMassLambda); fHistAsMcMassAntiLambda = new TH1F("h1AsMcMassAntiLambda", "#bar{#Lambda}^{0} associated;M(#bar{p}#pi^{+}) (GeV/c^{2});Counts", 75, 1.05, 1.2); fOutputList->Add(fHistAsMcMassAntiLambda); //Pt versus Mass fHistAsMcPtVsMassK0 = new TH2F("h2AsMcPtVsMassK0","K^{0} associated;M(#pi^{+}#pi^{-}) (GeV/c^{2});p{t} (GeV/c)",200, 0.4, 0.6,240,0,12); fOutputList->Add(fHistAsMcPtVsMassK0); fHistAsMcPtVsMassLambda = new TH2F("h2AsMcPtVsMassLambda","#Lambda^{0} associated;M(p#pi^{-}) (GeV/c^{2});p{t} (GeV/c)",140, 1.06, 1.2,240,0,12); fOutputList->Add(fHistAsMcPtVsMassLambda); fHistAsMcPtVsMassAntiLambda = new TH2F("h2AsMcPtVsMassAntiLambda","#bar{#Lambda}^{0} associated;M(#bar{p}#pi^{+}) (GeV/c^{2});p{t} (GeV/c)",140, 1.06, 1.2,240,0,12); fOutputList->Add(fHistAsMcPtVsMassAntiLambda); // invariant mass vs radius fHistAsMcMassVsRadiusK0 = new TH2F("h2AsMcMassVsRadiusK0", "K^{0} associated;radius (cm);M(#pi^{+}#pi^{-}) (GeV/c^{2})",200,0,200, 500, 0.47, 0.52); fOutputList->Add(fHistAsMcMassVsRadiusK0); fHistAsMcMassVsRadiusLambda = new TH2F("h2AsMcMassVsRadiusLambda", "#Lambda associated;radius (cm);M(p#pi^{-}) (GeV/c^{2})",200,0,200, 1.10, 1.13); fOutputList->Add(fHistAsMcMassVsRadiusLambda); fHistAsMcMassVsRadiusAntiLambda = new TH2F("h2AsMcMassVsRadiusAntiLambda", "#bar{#Lambda} associated;radius (cm);M(#bar{p}#pi^{+}) (GeV/c^{2})",200,0,200 , 1.10, 1.13); fOutputList->Add(fHistAsMcMassVsRadiusAntiLambda); // Position Resolution fHistAsMcResxK0 = new TH1F("h1AsMcResxK0", "K^{0} associated;#Delta x (cm);Counts", 50, -0.25, 0.25); fOutputList->Add(fHistAsMcResxK0); fHistAsMcResyK0 = new TH1F("h1AsMcResyK0", "K^{0} associated;#Delta y (cm);Counts", 50, -0.25, 0.25); fOutputList->Add(fHistAsMcResyK0); fHistAsMcReszK0 = new TH1F("h1AsMcReszK0", "K^{0} associated;#Delta z (cm);Counts", 50, -0.25, 0.25); fOutputList->Add(fHistAsMcReszK0); fHistAsMcResrVsRadiusK0 = new TH2F("h2AsMcResrVsRadiusK0", "K^{0} associated;Radius (cm);#Delta r (cm)",200,0.0,50., 50, -0.25, 0.25); fOutputList->Add(fHistAsMcResrVsRadiusK0); fHistAsMcReszVsRadiusK0 = new TH2F("h2AsMcReszVsRadiusK0", "K^{0} associated;Radius (cm);#Delta z (cm)",200,0.0,50.0, 50, -0.25, 0.25); fOutputList->Add(fHistAsMcReszVsRadiusK0); fHistAsMcResxLambda = new TH1F("h1AsMcResxLambda", "#Lambda^{0} associated;#Delta x (cm);Counts", 50, -0.25, 0.25); fOutputList->Add(fHistAsMcResxLambda); fHistAsMcResyLambda = new TH1F("h1AsMcResyLambda", "#Lambda^{0} associated;#Delta y (cm);Counts", 50, -0.25, 0.25); fOutputList->Add(fHistAsMcResyLambda); fHistAsMcReszLambda = new TH1F("h1AsMcReszLambda", "#Lambda^{0} associated;#Delta z (cm);Counts", 50, -0.25, 0.25); fOutputList->Add(fHistAsMcReszLambda); fHistAsMcResrVsRadiusLambda = new TH2F("h2AsMcResrVsRadiusLambda", "#Lambda^{0} associated;Radius (cm);#Delta r (cm)",200,0.0,50.0, 50, -0.25, 0.25); fOutputList->Add(fHistAsMcResrVsRadiusLambda); fHistAsMcReszVsRadiusLambda = new TH2F("h2AsMcReszVsRadiusLambda", "#Lambda^{0} associated;Radius (cm);#Delta z (cm)",200,0.0,50.0, 50, -0.25, 0.25); fOutputList->Add(fHistAsMcReszVsRadiusLambda); fHistAsMcResxAntiLambda = new TH1F("h1AsMcResxAntiLambda", "#bar{#Lambda}^{0} associated;#Delta x (cm);Counts", 50, -0.25, 0.25); fOutputList->Add(fHistAsMcResxAntiLambda); fHistAsMcResyAntiLambda = new TH1F("h1AsMcResyAntiLambda", "#bar{#Lambda}^{0} associated;#Delta y (cm);Counts", 50, -0.25, 0.25); fOutputList->Add(fHistAsMcResyAntiLambda); fHistAsMcReszAntiLambda = new TH1F("h1AsMcReszAntiLambda", "#bar{#Lambda}^{0} associated;#Delta z (cm);Counts", 50, -0.25, 0.25); fOutputList->Add(fHistAsMcReszAntiLambda); fHistAsMcResrVsRadiusAntiLambda = new TH2F("h2AsMcResrVsRadiusAntiLambda", "#bar{#Lambda}^{0} associated;Radius (cm);#Delta r (cm)",200,0.0,50.0, 50, -0.25, 0.25); fOutputList->Add(fHistAsMcResrVsRadiusAntiLambda); fHistAsMcReszVsRadiusAntiLambda = new TH2F("h2AsMcReszVsRadiusAntiLambda", "#bar{#Lambda}^{0} associated;Radius (cm);#Delta z (cm)",200,0.0,50.0, 50, -0.25, 0.25); fOutputList->Add(fHistAsMcReszVsRadiusAntiLambda); // Pt Resolution fHistAsMcResPtK0 = new TH1F("h1AsMcResPtK0","Pt Resolution K^{0};#Delta Pt;Counts",200,-1,1); fOutputList->Add(fHistAsMcResPtK0); fHistAsMcResPtLambda = new TH1F("h1AsMcResPtLambda","Pt Resolution #Lambda^{0};#Delta Pt;Counts",200,-1,1); fOutputList->Add(fHistAsMcResPtLambda); fHistAsMcResPtAntiLambda = new TH1F("h1AsMcResPtAntiLambda","Pt Resolution #bar{#Lambda}^{0};#Delta Pt;Counts",200,-1,1); fOutputList->Add(fHistAsMcResPtAntiLambda); fHistAsMcResPtVsRapK0 = new TH2F("h2AsMcResPtVsRapK0","Pt Resolution K^{0};#Delta Pt;Rap",200,-1,1,20,-1,1); fOutputList->Add(fHistAsMcResPtVsRapK0); fHistAsMcResPtVsRapLambda = new TH2F("h2AsMcResPtVsRapLambda","Pt Resolution #Lambda^{0};#Delta Pt;Rap",200,-1,1,20,-1,1); fOutputList->Add(fHistAsMcResPtVsRapLambda); fHistAsMcResPtVsRapAntiLambda = new TH2F("h2AsMcResPtVsRapAntiLambda","Pt Resolution #bar{#Lambda}^{0};#Delta Pt;Rap",200,-1,1,20,-1,1); fOutputList->Add(fHistAsMcResPtVsRapAntiLambda); fHistAsMcResPtVsPtK0 = new TH2F("h2AsMcResPtVsPtK0","Pt Resolution K^{0};#Delta Pt;Pt",600,-0.15,0.15,240,0,12); fOutputList->Add(fHistAsMcResPtVsPtK0); fHistAsMcResPtVsPtLambda = new TH2F("h2AsMcResPtVsPtLambda","Pt Resolution #Lambda^{0};#Delta Pt;Pt",600,-0.15,0.15,240,0,12); fOutputList->Add(fHistAsMcResPtVsPtLambda); fHistAsMcResPtVsPtAntiLambda = new TH2F("h2AsMcResPtVsPtAntiLambda","Pt Resolution #bar{#Lambda}^{0};#Delta Pt;Pt",300,-0.15,0.15,240,0,12); fOutputList->Add(fHistAsMcResPtVsPtAntiLambda); // Pt distribution Lambda from Sigma fHistAsMcPtLambdaFromSigma = new TH1F("h1AsMcPtLambdaFromSigma","#Lambda}^{0} associated from Sigma;p{t} (GeV/c);Count",240,0,12); fOutputList->Add(fHistAsMcPtLambdaFromSigma); fHistAsMcPtAntiLambdaFromSigma = new TH1F("h1AsMcPtAntiLambdaFromSigma","#bar{#Lambda}^{0} associated from Sigma;p{t} (GeV/c);Count",240,0,12); fOutputList->Add(fHistAsMcPtAntiLambdaFromSigma); // Associated secondary particles: // Pt and rapidity distribution fHistAsMcSecondaryPtVsRapK0s = new TH2F("h2AsMcSecondaryPtVsRapK0s", "K^{0} associated secondary;p{t} (GeV/c);rapidity",240,0,12,30,-1.5,1.5); fOutputList->Add(fHistAsMcSecondaryPtVsRapK0s); fHistAsMcSecondaryPtVsRapLambda = new TH2F("h2AsMcSecondaryPtVsRapLambda", "#Lambda^{0} associated secondary;p{t} (GeV/c);rapidity",240,0,12,30,-1.5,1.5); fOutputList->Add(fHistAsMcSecondaryPtVsRapLambda); fHistAsMcSecondaryPtVsRapAntiLambda = new TH2F("h2AsMcSecondaryPtVsRapAntiLambda", "#bar{#Lambda}^{0} associated secondary;p{t} (GeV/c);rapidity",240,0,12,30,-1.5,1.5); fOutputList->Add(fHistAsMcSecondaryPtVsRapAntiLambda); // Production radius fHistAsMcSecondaryProdRadiusK0s = new TH1F("h1AsMcSecondaryProdRadiusK0s", "K^{0} Production Radius;r (cm);Count", 170, -2, 15); fOutputList->Add(fHistAsMcSecondaryProdRadiusK0s); fHistAsMcSecondaryProdRadiusLambda = new TH1F("h1AsMcSecondaryProdRadiusLambda", "#Lambda^{0} Production Radius;r (cm);Count", 170, -2, 15); fOutputList->Add(fHistAsMcSecondaryProdRadiusLambda); fHistAsMcSecondaryProdRadiusAntiLambda = new TH1F("h1AsMcSecondaryProdRadiusAntiLambda", "#bar{#Lambda}^{0} Production Radius;r (cm);Count", 170, -2, 15); fOutputList->Add(fHistAsMcSecondaryProdRadiusAntiLambda); fHistAsMcSecondaryProdRadiusXvsYK0s = new TH2F("h2AsMcSecondaryProdRadiusXvsYK0s","Associated Secondary K^{0} Production Radius;x (cm); y (cm)",200,-20,20,200,-20,20); fOutputList->Add(fHistAsMcSecondaryProdRadiusXvsYK0s); fHistAsMcSecondaryProdRadiusXvsYLambda = new TH2F("h2AsMcSecondaryProdRadiusXvsYLambda","Associated Secondary #Lambda^{0} Production Radius;x (cm); y (cm)",200,-20,20,200,-20,20); fOutputList->Add(fHistAsMcSecondaryProdRadiusXvsYLambda); fHistAsMcSecondaryProdRadiusXvsYAntiLambda = new TH2F("h2AsMcSecondaryProdRadiusXvsYAntiLambda","Associated Secondary #bar{#Lambda}^{0} Production Radius;x (cm); y (cm)",200,-20,20,200,-20,20); fOutputList->Add(fHistAsMcSecondaryProdRadiusXvsYAntiLambda); // Pt distribution Lambda from Sigma fHistAsMcSecondaryPtLambdaFromSigma = new TH1F("h1AsMcSecondaryPtLambdaFromSigma","#Lambda}^{0} associated from Sigma;p{t} (GeV/c);Count",240,0,12); fOutputList->Add(fHistAsMcSecondaryPtLambdaFromSigma); fHistAsMcSecondaryPtAntiLambdaFromSigma = new TH1F("h1AsMcSecondaryPtAntiLambdaFromSigma","#bar{#Lambda}^{0} associated from Sigma;p{t} (GeV/c);Count",240,0,12); fOutputList->Add(fHistAsMcSecondaryPtAntiLambdaFromSigma); //----------------------------------------------Correlation histograms -----------------------------------------------------// fHistSibK0 = new TH2F("hfHistSibK0","",CorrBinsX,-2*fTrackEtaCut,2*fTrackEtaCut,CorrBinsY,-TMath::Pi()/2,3*TMath::Pi()/2); fHistSibK0->SetXTitle("#Delta #Phi"); fHistSibK0->SetStats(0); fHistSibK0->Sumw2(); fOutputList->Add(fHistSibK0); fHistMixK0 = new TH2F("hfHistMixK0","",CorrBinsX,-2*fTrackEtaCut,2*fTrackEtaCut,CorrBinsY,-TMath::Pi()/2,3*TMath::Pi()/2); fHistMixK0->SetXTitle("#Delta #Phi"); fHistMixK0->SetStats(0); fHistMixK0->Sumw2(); fOutputList->Add(fHistMixK0); fHistSibLambda = new TH2F("hfHistSibLambda","",CorrBinsX,-2*fTrackEtaCut,2*fTrackEtaCut,CorrBinsY,-TMath::Pi()/2,3*TMath::Pi()/2); fHistSibLambda->SetXTitle("#Delta #Phi"); fHistSibLambda->SetStats(0); fHistSibLambda->Sumw2(); fOutputList->Add(fHistSibLambda); fHistMixLambda= new TH2F("hfHistMixLambda","",CorrBinsX,-2*fTrackEtaCut,2*fTrackEtaCut,CorrBinsY,-TMath::Pi()/2,3*TMath::Pi()/2); fHistMixLambda->SetXTitle("#Delta #Phi"); fHistMixLambda->SetStats(0); fHistMixLambda->Sumw2(); fOutputList->Add(fHistMixLambda); fHistSibK0MC = new TH2F("hfHistSibK0MC","",CorrBinsX,-2*fTrackEtaCut,2*fTrackEtaCut,CorrBinsY,-TMath::Pi()/2,3*TMath::Pi()/2); fHistSibK0MC->SetXTitle("#Delta #Phi"); fHistSibK0MC->SetStats(0); fHistSibK0MC->Sumw2(); fOutputList->Add(fHistSibK0MC); fHistMixK0MC = new TH2F("hfHistMixK0MC","",CorrBinsX,-2*fTrackEtaCut,2*fTrackEtaCut,CorrBinsY,-TMath::Pi()/2,3*TMath::Pi()/2); fHistMixK0MC->SetXTitle("#Delta #Phi"); fHistMixK0MC->SetStats(0); fHistMixK0MC->Sumw2(); fOutputList->Add(fHistMixK0MC); fHistSibLambdaMC = new TH2F("hfHistSibLambdaMC","",CorrBinsX,-2*fTrackEtaCut,2*fTrackEtaCut,CorrBinsY,-TMath::Pi()/2,3*TMath::Pi()/2); fHistSibLambdaMC->SetXTitle("#Delta #Phi"); fHistSibLambdaMC->SetStats(0); fHistSibLambdaMC->Sumw2(); fOutputList->Add(fHistSibLambdaMC); fHistMixLambdaMC= new TH2F("hfHistMixLambdaMC","",CorrBinsX,-2*fTrackEtaCut,2*fTrackEtaCut,CorrBinsY,-TMath::Pi()/2,3*TMath::Pi()/2); fHistMixLambdaMC->SetXTitle("#Delta #Phi"); fHistMixLambdaMC->SetStats(0); fHistMixLambdaMC->Sumw2(); fOutputList->Add(fHistMixLambdaMC); //----------------------------------------------Event Pool-----------------------------------------------------// fPoolMgr = new AliEventPoolManager(fPoolMaxNEvents, fPoolMinNTracks, fNCentBins, fCentBins, fNzVtxBins, fZvtxBins); if(!fPoolMgr) return; PostData(1, fOutputList); } //--------------------------------------------------------------------------------------- void AliLeadingV0Correlation::UserExec(Option_t *) { AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); AliInputEventHandler *inEvMain = (AliInputEventHandler*)(mgr->GetInputEventHandler()); if (!inEvMain) return; // Pointers to PID Response objects. fPIDResponse = inEvMain->GetPIDResponse(); //cout << "PID Response object: " << fPIDResponse << endl; fAODEvent = dynamic_cast(inEvMain->GetEvent()); if(!fAODEvent) return; // physics selection UInt_t maskIsSelected = inEvMain->IsEventSelected(); Bool_t isSelected = ((maskIsSelected & AliVEvent::kMB) || (maskIsSelected & AliVEvent::kCentral) || (maskIsSelected & AliVEvent::kSemiCentral)); if (!isSelected) return; //-----------------------------MC Accsess------------------------------------------------ TClonesArray *stack = 0x0; Double_t mcXv=0., mcYv=0., mcZv=0.; Int_t ntrk =0, ntrk0=0; TObjArray *selectedTracksLeadingK0MC =0x0; TObjArray *selectedTracksLeadingLambdaMC = 0x0; TObjArray * selectedK0MC =new TObjArray; selectedK0MC->SetOwner(kTRUE); TObjArray * selectedLambdaMC =new TObjArray; selectedLambdaMC->SetOwner(kTRUE); if (fAnalysisMC) { TList *lst = fAODEvent->GetList(); stack = (TClonesArray*)lst->FindObject(AliAODMCParticle::StdBranchName()); if (!stack) {Printf("ERROR: stack not available");return;} AliAODMCHeader *mcHdr=(AliAODMCHeader*)lst->FindObject(AliAODMCHeader::StdBranchName()); mcXv=mcHdr->GetVtxX(); mcYv=mcHdr->GetVtxY(); mcZv=mcHdr->GetVtxZ(); ntrk=stack->GetEntriesFast(), ntrk0=ntrk; if(TMath::Abs(mcZv)>fpvzcut)return; selectedTracksLeadingK0MC = FindLeadingObjectsK0MC(stack); if(!selectedTracksLeadingK0MC) return; selectedTracksLeadingK0MC->SetOwner(kTRUE); selectedTracksLeadingLambdaMC = FindLeadingObjectsLambdaMC(stack); if(!selectedTracksLeadingLambdaMC) return; selectedTracksLeadingLambdaMC->SetOwner(kTRUE); } // If PID is used: Double_t lLimitPPID = 0.7; Float_t cutNSigmaLowP = 1E3; Float_t cutNSigmaHighP = 1E3; if (fUsePID=="withPID") { cutNSigmaLowP = 3.0; cutNSigmaHighP = 3.0; } Double_t lmcPrimVtxR = 0; Int_t lPdgcodeCurrentPart = 0; Double_t lRapCurrentPart = 0; Double_t lPtCurrentPart = 0; Double_t lPhiCurrentPart = 0; Double_t lEtaCurrentPart = 0; Int_t lComeFromSigma = 0; // PID flags: Int_t LambdaPID = 0; Int_t AntiLambdaPID = 0; // Production Radius Double_t mcPosX = 0.0, mcPosY = 0.0, mcPosZ = 0.0; Double_t mcPosR = 0.0; // Decay Radius Double_t mcDecayPosX = 0, mcDecayPosY = 0, mcDecayPosR = 0; // current mc particle 's mother Int_t iCurrentMother = 0, lPdgCurrentMother = 0; // current mc particles 's daughter: Int_t lPdgCurrentDaughter0 = 0, lPdgCurrentDaughter1 = 0; // variables for multiple reconstruction studies: Int_t id0 = 0, id1 = 0; Int_t lNtimesReconstructedK0s = 0, lNtimesReconstructedLambda = 0, lNtimesReconstructedAntiLambda = 0; // Start loop over MC particles if (fAnalysisMC) { // Primary vertex fHistMCPrimaryVertexX->Fill(mcXv); fHistMCPrimaryVertexY->Fill(mcYv); fHistMCPrimaryVertexZ->Fill(mcZv); lmcPrimVtxR = TMath::Sqrt(mcXv*mcXv+mcYv*mcYv); for (Int_t iMc = 0; iMc < (ntrk); iMc++) { AliAODMCParticle *p0=(AliAODMCParticle*)stack->UncheckedAt(iMc); if (!p0) continue; lPdgcodeCurrentPart = p0->GetPdgCode(); // Keep only K0s, Lambda and AntiLambda, Xi and Phi: if ( (lPdgcodeCurrentPart != 310 ) && (lPdgcodeCurrentPart != 3122 ) && (lPdgcodeCurrentPart != -3122 ) && (lPdgcodeCurrentPart != 3312 ) && (lPdgcodeCurrentPart != -3312) && (lPdgcodeCurrentPart != -333) ) continue; lRapCurrentPart = p0->Y(); lPtCurrentPart = p0->Pt(); lPhiCurrentPart = p0->Phi(); lEtaCurrentPart = p0->Eta(); iCurrentMother = p0->GetMother(); AliAODMCParticle *Mother = (AliAODMCParticle*)stack->UncheckedAt(iCurrentMother); if (iCurrentMother == -1){lPdgCurrentMother=0; } else {lPdgCurrentMother = Mother->GetPdgCode();} mcPosX = p0->Xv(); mcPosY = p0->Yv(); mcPosZ = p0->Zv(); mcPosR = TMath::Sqrt(mcPosX*mcPosX+mcPosY*mcPosY); id0 = p0->GetDaughter(0); id1 = p0->GetDaughter(1); // Decay Radius and Production Radius if ( id0 <= ntrk && id0 > 0 && id1 <= ntrk && id1 > 0) { AliAODMCParticle *pDaughter0 = (AliAODMCParticle*)stack->UncheckedAt(id0); AliAODMCParticle *pDaughter1 = (AliAODMCParticle*)stack->UncheckedAt(id1); lPdgCurrentDaughter0 = pDaughter0->GetPdgCode(); lPdgCurrentDaughter1 = pDaughter1->GetPdgCode(); mcDecayPosX = pDaughter0->Xv(); mcDecayPosY = pDaughter0->Yv(); mcDecayPosR = TMath::Sqrt(mcDecayPosX*mcDecayPosX+mcDecayPosY*mcDecayPosY); } else {mcDecayPosR = -1.0;} if (lPdgcodeCurrentPart==310) { fHistMCtracksProdRadiusK0s->Fill(mcPosX,mcPosY); fHistMCtracksDecayRadiusK0s->Fill(mcDecayPosR); if (TMath::Abs(lRapCurrentPart) < fRapidityCut) fHistMCPtAllK0s->Fill(lPtCurrentPart); } else if (lPdgcodeCurrentPart==3122) { fHistMCtracksProdRadiusLambda->Fill(mcPosX,mcPosY); fHistMCtracksDecayRadiusLambda->Fill(mcDecayPosR); if (TMath::Abs(lRapCurrentPart) < fRapidityCut) fHistMCPtAllLambda->Fill(lPtCurrentPart); } else if (lPdgcodeCurrentPart==-3122) { fHistMCtracksProdRadiusAntiLambda->Fill(mcPosX,mcPosY); fHistMCtracksDecayRadiusAntiLambda->Fill(mcDecayPosR); if (TMath::Abs(lRapCurrentPart) < fRapidityCut) fHistMCPtAllAntiLambda->Fill(lPtCurrentPart); } if ( ( ( TMath::Abs(lPdgCurrentMother) == 3212) || ( TMath::Abs(lPdgCurrentMother) == 3224) || ( TMath::Abs(lPdgCurrentMother) == 3214) || ( TMath::Abs(lPdgCurrentMother) == 3114) ) && ( Mother->GetMother() == -1) ) lComeFromSigma = 1; else lComeFromSigma = 0; Double_t dx = 0; Double_t dy = 0; Double_t dz = 0; Double_t ProdDistance = 0; dx = ( ( mcXv) - (mcPosX) ); dy = ( ( mcYv) - (mcPosY) ); dz = ( ( mcZv) - (mcPosZ) ); ProdDistance = TMath::Sqrt(dx*dx + dy*dy + dz*dz); if (ProdDistance > 0.001) continue; // secondary V0 //******************************************** lNtimesReconstructedK0s = 0; lNtimesReconstructedLambda = 0; lNtimesReconstructedAntiLambda = 0; // Rapidity Cut if (TMath::Abs(lRapCurrentPart) > fRapidityCut) continue; if (lPdgcodeCurrentPart==310) { fHistMCRapK0s->Fill(lRapCurrentPart); fHistMCProdRadiusK0s->Fill(mcPosR); fHistMCPtK0s->Fill(lPtCurrentPart); fHistNTimesRecK0s->Fill(lNtimesReconstructedK0s); fHistNTimesRecK0sVsPt->Fill(lPtCurrentPart,lNtimesReconstructedK0s); fHistPrimRawPtVsYK0s->Fill(lPtCurrentPart,lRapCurrentPart); selectedK0MC->Add(new AliLeadingBasicParticle(lEtaCurrentPart,lPhiCurrentPart,lPtCurrentPart)); } else if (lPdgcodeCurrentPart==3122) { fHistMCRapLambda->Fill(lRapCurrentPart); fHistMCProdRadiusLambda->Fill(mcPosR); fHistMCPtLambda->Fill(lPtCurrentPart); fHistNTimesRecLambda->Fill(lNtimesReconstructedLambda); fHistNTimesRecLambdaVsPt->Fill(lPtCurrentPart,lNtimesReconstructedLambda); fHistPrimRawPtVsYLambda->Fill(lPtCurrentPart,lRapCurrentPart); if (lComeFromSigma) fHistMCPtLambdaFromSigma->Fill(lPtCurrentPart); selectedLambdaMC->Add(new AliLeadingBasicParticle(lEtaCurrentPart,lPhiCurrentPart,lPtCurrentPart)); } else if (lPdgcodeCurrentPart==-3122) { fHistMCRapAntiLambda->Fill(lRapCurrentPart); fHistMCProdRadiusAntiLambda->Fill(mcPosR); fHistMCPtAntiLambda->Fill(lPtCurrentPart); fHistNTimesRecAntiLambda->Fill(lNtimesReconstructedAntiLambda); fHistNTimesRecAntiLambdaVsPt->Fill(lPtCurrentPart,lNtimesReconstructedAntiLambda); fHistPrimRawPtVsYAntiLambda->Fill(lPtCurrentPart,lRapCurrentPart); if (lComeFromSigma) fHistMCPtAntiLambdaFromSigma->Fill(lPtCurrentPart); } } // end loop AOD MC } // End Loop over MC condition //----------------------------------------------------------------------------------------- // Vertex cut Double_t lPrimaryVtxPosition[3]; AliAODVertex *myPrimVertex = fAODEvent->GetPrimaryVertex(); if (!myPrimVertex) return; myPrimVertex->GetXYZ(lPrimaryVtxPosition); Double_t lPVx = lPrimaryVtxPosition[0]; Double_t lPVy = lPrimaryVtxPosition[1]; Double_t lPVz = lPrimaryVtxPosition[2]; if ((TMath::Abs(lPVz)) >= fpvzcut) return ; if (TMath::Abs(lPVx)<10e-5 && TMath::Abs(lPVy)<10e-5 && TMath::Abs(lPVz)<10e-5) return; fHistPrimaryVertexX->Fill(lPVx); fHistPrimaryVertexY->Fill(lPVy); fHistPrimaryVertexZ->Fill(lPVz); // Centrality definition AliCentrality *centralityObj = 0; Int_t multiplicity = -1; Double_t MultipOrCent = -1; // initialize the pool for event mixing if(fcollidingSys=="PP"){ multiplicity = fAODEvent->GetNTracks(); MultipOrCent = multiplicity; // convert from Int_t to Double_t } if(fcollidingSys=="PbPb"){ centralityObj = fAODEvent->GetHeader()->GetCentralityP(); MultipOrCent = centralityObj->GetCentralityPercentileUnchecked("V0M"); } Double_t * CentBins = fCentBins; Double_t poolmin=CentBins[0]; Double_t poolmax=CentBins[fNCentBins]; TObjArray *selectedTracksLeadingK0 = FindLeadingObjectsK0(fAODEvent); if(!selectedTracksLeadingK0) return; selectedTracksLeadingK0->SetOwner(kTRUE); TObjArray *selectedTracksLeadingLambda = FindLeadingObjectsLambda(fAODEvent); if(!selectedTracksLeadingLambda) return; selectedTracksLeadingLambda->SetOwner(kTRUE); // -------------------------------------V0 loop for reconstructed event------------------------ Double_t cutcTauL = 3*7.89; Double_t cutcTauK0 = 3*2.68; Double_t lPLambda = 0; Double_t lPAntiLambda = 0; Double_t lPK0s = 0; // Variables: Double_t lV0Position[3]; Double_t lDcaPosToPrimVertex = 0; Double_t lDcaNegToPrimVertex = 0; Double_t lDcaV0Daughters = 0; Double_t lV0cosPointAngle = 0; Double_t lChi2V0 = 0; Double_t lV0DecayLength = 0; Double_t lV0Radius = 0; Double_t lDcaV0ToPrimVertex = 0; Double_t lcTauLambda = 0; Double_t lcTauAntiLambda = 0; Double_t lcTauK0s = 0; Int_t lOnFlyStatus = 0; Double_t lInvMassK0 = 0, lInvMassLambda = 0, lInvMassAntiLambda = 0; Double_t lPtK0s = 0, lPtLambda = 0, lPtAntiLambda = 0; Double_t lPhiK0s = 0, lPhiLambda = 0, lPhiAntiLambda = 0; Double_t lEtaK0s = 0, lEtaLambda = 0, lEtaAntiLambda = 0; Double_t lRapK0s = 0, lRapLambda = 0, lRapAntiLambda = 0; Double_t lPzK0s = 0, lPzLambda = 0, lPzAntiLambda = 0; Double_t lAlphaV0 = 0, lPtArmV0 = 0; Double_t lV0Eta = 999; //Associated V0s: UInt_t lLabelTrackPos = 0, lLabelTrackNeg = 0; Int_t lCheckPIdK0Short = 0, lCheckMcK0Short = 0; Int_t lCheckPIdLambda = 0, lCheckMcLambda = 0; Int_t lCheckPIdAntiLambda = 0, lCheckMcAntiLambda = 0; Int_t lCheckSecondaryK0s = 0, lCheckSecondaryLambda = 0, lCheckSecondaryAntiLambda = 0; Int_t lCheckGamma = 0; Double_t mcPosMotherX = 0, mcPosMotherY = 0, mcPosMotherZ = 0; Double_t mcPosMotherR = 0; Double_t mcMotherPt = 0; Int_t lIndexPosMother = 0; Int_t lIndexNegMother = 0; Int_t lIndexMotherOfMother = 0; Int_t lPDGCodePosDaughter = 0; Int_t lPDGCodeNegDaughter = 0; Int_t lPdgcodeMother = 0; Int_t lPdgcodeMotherOfMother = 0; // Reconstructed position Double_t rcPosXK0s = 0, rcPosYK0s = 0, rcPosZK0s = 0; Double_t rcPosRK0s = 0; Double_t rcPosXLambda = 0, rcPosYLambda = 0, rcPosZLambda = 0; Double_t rcPosRLambda = 0; Double_t rcPosXAntiLambda = 0, rcPosYAntiLambda = 0, rcPosZAntiLambda = 0; Double_t rcPosRAntiLambda = 0; // Pt resolution Double_t deltaPtK0s = 0, deltaPtLambda = 0, deltaPtAntiLambda = 0; // V0 momentum // Double_t V0mom[3] = {999,999,999}; Double_t lPosMom = 0; Double_t lNegMom = 0; // Daughters' momentum: Double_t lMomPos[3] = {999,999,999}; Double_t lMomNeg[3] = {999,999,999}; Double_t lPtPos = 999, lPtNeg = 999; Double_t lPPos = 999, lPNeg = 999; // Inner Wall parameters: Double_t lMomInnerWallPos =999, lMomInnerWallNeg = 999; Double_t ldEdxPos =0.0, ldEdxNeg=0.0; // PID Float_t nSigmaPosPion = 0; Float_t nSigmaNegPion = 0; Float_t nSigmaPosProton = 0; Float_t nSigmaNegProton = 0; Int_t lCheckPIDK0sPosDaughter = 0, lCheckPIDK0sNegDaughter = 0; Int_t lCheckPIDLambdaPosDaughter = 0, lCheckPIDLambdaNegDaughter = 0; Int_t lCheckPIDAntiLambdaPosDaughter = 0, lCheckPIDAntiLambdaNegDaughter = 0; //--------------------------------------------------------------------------------------------- TObjArray * selectedK0 = new TObjArray; selectedK0->SetOwner(kTRUE); TObjArray * selectedLambda = new TObjArray; selectedLambda->SetOwner(kTRUE); Int_t nV0s = fAODEvent->GetNumberOfV0s(); for (Int_t i = 0; i < nV0s; i++) { // start of V0 slection loop AliAODv0* aodV0 = dynamic_cast(fAODEvent->GetV0(i)); if (!aodV0) {AliError(Form("ERROR: Could not retrieve aodaodV0 %d", i));continue;} lIndexPosMother = 0; lIndexNegMother = 0; lIndexMotherOfMother = 0; lCheckPIdK0Short = 0; lCheckMcK0Short = 0; lCheckSecondaryK0s = 0; lCheckPIdLambda = 0; lCheckMcLambda = 0; lCheckSecondaryLambda = 0; lCheckPIdAntiLambda = 0; lCheckMcAntiLambda = 0; lCheckSecondaryAntiLambda = 0; lComeFromSigma = -1;lCheckGamma = 0; // get daughters AliAODTrack *myTrackPos=(AliAODTrack *)(aodV0->GetDaughter(0)); AliAODTrack *myTrackNeg=(AliAODTrack *)(aodV0->GetDaughter(1)); if (!myTrackPos || !myTrackNeg) {Printf("ERROR: Could not retreive one of the daughter track");continue;} if (!IsAcseptedV0(fAODEvent,aodV0,myTrackPos,myTrackNeg)) continue; // VO's main characteristics to check the reconstruction cuts lOnFlyStatus = aodV0->GetOnFlyStatus(); lChi2V0 = aodV0->Chi2V0(); lDcaV0Daughters = aodV0->DcaV0Daughters(); lDcaV0ToPrimVertex = aodV0->DcaV0ToPrimVertex(); lV0cosPointAngle = aodV0->CosPointingAngle(lPrimaryVtxPosition); aodV0->GetXYZ(lV0Position); lV0Radius = TMath::Sqrt(lV0Position[0]*lV0Position[0]+lV0Position[1]*lV0Position[1]); lV0DecayLength = TMath::Sqrt(TMath::Power(lV0Position[0] - lPrimaryVtxPosition[0],2) + TMath::Power(lV0Position[1] - lPrimaryVtxPosition[1],2) + TMath::Power(lV0Position[2] - lPrimaryVtxPosition[2],2 )); lLabelTrackPos = (UInt_t)TMath::Abs(myTrackPos->GetLabel()); lLabelTrackNeg = (UInt_t)TMath::Abs(myTrackNeg->GetLabel()); // Daughters Pt and P: lPtPos = TMath::Sqrt(lMomPos[0]*lMomPos[0] + lMomPos[1]*lMomPos[1]); lPtNeg = TMath::Sqrt(lMomNeg[0]*lMomNeg[0] + lMomNeg[1]*lMomNeg[1]); lPPos = TMath::Sqrt(lMomPos[0]*lMomPos[0] + lMomPos[1]*lMomPos[1] + lMomPos[2]*lMomPos[2]); lPNeg = TMath::Sqrt(lMomNeg[0]*lMomNeg[0] + lMomNeg[1]*lMomNeg[1] + lMomNeg[2]*lMomNeg[2]); // V0 momentum lPosMom = lPPos; lNegMom = lPNeg; // Inner Wall parameter: const AliAODPid *pidPos=myTrackPos->GetDetPid(); const AliAODPid *pidNeg=myTrackNeg->GetDetPid(); // innerWall momentum lMomInnerWallPos = pidPos->GetTPCmomentum(); lMomInnerWallNeg = pidNeg->GetTPCmomentum(); ldEdxPos = pidPos->GetTPCsignal(); ldEdxNeg = pidNeg->GetTPCsignal(); // DCA between daughter and Primary Vertex: if (myTrackPos) lDcaPosToPrimVertex = aodV0->DcaPosToPrimVertex(); if (myTrackNeg) lDcaNegToPrimVertex = aodV0->DcaNegToPrimVertex(); // Quality tracks cuts: if ( !(IsAcseptedDaughterTrack(myTrackPos)) || !(IsAcseptedDaughterTrack(myTrackNeg)) ) { continue;} // Armenteros variables: lAlphaV0 = aodV0->AlphaV0(); lPtArmV0 = aodV0->PtArmV0(); // Pseudorapidity: lV0Eta = aodV0->PseudoRapV0(); ////////////////////////////////////////////////////////////////////////// // Invariant mass lInvMassK0 = aodV0->MassK0Short(); lPtK0s = aodV0->Pt(); lPhiK0s= aodV0->Phi(); lEtaK0s= aodV0->Eta(); lPzK0s = aodV0->Pz(); lInvMassLambda = aodV0->MassLambda(); lPtLambda = aodV0->Pt(); lPhiLambda= aodV0->Phi(); lEtaLambda= aodV0->Eta(); lPzLambda = aodV0->Pz(); lInvMassAntiLambda = aodV0->MassAntiLambda(); lPtAntiLambda = aodV0->Pt(); lPhiAntiLambda= aodV0->Phi(); lEtaAntiLambda= aodV0->Eta(); lPzAntiLambda = aodV0->Pz(); // Rapidity: lRapK0s = aodV0->RapK0Short(); lRapLambda = aodV0->RapLambda(); lRapAntiLambda = aodV0->Y(-3122); if (lPtK0s==0) {continue;} if (lPtLambda==0) {continue;} if (lPtAntiLambda==0) {continue;} // PID new method July 2011 if (fUsePID=="withPID") { nSigmaPosPion = TMath::Abs(IsAccepteddEdx(lPPos,ldEdxPos,AliPID::kPion)); nSigmaNegPion = TMath::Abs(IsAccepteddEdx(lPNeg,ldEdxNeg,AliPID::kPion)); nSigmaPosProton = TMath::Abs(IsAccepteddEdx(lPPos,ldEdxPos,AliPID::kProton)); nSigmaNegProton = TMath::Abs(IsAccepteddEdx(lPNeg,ldEdxNeg,AliPID::kProton)); } else {nSigmaPosPion = 0; nSigmaNegPion =0; nSigmaPosProton = 0; nSigmaNegProton= 0;} // Monte-Carlo particle associated to reconstructed particles: if (fAnalysisMC) { AliAODMCParticle *pp=(AliAODMCParticle*)stack->UncheckedAt(lLabelTrackPos); if(!pp) { continue;} AliAODMCParticle *np=(AliAODMCParticle*)stack->UncheckedAt(lLabelTrackNeg); if (!np) { continue;} lPDGCodePosDaughter = pp->GetPdgCode(); lPDGCodeNegDaughter = np->GetPdgCode(); lIndexPosMother = pp->GetMother(); lIndexNegMother = np->GetMother(); if (lIndexPosMother == -1) { lPdgcodeMother = 0; lIndexMotherOfMother = 0; mcPosX = 0; mcPosY = 0; mcPosZ = 0; mcPosR = 0; mcPosMotherX = 0; mcPosMotherY = 0; mcPosMotherZ = 0; mcPosMotherR = 0; mcMotherPt = 1; } else { AliAODMCParticle *lMCAODMother=(AliAODMCParticle*)stack->UncheckedAt(lIndexPosMother); if (!lMCAODMother) { continue;} lPdgcodeMother = lMCAODMother->GetPdgCode(); lIndexMotherOfMother = lMCAODMother->GetMother(); if (lIndexMotherOfMother ==-1) lPdgcodeMotherOfMother = 0; else { AliAODMCParticle *lMCAODMotherOfMother=(AliAODMCParticle*)stack->UncheckedAt(lIndexMotherOfMother); if (!lMCAODMotherOfMother) {continue;} lPdgcodeMotherOfMother = lMCAODMotherOfMother->GetPdgCode(); } mcPosX = pp->Xv(); mcPosY = pp->Yv(); mcPosZ = pp->Zv(); mcPosR = TMath::Sqrt(mcPosX*mcPosX+mcPosY*mcPosY); mcPosMotherX = lMCAODMother->Xv(); mcPosMotherY = lMCAODMother->Yv(); mcPosMotherZ = lMCAODMother->Zv(); mcPosMotherR = TMath::Sqrt(mcPosMotherX*mcPosMotherX+mcPosMotherY*mcPosMotherY); mcMotherPt = lMCAODMother->Pt(); } } } if (fAnalysisMC) { if( (lIndexPosMother==-1) || (lIndexNegMother==-1) ) { fHistMCDaughterTrack->Fill(1); } else if( ( (lPDGCodePosDaughter==+211) && (lPDGCodeNegDaughter==-211) ) ) { lCheckPIdK0Short = 1; fHistMCDaughterTrack->Fill(3); if ( (lIndexPosMother==lIndexNegMother) && (lPdgcodeMother==310) ) { if (((AliAODMCParticle*)stack->UncheckedAt(lIndexPosMother))->IsPrimary()) lCheckMcK0Short = 1; else lCheckSecondaryK0s = 1; } } else if( ( (lPDGCodePosDaughter==+2212) && (lPDGCodeNegDaughter==-211) ) ) { lCheckPIdLambda = 1; fHistMCDaughterTrack->Fill(5); if ( (lIndexPosMother==lIndexNegMother) && (lPdgcodeMother==3122) ){ if ( ( TMath::Abs(lPdgcodeMotherOfMother) == 3212) || ( TMath::Abs(lPdgcodeMotherOfMother) == 3224) || ( TMath::Abs(lPdgcodeMotherOfMother) == 3214) || ( TMath::Abs(lPdgcodeMotherOfMother) == 3114) ) lComeFromSigma = 1; else lComeFromSigma = 0; if ( ((AliAODMCParticle*)stack->UncheckedAt(lIndexPosMother))->IsPrimary() || (!(((AliAODMCParticle*)stack->UncheckedAt(lIndexPosMother))->IsPrimary() ) && (lComeFromSigma) ) ) lCheckMcLambda = 1; else lCheckSecondaryLambda = 1; } } else if( ( (lPDGCodePosDaughter==211) && (lPDGCodeNegDaughter==-2212) ) ) { lCheckPIdAntiLambda = 1; fHistMCDaughterTrack->Fill(7); if ( (lIndexPosMother==lIndexNegMother) && (lPdgcodeMother==-3122) ) { if ( ( TMath::Abs(lPdgcodeMotherOfMother) == 3212) || ( TMath::Abs(lPdgcodeMotherOfMother) == 3224) || ( TMath::Abs(lPdgcodeMotherOfMother) == 3214) || ( TMath::Abs(lPdgcodeMotherOfMother) == 3114) ) lComeFromSigma = 1; else lComeFromSigma = 0; if ( ((AliAODMCParticle*)stack->UncheckedAt(lIndexPosMother))->IsPrimary() || ( (!((AliAODMCParticle*)stack->UncheckedAt(lIndexPosMother))->IsPrimary()) && (lComeFromSigma) ) ) lCheckMcAntiLambda = 1; else lCheckSecondaryAntiLambda = 1; } } // Gamma conversion else if ((lPDGCodePosDaughter==-11) && (lPDGCodeNegDaughter==11) && (lPdgcodeMother==22 ) ) lCheckGamma = 1; } // end "look for associated particles // PID condition: lCheckPIDK0sPosDaughter = 0, lCheckPIDK0sNegDaughter = 0; lCheckPIDLambdaPosDaughter = 0, lCheckPIDLambdaNegDaughter = 0; lCheckPIDAntiLambdaPosDaughter = 0, lCheckPIDAntiLambdaNegDaughter = 0; if (lMomInnerWallPos < lLimitPPID) { if (nSigmaPosPion < cutNSigmaLowP) { lCheckPIDK0sPosDaughter = 1; lCheckPIDAntiLambdaPosDaughter = 1; } if (nSigmaPosProton < cutNSigmaLowP) lCheckPIDLambdaPosDaughter = 1; } else if (lMomInnerWallPos > lLimitPPID) { if (nSigmaPosPion < cutNSigmaHighP) { lCheckPIDK0sPosDaughter = 1; lCheckPIDAntiLambdaPosDaughter = 1; } if (nSigmaPosProton < cutNSigmaHighP) lCheckPIDLambdaPosDaughter = 1; } if (lMomInnerWallNeg < lLimitPPID) { if (nSigmaNegPion < cutNSigmaLowP) { lCheckPIDK0sNegDaughter = 1; lCheckPIDLambdaNegDaughter = 1; } if (nSigmaNegProton < cutNSigmaLowP) lCheckPIDAntiLambdaNegDaughter = 1; } else if (lMomInnerWallNeg > lLimitPPID) { if (nSigmaNegPion < cutNSigmaHighP) { lCheckPIDK0sNegDaughter = 1; lCheckPIDLambdaNegDaughter = 1; } if (nSigmaNegProton < cutNSigmaHighP) lCheckPIDAntiLambdaNegDaughter = 1; } //************************************filling histograms********************************// if((fUsePID=="withPID") && (lCheckPIDAntiLambdaNegDaughter==0) && lCheckPIDLambdaPosDaughter==1) LambdaPID = 1; else LambdaPID =0; if((fUsePID=="withPID") && (lCheckPIDLambdaPosDaughter==0) && lCheckPIDAntiLambdaNegDaughter==1) AntiLambdaPID = 1; else AntiLambdaPID =0; lPLambda = TMath::Sqrt(lPzLambda*lPzLambda + lPtLambda*lPtLambda); lPAntiLambda = TMath::Sqrt(lPzAntiLambda*lPzAntiLambda + lPtAntiLambda*lPtAntiLambda); lPK0s = TMath::Sqrt(lPzK0s*lPzK0s + lPtK0s*lPtK0s); lcTauLambda = (lV0DecayLength*lInvMassLambda)/lPLambda; lcTauAntiLambda = (lV0DecayLength*lInvMassAntiLambda)/lPAntiLambda; lcTauK0s = (lV0DecayLength*lInvMassK0)/lPK0s; if (lPLambda <1 && lOnFlyStatus==0 ){ fHistcTauL->Fill(lcTauLambda); } //--------------------------------------------K0s---------------------------------// if (lcTauK0s< cutcTauK0){ if (TMath::Abs(lRapK0s) < fRapidityCut ){ if(lPtArmV0*fSpecialArmenterosCutK0s>(TMath::Abs(lAlphaV0))){ //////2D histos: cut vs on fly status///////////////////// fHistDcaPosToPrimVertexK0->Fill(lDcaPosToPrimVertex,lOnFlyStatus); fHistDcaNegToPrimVertexK0->Fill(lDcaNegToPrimVertex,lOnFlyStatus); fHistRadiusV0K0->Fill(lV0Radius,lOnFlyStatus); fHistDecayLengthV0K0->Fill(lV0DecayLength,lOnFlyStatus); fHistDcaV0DaughtersK0->Fill(lDcaV0Daughters,lOnFlyStatus); fHistChi2K0->Fill(lChi2V0,lOnFlyStatus); fHistCosPointAngleK0->Fill(lV0cosPointAngle,lOnFlyStatus); //////2D histos: cut vs mass///////////////////// if (lOnFlyStatus==0){ fHistMassK0->Fill(lInvMassK0); fHistMassVsRadiusK0->Fill(rcPosRK0s,lInvMassK0); fHistPtVsMassK0->Fill(lInvMassK0,lPtK0s); fHistDcaPosToPrimVertexK0vsMassK0->Fill(lDcaPosToPrimVertex,lInvMassK0); fHistDcaNegToPrimVertexK0vsMassK0->Fill(lDcaNegToPrimVertex,lInvMassK0); fHistRadiusV0K0vsMassK0->Fill(lV0Radius,lInvMassK0); fHistDecayLengthV0K0vsMassK0->Fill(lV0DecayLength,lInvMassK0); fHistDcaV0DaughtersK0vsMassK0->Fill(lDcaV0Daughters,lInvMassK0); fHistCosPointAngleK0vsMassK0->Fill(lV0cosPointAngle,lInvMassK0); fHistArmenterosPodolanski->Fill(lAlphaV0,lPtArmV0); if(IsK0InvMass(lInvMassK0)){selectedK0->Add(new AliLeadingBasicParticle(lEtaK0s,lPhiK0s,lPtK0s));} } }//Special Armesto Cut for K0 } // if rap. condition } // end cTau condition //-----------------------------------------Lambda---------------------------------// if (lcTauLambda < cutcTauL){ if ((LambdaPID==1 && lMomInnerWallPos <=1 ) || (lMomInnerWallPos >1 ) || !(fUsePID=="withPID")){ if (TMath::Abs(lRapLambda) Fill(lDcaPosToPrimVertex,lOnFlyStatus); fHistDcaNegToPrimVertexL->Fill(lDcaNegToPrimVertex,lOnFlyStatus); fHistRadiusV0L->Fill(lV0Radius,lOnFlyStatus); fHistDecayLengthV0L->Fill(lV0DecayLength,lOnFlyStatus); fHistDcaV0DaughtersL->Fill(lDcaV0Daughters,lOnFlyStatus); fHistChi2L->Fill(lChi2V0,lOnFlyStatus); fHistCosPointAngleL->Fill(lV0cosPointAngle,lOnFlyStatus); //////2D histos: cut vs mass///////////////////// if (lOnFlyStatus==0){ fHistMassLambda->Fill(lInvMassLambda); fHistMassVsRadiusLambda->Fill(rcPosRLambda,lInvMassLambda); fHistPtVsMassLambda->Fill(lInvMassLambda,lPtLambda); fHistDcaPosToPrimVertexLvsMassL->Fill(lDcaPosToPrimVertex,lInvMassLambda); fHistDcaNegToPrimVertexLvsMassL->Fill(lDcaNegToPrimVertex,lInvMassLambda); fHistRadiusV0LvsMassL->Fill(lV0Radius,lInvMassLambda); fHistDecayLengthV0LvsMassL->Fill(lV0DecayLength,lInvMassLambda); fHistDcaV0DaughtersLvsMassL->Fill(lDcaV0Daughters,lInvMassLambda); fHistCosPointAngleLvsMassL->Fill(lV0cosPointAngle,lInvMassLambda); if(IsLambdaInvMass(lInvMassLambda)){selectedLambda->Add(new AliLeadingBasicParticle(lEtaLambda,lPhiLambda,lPtLambda));} } } //end of Rap condition } } //end cTau condition //--------------------------------------AntiLambda---------------------------------// if (lcTauAntiLambda < cutcTauL){ if ((AntiLambdaPID==1 && lMomInnerWallNeg <=1) || (lMomInnerWallNeg >1) || !(fUsePID=="withPID")){ if (TMath::Abs(lRapAntiLambda) < fRapidityCut) { //////2D histos: cut vs on fly status///////////////////// fHistDcaPosToPrimVertexAntiL->Fill(lDcaPosToPrimVertex,lOnFlyStatus); fHistDcaNegToPrimVertexAntiL->Fill(lDcaNegToPrimVertex,lOnFlyStatus); fHistRadiusV0AntiL->Fill(lV0Radius,lOnFlyStatus); fHistDecayLengthV0AntiL->Fill(lV0DecayLength,lOnFlyStatus); fHistDcaV0DaughtersAntiL->Fill(lDcaV0Daughters,lOnFlyStatus); fHistChi2AntiL->Fill(lChi2V0,lOnFlyStatus); fHistCosPointAngleAntiL->Fill(lV0cosPointAngle,lOnFlyStatus); //////2D histos: cut vs mass///////////////////// if (lOnFlyStatus==0){ fHistMassAntiLambda->Fill(lInvMassAntiLambda); fHistMassVsRadiusAntiLambda->Fill(rcPosRAntiLambda,lInvMassAntiLambda); fHistPtVsMassAntiLambda->Fill(lInvMassAntiLambda,lPtAntiLambda); fHistDcaPosToPrimVertexAntiLvsMass->Fill(lDcaPosToPrimVertex,lInvMassAntiLambda); fHistDcaNegToPrimVertexAntiLvsMass->Fill(lDcaNegToPrimVertex,lInvMassAntiLambda); fHistRadiusV0AntiLvsMass->Fill(lV0Radius,lInvMassAntiLambda); fHistDecayLengthV0AntiLvsMass->Fill(lV0DecayLength,lInvMassAntiLambda); fHistDcaV0DaughtersAntiLvsMass->Fill(lDcaV0Daughters,lInvMassAntiLambda); fHistCosPointAngleAntiLvsMass->Fill(lV0cosPointAngle,lInvMassAntiLambda); } } //end of Rap condition } // end of PID condition } //end cTau condition //--------------------------------------K0s Associated---------------------------------// if (lcTauK0s< cutcTauK0) { if (TMath::Abs(lRapK0s) < fRapidityCut) { fHistNsigmaPosPionK0->Fill(nSigmaPosPion); fHistNsigmaNegPionK0->Fill(nSigmaNegPion); if(lOnFlyStatus==0){ if(lCheckPIdK0Short) fHistPidMcMassK0->Fill(lInvMassK0); if(lCheckMcK0Short) { fHistAsMcMassK0->Fill(lInvMassK0); fHistAsMcPtK0->Fill(lPtK0s); fHistAsMcPtVsMassK0->Fill(lInvMassK0,lPtK0s); fHistAsMcMassVsRadiusK0->Fill(rcPosRK0s,lInvMassK0); fHistAsMcResxK0->Fill(rcPosXK0s-mcPosX); fHistAsMcResyK0->Fill(rcPosYK0s-mcPosY); fHistAsMcReszK0->Fill(rcPosZK0s-mcPosZ); fHistAsMcResrVsRadiusK0->Fill(rcPosRK0s,rcPosRK0s-mcPosR); fHistAsMcReszVsRadiusK0->Fill(rcPosZK0s,rcPosZK0s-mcPosZ); fHistAsMcProdRadiusK0->Fill(mcPosMotherR); fHistAsMcProdRadiusXvsYK0s->Fill(mcPosMotherX,mcPosMotherY); fHistAsMcResPtK0->Fill(deltaPtK0s); fHistAsMcResPtVsRapK0->Fill(deltaPtK0s,lRapK0s); fHistAsMcResPtVsPtK0->Fill(deltaPtK0s,lPtK0s); } if (lCheckSecondaryK0s) { fHistAsMcSecondaryPtVsRapK0s->Fill(lPtK0s,lRapK0s); fHistAsMcSecondaryProdRadiusK0s->Fill(mcPosMotherR); fHistAsMcSecondaryProdRadiusXvsYK0s->Fill(mcPosMotherX,mcPosMotherY); } } } // end rapidity condition } //end cTau condition //-----------------------------------Lambda Associated---------------------------------// if (lcTauLambda < cutcTauL){ if (TMath::Abs(lRapLambda) < fRapidityCut) { fHistNsigmaPosProtonLambda->Fill(nSigmaPosProton); fHistNsigmaNegPionLambda->Fill(nSigmaNegPion); if(lOnFlyStatus==0){ if(lCheckPIdLambda) fHistPidMcMassLambda->Fill(lInvMassLambda); if(lCheckMcLambda) { fHistAsMcMassLambda->Fill(lInvMassLambda); fHistAsMcPtLambda->Fill(lPtLambda); fHistCosPointAngleLVsMassVsPtsigL->Fill(lPtLambda,lV0cosPointAngle,lInvMassLambda); fHistAsMcPtVsMassLambda->Fill(lInvMassLambda,lPtLambda); fHistAsMcMassVsRadiusLambda->Fill(rcPosRLambda,lInvMassLambda); fHistAsMcResxLambda->Fill(rcPosXLambda-mcPosX); fHistAsMcResyLambda->Fill(rcPosYLambda-mcPosY); fHistAsMcReszLambda->Fill(rcPosZLambda-mcPosZ); fHistAsMcResrVsRadiusLambda->Fill(rcPosRLambda,rcPosRLambda-mcPosR); fHistAsMcReszVsRadiusLambda->Fill(rcPosZLambda,rcPosZLambda-mcPosZ); fHistAsMcProdRadiusLambda->Fill(mcPosMotherR); fHistAsMcProdRadiusXvsYLambda->Fill(mcPosMotherX,mcPosMotherY); fHistAsMcResPtLambda->Fill(deltaPtLambda); fHistAsMcResPtVsRapLambda->Fill(deltaPtLambda,lRapLambda); fHistAsMcResPtVsPtLambda->Fill(deltaPtLambda,lPtLambda); if (lComeFromSigma) fHistAsMcPtLambdaFromSigma->Fill(lPtLambda); } if (lCheckSecondaryLambda) { fHistAsMcSecondaryPtVsRapLambda->Fill(lPtLambda,lRapLambda); fHistAsMcSecondaryProdRadiusLambda->Fill(mcPosMotherR); fHistAsMcSecondaryProdRadiusXvsYLambda->Fill(mcPosMotherX,mcPosMotherY); if (lComeFromSigma) fHistAsMcSecondaryPtLambdaFromSigma->Fill(lPtLambda); } if(!lCheckMcLambda)fHistCosPointAngleLVsMassVsPtbackL->Fill(lPtLambda,lV0cosPointAngle,lInvMassLambda); } } // end rapidity condition }//end cTau condition //------------------------------AntiLambda Associated---------------------------------// if (lcTauAntiLambda < cutcTauL){ if (TMath::Abs(lRapAntiLambda) < fRapidityCut) { fHistNsigmaPosProtonAntiLambda->Fill(nSigmaPosProton); fHistNsigmaNegPionAntiLambda->Fill(nSigmaNegPion); if(lOnFlyStatus==0){ if(lCheckPIdAntiLambda) fHistPidMcMassAntiLambda->Fill(lInvMassAntiLambda); if(lCheckMcAntiLambda) { fHistAsMcMassAntiLambda->Fill(lInvMassAntiLambda); fHistAsMcPtAntiLambda->Fill(lPtAntiLambda); fHistAsMcPtVsMassAntiLambda->Fill(lInvMassAntiLambda,lPtAntiLambda); fHistAsMcMassVsRadiusAntiLambda->Fill(rcPosRAntiLambda,lInvMassAntiLambda); fHistAsMcResxAntiLambda->Fill(rcPosXAntiLambda-mcPosX); fHistAsMcResyAntiLambda->Fill(rcPosYAntiLambda-mcPosY); fHistAsMcReszAntiLambda->Fill(rcPosZAntiLambda-mcPosZ); fHistAsMcResrVsRadiusAntiLambda->Fill(rcPosRAntiLambda,rcPosRAntiLambda-mcPosR); fHistAsMcReszVsRadiusAntiLambda->Fill(rcPosZAntiLambda,rcPosZAntiLambda-mcPosZ); fHistAsMcProdRadiusAntiLambda->Fill(mcPosMotherR); fHistAsMcProdRadiusXvsYAntiLambda->Fill(mcPosMotherX,mcPosMotherY); fHistAsMcResPtAntiLambda->Fill(deltaPtAntiLambda); fHistAsMcResPtVsRapAntiLambda->Fill(deltaPtAntiLambda,lRapAntiLambda); fHistAsMcResPtVsPtAntiLambda->Fill(deltaPtAntiLambda,lPtAntiLambda); if (lComeFromSigma) fHistAsMcPtAntiLambdaFromSigma->Fill(lPtAntiLambda); } if (lCheckSecondaryAntiLambda) { fHistAsMcSecondaryPtVsRapAntiLambda->Fill(lPtAntiLambda,lRapAntiLambda); fHistAsMcSecondaryProdRadiusAntiLambda->Fill(mcPosMotherR); fHistAsMcSecondaryProdRadiusXvsYAntiLambda->Fill(mcPosMotherX,mcPosMotherY); if (lComeFromSigma) fHistAsMcSecondaryPtAntiLambdaFromSigma->Fill(lPtAntiLambda); } } } // end rapidity condition }//end cTau condition // Correlation part if(fAnalysisMC){ FillCorrelations(selectedTracksLeadingK0MC,selectedK0MC,fHistSibK0MC); FillCorrelations(selectedTracksLeadingLambdaMC,selectedLambdaMC,fHistSibLambdaMC); } FillCorrelations(selectedTracksLeadingK0,selectedK0,fHistSibK0); FillCorrelations(selectedTracksLeadingLambda,selectedLambda,fHistSibLambda); // Mixing part if(TMath::Abs(lPVz)>=10 || MultipOrCent>poolmax || MultipOrCent < poolmin) { if(fcollidingSys=="PP")AliInfo(Form("pp Event with Zvertex = %.2f cm and multiplicity = %.0f out of pool bounds, SKIPPING",lPVz,MultipOrCent)); if(fcollidingSys=="PbPb") AliInfo(Form("PbPb Event with Zvertex = %.2f cm and centrality = %.1f out of pool bounds, SKIPPING",lPVz,MultipOrCent)); return; } fPoolK0 = fPoolMgr->GetEventPool(MultipOrCent, lPVz); if (!fPoolK0){AliInfo(Form("No pool found for multiplicity = %f, zVtx = %f cm", MultipOrCent, lPVz));return;} if (fPoolK0->IsReady() || fPoolK0->NTracksInPool() > fPoolMinNTracks || fPoolK0->GetCurrentNEvents() >= fMinEventsToMix) { for (Int_t jMix=0; jMixGetCurrentNEvents(); jMix++) FillCorrelations(selectedTracksLeadingK0, fPoolK0->GetEvent(jMix),fHistMixK0); fPoolK0->UpdatePool(CloneAndReduceTrackList(selectedK0)); } fPoolLambda = fPoolMgr->GetEventPool(MultipOrCent, lPVz); if (!fPoolLambda){AliInfo(Form("No pool found for multiplicity = %f, zVtx = %f cm", MultipOrCent, lPVz));return;} if (fPoolLambda->IsReady() || fPoolLambda->NTracksInPool() > fPoolMinNTracks || fPoolLambda->GetCurrentNEvents() >= fMinEventsToMix) { for (Int_t jMix=0; jMixGetCurrentNEvents(); jMix++) FillCorrelations(selectedTracksLeadingLambda, fPoolLambda->GetEvent(jMix),fHistMixLambda); fPoolLambda->UpdatePool(CloneAndReduceTrackList(selectedLambda)); } PostData(1, fOutputList); } //--------------------------------------------------------------------------------------- TObjArray* AliLeadingV0Correlation::CloneAndReduceTrackList(TObjArray* tracks) { // clones a track list for mixing TObjArray* tracksClone = new TObjArray; tracksClone->SetOwner(kTRUE); for (Int_t i=0; iGetEntriesFast(); i++) { AliVParticle* particle = (AliVParticle*) tracks->At(i); tracksClone->Add(new AliLeadingBasicParticle(particle->Eta(), particle->Phi(), particle->Pt())); } return tracksClone; } //--------------------------------------------------------------------------------------- Int_t AliLeadingV0Correlation::NParticles(TObject* obj) { Int_t nTracks; if (obj->InheritsFrom("TClonesArray")){ // MC particles TClonesArray *arrayMC = static_cast(obj); nTracks = arrayMC->GetEntriesFast(); }else if (obj->InheritsFrom("TObjArray")){ // list of AliVParticle TObjArray *array = static_cast(obj); nTracks = array->GetEntriesFast(); }else if (obj->InheritsFrom("AliAODEvent")){ // RECO AOD tracks AliAODEvent *aodEvent = static_cast(obj); nTracks = aodEvent->GetNTracks(); }else if (obj->InheritsFrom("AliMCEvent")){ // RECO ESD tracks AliMCEvent *mcEvent = static_cast(obj); nTracks = mcEvent->GetNumberOfTracks(); }else { if (fDebug > 1) AliFatal(" Analysis type not defined !!! "); return 0; } return nTracks; } //--------------------------------------------------------------------------------------- Bool_t AliLeadingV0Correlation::IsAcseptedPrimaryTrack(const AliAODTrack *itrack) { if (TMath::Abs(itrack->Eta())>fTrackEtaCut) return kFALSE; if (!itrack->TestFilterBit(fFilterBit)) return kFALSE; return kTRUE; } //--------------------------------------------------------------------------------------- Bool_t AliLeadingV0Correlation::IsAcseptedDaughterTrack(const AliAODTrack *itrack) { if(TMath::Abs(itrack->Eta())>fTrackEtaCut)return kFALSE; if (!itrack->IsOn(AliAODTrack::kTPCrefit)) return kFALSE; Float_t nCrossedRowsTPC = itrack->GetTPCClusterInfo(2,1); if (nCrossedRowsTPC < 70) return kFALSE; Int_t findable=itrack->GetTPCNclsF(); if (findable <= 0) return kFALSE; if (nCrossedRowsTPC/findable < 0.8) return kFALSE; return kTRUE; } //--------------------------------------------------------------------------------------- Double_t AliLeadingV0Correlation::RangePhi(Double_t DPhi) { if (DPhi < -TMath::Pi()/2) DPhi += 2*TMath::Pi(); if (DPhi > 3*TMath::Pi()/2) DPhi -= 2*TMath::Pi(); return DPhi; } //--------------------------------------------------------------------------------------- void AliLeadingV0Correlation::FillCorrelations(TObjArray* particles, TObjArray* mixed,TH2F*histo) { TObjArray* input = (mixed) ? mixed : particles; TArrayF eta(input->GetEntriesFast()); for (Int_t i=0; iGetEntriesFast(); i++) eta[i] = ((AliVParticle*) input->At(i))->Eta(); if (particles) { Int_t jMax = particles->GetEntriesFast(); if (mixed) jMax = mixed->GetEntriesFast(); for (Int_t i=0; iGetEntriesFast(); i++) { AliVParticle* triggerParticle = (AliVParticle*) particles->At(0); //For leading Track // some optimization Float_t triggerEta = triggerParticle->Eta(); for (Int_t j=0; jAt(0); //For leading Track else particle = (AliVParticle*) mixed->At(j); // check if both particles point to the same element (does not occur for mixed events, but if subsets are mixed within the same event for cross-checks) if (mixed && triggerParticle == particle)continue; if (particle->Pt() > triggerParticle->Pt())continue; if (((particle->Pt())Pt())>fassocPtHigh)) continue; if (((triggerParticle->Pt())Pt())>ftrigPtHigh)) continue; Double_t vars[4]; vars[0] = triggerEta - eta[j]; vars[1] = particle->Pt(); //Associated Pt vars[2] = triggerParticle->Pt(); //Triger Pt vars[3] = RangePhi(triggerParticle->Phi() - particle->Phi()); histo->Fill(vars[0],vars[3]); } } } } //--------------------------------------------------------------------------------------- TObjArray* AliLeadingV0Correlation::FindLeadingObjectsK0(TObject *obj) { Int_t nTracks = NParticles(obj); if( !nTracks ) return 0; // Define array of AliVParticle objects TObjArray* tracks = new TObjArray(nTracks); // Loop over tracks or jets for (Int_t ipart=0; ipartAddLast( part ); } // Order tracks by pT QSortTracks( *tracks, 0, tracks->GetEntriesFast() ); nTracks = tracks->GetEntriesFast(); if( !nTracks ) return 0; return tracks; } //--------------------------------------------------------------------------------------- TObjArray* AliLeadingV0Correlation::FindLeadingObjectsLambda(TObject *obj) { Int_t nTracks = NParticles(obj); if( !nTracks ) return 0; // Define array of AliVParticle objects TObjArray* tracks = new TObjArray(nTracks); // Loop over tracks or jets for (Int_t ipart=0; ipartAddLast( part ); } // Order tracks by pT QSortTracks( *tracks, 0, tracks->GetEntriesFast() ); nTracks = tracks->GetEntriesFast(); if( !nTracks ) return 0; return tracks; } //--------------------------------------------------------------------------------------- TObjArray* AliLeadingV0Correlation::FindLeadingObjectsK0MC(TObject *obj) { Int_t nTracks = NParticles(obj); if( !nTracks ) return 0; // Define array of AliVParticle objects TObjArray* tracks = new TObjArray(nTracks); // Loop over tracks or jets for (Int_t ipart=0; ipartGetPdgCode(); if(pdgCodeCurrent==310)continue; tracks->AddLast( part ); } // Order tracks by pT QSortTracks( *tracks, 0, tracks->GetEntriesFast() ); nTracks = tracks->GetEntriesFast(); if( !nTracks ) return 0; return tracks; } //--------------------------------------------------------------------------------------- TObjArray* AliLeadingV0Correlation::FindLeadingObjectsLambdaMC(TObject *obj) { Int_t nTracks = NParticles(obj); if( !nTracks ) return 0; // Define array of AliVParticle objects TObjArray* tracks = new TObjArray(nTracks); // Loop over tracks or jets for (Int_t ipart=0; ipartGetPdgCode(); if(pdgCodeCurrent==3122)continue; tracks->AddLast( part ); } // Order tracks by pT QSortTracks( *tracks, 0, tracks->GetEntriesFast() ); nTracks = tracks->GetEntriesFast(); if( !nTracks ) return 0; return tracks; } //--------------------------------------------------------------------------------------- void AliLeadingV0Correlation::QSortTracks(TObjArray &a, Int_t first, Int_t last) { // Sort array of TObjArray of tracks by Pt using a quicksort algorithm. static TObject *tmp; static int i; // "static" to save stack space int j; while (last - first > 1) { i = first; j = last; for (;;) { while (++i < last && ((AliVParticle*)a[i])->Pt() > ((AliVParticle*)a[first])->Pt() ) ; while (--j > first && ((AliVParticle*)a[j])->Pt() < ((AliVParticle*)a[first])->Pt() ) ; if (i >= j) break; tmp = a[i]; a[i] = a[j]; a[j] = tmp; } if (j == first) { ++first; continue; } tmp = a[first]; a[first] = a[j]; a[j] = tmp; if (j - first < last - (j + 1)) { QSortTracks(a, first, j); first = j + 1; // QSortTracks(j + 1, last); } else { QSortTracks(a, j + 1, last); last = j; // QSortTracks(first, j); } } } //--------------------------------------------------------------------------------------- AliVParticle* AliLeadingV0Correlation::ParticleWithCuts(TObject* obj, Int_t ipart) { AliVParticle *part=0; if (obj->InheritsFrom("AliAODEvent")){ // RECO AOD TRACKS AliAODEvent *aodEvent = static_cast(obj); part = aodEvent->GetTrack(ipart); // track selection cuts if ( !(((AliAODTrack*)part)->TestFilterBit(fFilterBit))) return 0; } else if(obj->InheritsFrom("TClonesArray")){ // AOD-MC PARTICLE TClonesArray *arrayMC = static_cast(obj); part = (AliVParticle*)arrayMC->At( ipart ); if (!part)return 0; // eventually only primaries if (!( ((AliAODMCParticle*)part)->IsPhysicalPrimary()) )return 0; // eventually only hadrons Int_t pdgCode = ((AliAODMCParticle*)part)->GetPdgCode(); Bool_t isHadron = TMath::Abs(pdgCode)==211 || // Pion TMath::Abs(pdgCode)==2212 || // Proton TMath::Abs(pdgCode)==321; // Kaon if (!isHadron) return 0; } else {return 0;} // only charged if (!part->Charge())return 0; return part; } //--------------------------------------------------------------------------------------- Bool_t AliLeadingV0Correlation::IsK0InvMass(const Double_t mass) const { const Float_t massK0 = 0.497; const Float_t sigmaK0 = 0.003; const Float_t nSigmaSignal = 3.5; return ((massK0-nSigmaSignal*sigmaK0)<=mass && mass<=(massK0 + nSigmaSignal*sigmaK0))?1:0; } //--------------------------------------------------------------------------------------- Bool_t AliLeadingV0Correlation::IsLambdaInvMass(const Double_t mass) const { const Float_t massLambda = 1.116; const Float_t sigmaLambda = 0.003; const Float_t nSigmaSignal = 3.5; return ((massLambda-nSigmaSignal*sigmaLambda)<=mass && mass<=(massLambda + nSigmaSignal*sigmaLambda))?1:0; } //--------------------------------------------------------------------------------------- Bool_t AliLeadingV0Correlation::IsTrackNotFromLambda(const Int_t indexTrack){ // check wether track with index is from Lambda (= V0 with proper inv mass) TClonesArray* tracks = fAODEvent->GetTracks(); for(int i=0; iGetNumberOfV0s(); i++){ // loop over V0s AliAODv0* aodV0 = fAODEvent->GetV0(i); Float_t massLambda = aodV0->MassLambda(); if(IsLambdaInvMass(massLambda)){ AliAODTrack *trackPos = (AliAODTrack *) (aodV0->GetSecondaryVtx()->GetDaughter(0)); AliAODTrack *trackNeg = (AliAODTrack *) (aodV0->GetSecondaryVtx()->GetDaughter(1)); if ( !(IsAcseptedDaughterTrack(trackPos)) || !(IsAcseptedDaughterTrack(trackNeg)) ) continue; Int_t indexPos = tracks->IndexOf(trackPos); Int_t indexNeg = tracks->IndexOf(trackNeg); if(indexPos == indexTrack){ return kFALSE;} if(indexNeg == indexTrack){ return kFALSE;} } } return kTRUE; } //--------------------------------------------------------------------------------------- Bool_t AliLeadingV0Correlation::IsTrackNotFromK0(const Int_t indexTrack){ // check wether track with index is from K0 (= V0 with proper inv mass) TClonesArray* tracks = fAODEvent->GetTracks(); for(int i=0; iGetNumberOfV0s(); i++){ // loop over V0s AliAODv0* aodV0 = fAODEvent->GetV0(i); Float_t massK0 = aodV0->MassK0Short(); if(IsK0InvMass(massK0)){ AliAODTrack *trackPos = (AliAODTrack *) (aodV0->GetSecondaryVtx()->GetDaughter(0)); AliAODTrack *trackNeg = (AliAODTrack *) (aodV0->GetSecondaryVtx()->GetDaughter(1)); if ( !(IsAcseptedDaughterTrack(trackPos)) || !(IsAcseptedDaughterTrack(trackNeg)) ) continue; Int_t indexPos = tracks->IndexOf(trackPos); Int_t indexNeg = tracks->IndexOf(trackNeg); if(indexPos == indexTrack){ return kFALSE;} if(indexNeg == indexTrack){ return kFALSE;} } } return kTRUE; } //--------------------------------------------------------------------------------------- Bool_t AliLeadingV0Correlation::IsAcseptedV0(const AliAODEvent*aod, const AliAODv0* aodV0, const AliAODTrack* myTrackPos, const AliAODTrack* myTrackNeg) { if (!aodV0) return kFALSE; Double_t lRapK0s = aodV0->Y(310); Double_t lRapLambda = aodV0->Y(3122); Double_t lRapAntiLambda = aodV0->Y(-3122); if (TMath::Abs(lRapK0s)>=fRapidityCut) return kFALSE; if (TMath::Abs(lRapLambda)>=fRapidityCut) return kFALSE; if (TMath::Abs(lRapAntiLambda)>=fRapidityCut) return kFALSE; // Offline reconstructed V0 only if (aodV0->GetOnFlyStatus()) return kFALSE; // DCA of daughter track to Primary Vertex Float_t dcaNP=aodV0->DcaNegToPrimVertex(); if (TMath::Abs(dcaNP)DcaPosToPrimVertex(); if (TMath::Abs(dcaPP)DcaV0Daughters(); if (dcaD>fCutDCAV0Daughters) return kFALSE; // Cosinus of pointing angle Double_t cpa=aodV0->CosPointingAngle(aod->GetPrimaryVertex()); if (cpaGetSecondaryVtx(xyz); Double_t r2=xyz[0]*xyz[0] + xyz[1]*xyz[1]; if (r2GetDaughter(0)); myTrackNeg=(AliAODTrack *)(aodV0->GetDaughter(1)); if (!myTrackPos||!myTrackNeg) return kFALSE; // Unlike signs of daughters if (myTrackPos->Charge() == myTrackNeg->Charge()) return kFALSE; // Track cuts for daughers if ( !(IsAcseptedDaughterTrack(myTrackPos)) || !(IsAcseptedDaughterTrack(myTrackNeg)) ) return kFALSE; // Minimum pt of daughters Double_t lMomPos[3] = {999,999,999}; Double_t lMomNeg[3] = {999,999,999}; lMomPos[0] = aodV0->MomPosX(); lMomPos[1] = aodV0->MomPosY(); lMomPos[2] = aodV0->MomPosZ(); lMomNeg[0] = aodV0->MomNegX(); lMomNeg[1] = aodV0->MomNegY(); lMomNeg[2] = aodV0->MomNegZ(); Double_t lPtPos = TMath::Sqrt(lMomPos[0]*lMomPos[0] + lMomPos[1]*lMomPos[1]); Double_t lPtNeg = TMath::Sqrt(lMomNeg[0]*lMomNeg[0] + lMomNeg[1]*lMomNeg[1]); Double_t cutMinPtDaughter = 0.150; if (lPtPos