/************************************************************************** * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. * * * * Author: The ALICE Off-line Project. * * Contributors are mentioned in the code where appropriate. * * * * Permission to use, copy, modify and distribute this software and its * * documentation strictly for non-commercial purposes is hereby granted * * without fee, provided that the above copyright notice appears in all * * copies and that both the copyright notice and this permission notice * * appear in the supporting documentation. The authors make no claims * * about the suitability of this software for any purpose. It is * * provided "as is" without express or implied warranty. * **************************************************************************/ ///////////////////////////////////////////////////////////// // // AliAnalysisTaskSE for RecoDecay object (K0 short, Lambda, // D mesons ...) filtering // // Author: X-M. Zhang, xmzhang@lbl.gov ///////////////////////////////////////////////////////////// #include #include #include #include #include #include #include #include #include #include "AliAODEvent.h" #include "AliESDEvent.h" #include "AliMCEvent.h" #include "AliStack.h" #include "AliVVertex.h" #include "AliAODv0.h" #include "AliESDv0.h" #include "AliAODTrack.h" #include "AliESDtrack.h" #include "AliStack.h" #include "AliMCParticle.h" #include "AliAODMCParticle.h" #include "AliHeader.h" #include "AliGenDPMjetEventHeader.h" #include "AliV0vertexer.h" #include "AliAnalysisUtils.h" #include "AliInputEventHandler.h" #include "AliCentrality.h" #include "AliPIDResponse.h" #include "AliPicoHeaderCJ.h" #include "AliPicoV0RD.h" #include "AliPicoV0MC.h" #include "AliAnalysisTaskSEPicoV0Maker.h" ClassImp(AliAnalysisTaskSEPicoV0Maker) //============================================================================= const Double_t AliAnalysisTaskSEPicoV0Maker::fgkMassPion = 0.13957; const Double_t AliAnalysisTaskSEPicoV0Maker::fgkMassKshort = 0.497614; const Double_t AliAnalysisTaskSEPicoV0Maker::fgkMassProton = 0.938272; const Double_t AliAnalysisTaskSEPicoV0Maker::fgkMassLambda = 1.11568; //_____________________________________________________________________________ AliAnalysisTaskSEPicoV0Maker::AliAnalysisTaskSEPicoV0Maker() : AliAnalysisTaskSE(), fEventAOD(0), fEventESD(0), fCentInfo(0), fRespoPID(0), fAnaUtils(0), fEventAcptMask(0), fTriggerMask(0), fCollisionType(0), fCentEst(""), fIsAnaInfoMC(kFALSE), fIsRefitV0sESD(kFALSE), fIsSkipFastOnly(kFALSE), fIsDPMjetMC(kFALSE), fRapidityShift(0.), fCutMinEventVtxContr(0), fCutMaxEventVzAbs(0.), fCutMinV0Pt(0.), fCutMaxV0Pt(0.), fCutMinV0Rap(0.), fCutMaxV0Rap(0.), fCutMinDauPt(0.), fCutMinDauEta(0.), fCutMaxDauEta(0.), fCutMaxV0Chi2(0.), fCutMinV0Radius(0.), fCutMaxV0Radius(0.), fCutMaxDausDCA(0.), fCutMinDauDCAtoPV(0.), fCutMinDauXrowsTPC(0.), fCutMinDauXrowsOverFindableClusTPC(0.), fCutMaxKshortSigmaTPC(0.), fCutMinKshortCosPA(0.), fCutMaxKshortCtau(0.), fCutMaxKshortArmFrac(0.), fCutMinKshortDeltaM(0.), fCutMaxLambdaSigmaTPC(0.), fCutMinLambdaCosPA(0.), fCutMaxLambdaCtau(0.), fCutMaxLambdaArmFrac(0.), fCutMinLambdaDeletaM(0.), fPicoV0sClArr(0), fOutputListEH(0), fOutputListMC(0) { // // Default constructor // for (Int_t i=3; i--;) fPrimaryVtx[i] = 0.; } //_____________________________________________________________________________ AliAnalysisTaskSEPicoV0Maker::AliAnalysisTaskSEPicoV0Maker(const char *name, Bool_t bIsMC) : AliAnalysisTaskSE(name), fEventAOD(0), fEventESD(0), fCentInfo(0), fRespoPID(0), fAnaUtils(0), fEventAcptMask(0), fTriggerMask(0), fCollisionType(AliPicoHeaderCJ::kPP), fCentEst("V0M"), fIsAnaInfoMC(bIsMC), fIsRefitV0sESD(kFALSE), fIsSkipFastOnly(kFALSE), fIsDPMjetMC(kFALSE), fRapidityShift(0.), fCutMinEventVtxContr(2), fCutMaxEventVzAbs(10.), fCutMinV0Pt(0.), fCutMaxV0Pt(100.), fCutMinV0Rap(-10.), fCutMaxV0Rap(10.), fCutMinDauPt(0.), fCutMinDauEta(-10.), fCutMaxDauEta(10.), fCutMaxV0Chi2(33.), fCutMinV0Radius(0.3), fCutMaxV0Radius(200.), fCutMaxDausDCA(1.5), fCutMinDauDCAtoPV(0.05), fCutMinDauXrowsTPC(70.), fCutMinDauXrowsOverFindableClusTPC(0.8), fCutMaxKshortSigmaTPC(-1.), fCutMinKshortCosPA(0.95), fCutMaxKshortCtau(30.), fCutMaxKshortArmFrac(-1.), fCutMinKshortDeltaM(0.003), fCutMaxLambdaSigmaTPC(7.), fCutMinLambdaCosPA(0.993), fCutMaxLambdaCtau(40.), fCutMaxLambdaArmFrac(-1.), fCutMinLambdaDeletaM(-1.), fPicoV0sClArr(0), fOutputListEH(0), fOutputListMC(0) { // // Constructor // for (Int_t i=3; i--;) fPrimaryVtx[i] = 0.; DefineOutput(1, TList::Class()); if (fIsAnaInfoMC) DefineOutput(2, TList::Class()); } //_____________________________________________________________________________ AliAnalysisTaskSEPicoV0Maker::~AliAnalysisTaskSEPicoV0Maker() { // // Default destructor // if (fEventAOD) { delete fEventAOD; fEventAOD = 0; } if (fEventESD) { delete fEventESD; fEventESD = 0; } if (fCentInfo) { delete fCentInfo; fCentInfo = 0; } if (fRespoPID) { delete fRespoPID; fRespoPID = 0; } if (fAnaUtils) { delete fAnaUtils; fAnaUtils = 0; } if (fPicoV0sClArr) { delete fPicoV0sClArr; fPicoV0sClArr = 0; } if (fOutputListEH) { delete fOutputListEH; fOutputListEH = 0; } if (fOutputListMC) { delete fOutputListMC; fOutputListMC = 0; } } //_____________________________________________________________________________ void AliAnalysisTaskSEPicoV0Maker::Init() { // // AliAnalysisTaskSEPicoV0Maker::Init // return; } //_____________________________________________________________________________ void AliAnalysisTaskSEPicoV0Maker::UserCreateOutputObjects() { // // AliAnalysisTaskSEPicoV0Maker::UserCreateOutputObjects // InitAnalysis(); //============================================================================= if (fIsAnaInfoMC) { fPicoV0sClArr = new TClonesArray("AliPicoV0MC"); fPicoV0sClArr->SetName("PicoV0s"); } else { fPicoV0sClArr = new TClonesArray("AliPicoV0RD"); fPicoV0sClArr->SetName("PicoV0s"); } //============================================================================= fOutputListEH = new TList(); fOutputListEH->SetOwner(); CreateHistogramsEH(); PostData(1, fOutputListEH); if (fIsAnaInfoMC) { fOutputListMC = new TList(); fOutputListMC->SetOwner(); CreateHistogramsMC(); PostData(2, fOutputListMC); } return; } //_____________________________________________________________________________ void AliAnalysisTaskSEPicoV0Maker::UserExec(Option_t */*opt*/) { // // AliAnalysisTaskSEPicoV0Maker::UserExec // fPicoV0sClArr->Delete(); if (IsEventNotAcpt()) return; if (!(InputEvent()->FindListObject("PicoV0s"))) InputEvent()->AddObject(fPicoV0sClArr); //============================================================================= FillHistogramsEH(); if (IsEventNotINEL()) return; if (fIsAnaInfoMC) FillHistogramsMC(); //============================================================================= if (IsEventNotMBsa()) return; FillPicoV0s(); return; } //_____________________________________________________________________________ void AliAnalysisTaskSEPicoV0Maker::Terminate(Option_t */*opt*/) { // // AliAnalysisTaskSEPicoV0Maker::Terminate // return; } //_____________________________________________________________________________ void AliAnalysisTaskSEPicoV0Maker::NotifyRun() { // // AliAnalysisTaskSEPicoV0Maker::NotifyRun // return; } //_____________________________________________________________________________ void AliAnalysisTaskSEPicoV0Maker::FillPicoV0s() { // // AliAnalysisTaskSEPicoV0Maker::FillPicoRecoV0s // Int_t nV0s = 0; AliAODv0 *pV0AOD = 0; AliESDv0 *pV0ESD = 0; if (fEventAOD) nV0s = fEventAOD->GetNumberOfV0s(); if (fEventESD) nV0s = fEventESD->GetNumberOfV0s(); if (nV0s<=0) return; //============================================================================= TH2D *hKshortPtInvM = dynamic_cast(fOutputListEH->FindObject("hKshortPtInvM")); TH2D *hLambdaPtInvM = dynamic_cast(fOutputListEH->FindObject("hLambdaPtInvM")); TH2D *hAntiLaPtInvM = dynamic_cast(fOutputListEH->FindObject("hAntiLaPtInvM")); //============================================================================= AliPicoV0RD *pV0RD = 0; AliPicoV0MC *pV0MC = 0; Int_t nAt = fPicoV0sClArr->GetEntriesFast(); for (Int_t iV0=0; iV0GetV0(iV0); if (!pV0AOD) continue; if (fIsAnaInfoMC) { pV0MC = SelectV0CandidateMC(pV0AOD); if (!pV0MC) { pV0AOD = 0; continue; } } else { pV0RD = SelectV0CandidateRD(pV0AOD); if (!pV0RD) { pV0AOD = 0; continue; } } } if (fEventESD) { pV0ESD = fEventESD->GetV0(iV0); if (!pV0ESD) continue; if (fIsAnaInfoMC) { pV0MC = SelectV0CandidateMC(pV0ESD); if (!pV0MC) { pV0ESD = 0; continue; } } else { pV0RD = SelectV0CandidateRD(pV0ESD); if (!pV0RD) { pV0ESD = 0; continue; } } } if (pV0RD) { pV0RD->FillKshortPtInvM(hKshortPtInvM); pV0RD->FillLambdaPtInvM(hLambdaPtInvM); pV0RD->FillAntiLaPtInvM(hAntiLaPtInvM); new ((*fPicoV0sClArr)[nAt++]) AliPicoV0RD(*pV0RD); delete pV0RD; pV0RD=0; } if (pV0MC) { pV0MC->FillKshortPtInvM(hKshortPtInvM); pV0MC->FillLambdaPtInvM(hLambdaPtInvM); pV0MC->FillAntiLaPtInvM(hAntiLaPtInvM); new ((*fPicoV0sClArr)[nAt++]) AliPicoV0MC(*pV0MC); delete pV0MC; pV0MC=0; } if (pV0AOD) pV0AOD=0; if (pV0ESD) pV0ESD=0; } return; } //_____________________________________________________________________________ AliPicoV0RD* AliAnalysisTaskSEPicoV0Maker::SelectV0CandidateRD(AliAODv0 const *pV0) { // // AliAnalysisTaskSEPicoV0Maker::SelectV0CandidateRD // if (pV0->GetOnFlyStatus()) return 0x0; if ((pV0->Chi2V0())>fCutMaxV0Chi2) return 0x0; //============================================================================= Double_t dV0Pt = pV0->Pt(); if ((dV0PtfCutMaxV0Pt)) return 0x0; Double_t dKaRap = pV0->RapK0Short(); if ((dKaRapfCutMaxV0Rap)) return 0x0; Double_t dLaRap = pV0->RapLambda(); if ((dLaRapfCutMaxV0Rap)) return 0x0; //============================================================================= Double_t dV0Vtx[3]; pV0->GetXYZ(dV0Vtx); Double_t dV0Radius = TMath::Sqrt(dV0Vtx[0]*dV0Vtx[0] + dV0Vtx[1]*dV0Vtx[1]); if ((dV0RadiusfCutMaxV0Radius)) return 0x0; Double_t dDausDCA = pV0->DcaV0Daughters(); if (dDausDCA>fCutMaxDausDCA) return 0x0; Double_t dPosDCAtoPV = pV0->DcaPosToPrimVertex(); if (dPosDCAtoPVDcaNegToPrimVertex(); if (dNegDCAtoPVGetDaughter(0); if (!pDauPos) return 0x0; AliAODTrack *pDauNeg = (AliAODTrack*)pV0->GetDaughter(1); if (!pDauNeg) return 0x0; if (!(pDauPos->GetStatus() & AliESDtrack::kTPCrefit)) return 0x0; if (!(pDauNeg->GetStatus() & AliESDtrack::kTPCrefit)) return 0x0; if ((pDauPos->GetProdVertex()->GetType())==((Char_t)AliAODVertex::kKink)) return 0x0; if ((pDauNeg->GetProdVertex()->GetType())==((Char_t)AliAODVertex::kKink)) return 0x0; Float_t dPosXrowsTPC = pDauPos->GetTPCClusterInfo(2,1); Float_t dNegXrowsTPC = pDauNeg->GetTPCClusterInfo(2,1); Float_t dDauXrowsTPC = dPosXrowsTPC; if (dDauXrowsTPC>dNegXrowsTPC) dDauXrowsTPC = dNegXrowsTPC; if (dDauXrowsTPCGetTPCNclsF(); if (wPosTPCNClsF<=0) return 0x0; UShort_t wNegTPCNClsF = pDauNeg->GetTPCNclsF(); if (wNegTPCNClsF<=0) return 0x0; Double_t dPosXrowsOverFindableClusTPC = ((Double_t)dPosXrowsTPC) / ((Double_t)wPosTPCNClsF); Double_t dNegXrowsOverFindableClusTPC = ((Double_t)dNegXrowsTPC) / ((Double_t)wNegTPCNClsF); Double_t dDauXrowsOverFindableClusTPC = dPosXrowsOverFindableClusTPC; if (dDauXrowsOverFindableClusTPC>dNegXrowsOverFindableClusTPC) dDauXrowsOverFindableClusTPC = dNegXrowsOverFindableClusTPC; if (dDauXrowsOverFindableClusTPCCharge(); Short_t nNegCharge = pDauNeg->Charge(); if ((nPosCharge==0) || (nNegCharge==0) || (nPosCharge==nNegCharge)) return 0x0; Double_t dPosPxPyPz[3] = { 0., 0., 0. }; Double_t dNegPxPyPz[3] = { 0., 0., 0. }; if ((nPosCharge<0) && (nNegCharge>0)) { pDauPos = (AliAODTrack*)pV0->GetDaughter(1); pDauNeg = (AliAODTrack*)pV0->GetDaughter(0); dPosPxPyPz[0] = pV0->MomNegX(); dPosPxPyPz[1] = pV0->MomNegY(); dPosPxPyPz[2] = pV0->MomNegZ(); dNegPxPyPz[0] = pV0->MomPosX(); dNegPxPyPz[1] = pV0->MomPosY(); dNegPxPyPz[2] = pV0->MomPosZ(); } else { dPosPxPyPz[0] = pV0->MomPosX(); dPosPxPyPz[1] = pV0->MomPosY(); dPosPxPyPz[2] = pV0->MomPosZ(); dNegPxPyPz[0] = pV0->MomNegX(); dNegPxPyPz[1] = pV0->MomNegY(); dNegPxPyPz[2] = pV0->MomNegZ(); } TVector3 v3Pos(dPosPxPyPz); TVector3 v3Neg(dNegPxPyPz); if ((v3Pos.Pt()fCutMaxDauEta)) return 0x0; Double_t dNegEta = v3Neg.Eta(); if ((dNegEtafCutMaxDauEta)) return 0x0; //============================================================================= Bool_t bIsKshort = kFALSE; Bool_t bIsLambda = kFALSE; Bool_t bIsAntiLa = kFALSE; Float_t dPosPionSigmaTPC = fRespoPID->NumberOfSigmasTPC(pDauPos,AliPID::kPion); Float_t dNegPionSigmaTPC = fRespoPID->NumberOfSigmasTPC(pDauNeg,AliPID::kPion); Float_t dPosProtonSigmaTPC = fRespoPID->NumberOfSigmasTPC(pDauPos,AliPID::kProton); Float_t dNegProtonSigmaTPC = fRespoPID->NumberOfSigmasTPC(pDauNeg,AliPID::kProton); if (fCutMaxKshortSigmaTPC>0.) { bIsKshort = ((TMath::Abs(dPosPionSigmaTPC)0.) { bIsLambda = ((TMath::Abs(dPosProtonSigmaTPC)CosPointingAngle(fPrimaryVtx); if (bIsKshort) if (dV0CosPAP()+1e-10); if (bIsKshort) if ((dV0DistToPVoverP*fgkMassKshort)>fCutMaxKshortCtau) { bIsKshort = kFALSE; } if (bIsLambda || bIsAntiLa) if ((dV0DistToPVoverP*fgkMassLambda)>fCutMaxLambdaCtau) { bIsLambda = kFALSE; bIsAntiLa = kFALSE; } if (!(bIsKshort || bIsLambda || bIsAntiLa)) return 0x0; //============================================================================= Double_t dV0ArmFrac = pV0->PtArmV0() / (TMath::Abs(pV0->AlphaV0())+1e-12); if (bIsKshort && (fCutMaxKshortArmFrac>0.)) if (dV0ArmFrac>fCutMaxKshortArmFrac) { bIsKshort = kFALSE; } if ((bIsLambda || bIsAntiLa) && fCutMaxLambdaArmFrac>0.) if (dV0ArmFrac>fCutMaxLambdaArmFrac) { bIsLambda = kFALSE; bIsAntiLa = kFALSE; } if (!(bIsKshort || bIsLambda || bIsAntiLa)) return 0x0; //============================================================================= TLorentzVector vPosPion; vPosPion.SetVectM(v3Pos, fgkMassPion); TLorentzVector vNegPion; vNegPion.SetVectM(v3Neg, fgkMassPion); TLorentzVector vPosProton; vPosProton.SetVectM(v3Pos, fgkMassProton); TLorentzVector vNegProton; vNegProton.SetVectM(v3Neg, fgkMassProton); TLorentzVector vKshort = vPosPion + vNegPion; TLorentzVector vLamvda = vPosProton + vNegPion; TLorentzVector vAntiLa = vNegProton + vPosPion; Double_t dKshortInvM = vKshort.M(); Double_t dLambdaInvM = vLamvda.M(); Double_t dAntiLaInvM = vAntiLa.M(); if (bIsKshort) { Double_t dLower = 0.430006 - 0.0110029*dV0Pt; Double_t dUpper = 0.563707 + 0.0114979*dV0Pt; if ((dKshortInvMdUpper)) bIsKshort = kFALSE; } if (bIsLambda || bIsAntiLa) { Double_t dLower = 1.09501 - 0.00523272*dV0Pt - 0.075269*TMath::Exp(-3.46339*dV0Pt); Double_t dUpper = 1.13688 + 0.00527838*dV0Pt + 0.084222*TMath::Exp(-3.80595*dV0Pt); if (bIsLambda) if ((dLambdaInvMdUpper)) bIsLambda = kFALSE; if (bIsAntiLa) if ((dAntiLaInvMdUpper)) bIsAntiLa = kFALSE; } if (!(bIsKshort || bIsLambda || bIsAntiLa)) return 0x0; //============================================================================= if (bIsKshort && (fCutMinKshortDeltaM>0.)) { if ((TMath::Abs(dLambdaInvM-fgkMassLambda)0.)) { if ((TMath::Abs(dKshortInvM-fgkMassKshort)GetID(); Int_t idNeg = pDauNeg->GetID(); if (fJetContisClArr) for (Int_t i=0; iGetEntriesFast(); i++) { pTrkAOD = static_cast(fJetContisClArr->At(i)); if (!pTrkAOD) continue; Int_t id = pTrkAOD->GetID(); if (idPos==id) bPosInJC = kTRUE; if (idNeg==id) bNegInJC = kTRUE; if (bPosInJC && bNegInJC) { pTrkAOD = 0; break; } pTrkAOD = 0; }*/ AliPicoV0RD *pPicoV0 = new AliPicoV0RD(wMask, dV0Radius, dV0CosPA, dV0DistToPVoverP, dDausDCA, dPosDCAtoPV, dNegDCAtoPV, dDauXrowsTPC, dDauXrowsOverFindableClusTPC, v3Pos.Px(), v3Pos.Py(), v3Pos.Pz(), v3Neg.Px(), v3Neg.Py(), v3Neg.Pz(), bPosInJC, bNegInJC, dPosPionSigmaTPC, dPosProtonSigmaTPC, dNegPionSigmaTPC, dNegProtonSigmaTPC); return pPicoV0; } //_____________________________________________________________________________ AliPicoV0RD* AliAnalysisTaskSEPicoV0Maker::SelectV0CandidateRD(AliESDv0 const *pV0) { // // AliAnalysisTaskSEPicoV0Maker::SelectV0CandidateRD // if (pV0->GetOnFlyStatus()) return 0x0; if (pV0->GetChi2V0()>fCutMaxV0Chi2) return 0x0; //============================================================================= Double_t dV0Pt = pV0->Pt(); if ((dV0PtfCutMaxV0Pt)) return 0x0; Double_t dKaRap = pV0->RapK0Short(); if ((dKaRapfCutMaxV0Rap)) return 0x0; Double_t dLaRap = pV0->RapLambda(); if ((dLaRapfCutMaxV0Rap)) return 0x0; //============================================================================= Double_t dV0Vtx[3]; pV0->GetXYZ(dV0Vtx[0], dV0Vtx[1], dV0Vtx[2]); Double_t dV0Radius = TMath::Sqrt(dV0Vtx[0]*dV0Vtx[0] + dV0Vtx[1]*dV0Vtx[1]); if ((dV0RadiusfCutMaxV0Radius)) return 0x0; Double_t dDausDCA = pV0->GetDcaV0Daughters(); if (dDausDCA>fCutMaxDausDCA) return 0x0; //============================================================================= Int_t nPosIndex = pV0->GetPindex(); if (nPosIndex<0) return 0x0; Int_t nNegIndex = pV0->GetNindex(); if (nNegIndex<0) return 0x0; AliESDtrack *pDauPos = fEventESD->GetTrack(nPosIndex); if (!pDauPos) return 0x0; AliESDtrack *pDauNeg = fEventESD->GetTrack(nNegIndex); if (!pDauNeg) return 0x0; Double_t dMegField = fEventESD->GetMagneticField(); Double_t dPosDCAtoPV = TMath::Abs(pDauPos->GetD(fPrimaryVtx[0],fPrimaryVtx[1],dMegField)); if (dPosDCAtoPVGetD(fPrimaryVtx[0],fPrimaryVtx[1],dMegField)); if (dNegDCAtoPVGetStatus() & AliESDtrack::kTPCrefit)) return 0x0; if (!(pDauNeg->GetStatus() & AliESDtrack::kTPCrefit)) return 0x0; if ((pDauPos->GetKinkIndex(0)>0) || (pDauNeg->GetKinkIndex(0)>0)) return 0x0; Float_t dPosXrowsTPC = pDauPos->GetTPCClusterInfo(2,1); Float_t dNegXrowsTPC = pDauNeg->GetTPCClusterInfo(2,1); Float_t dDauXrowsTPC = dPosXrowsTPC; if (dDauXrowsTPC>dNegXrowsTPC) dDauXrowsTPC = dNegXrowsTPC; if (dDauXrowsTPCGetTPCNclsF(); if (wPosTPCNClsF<=0) return 0x0; UShort_t wNegTPCNClsF = pDauNeg->GetTPCNclsF(); if (wNegTPCNClsF<=0) return 0x0; Double_t dPosXrowsOverFindableClusTPC = ((Double_t)dPosXrowsTPC) / ((Double_t)wPosTPCNClsF); Double_t dNegXrowsOverFindableClusTPC = ((Double_t)dNegXrowsTPC) / ((Double_t)wNegTPCNClsF); Double_t dDauXrowsOverFindableClusTPC = dPosXrowsOverFindableClusTPC; if (dDauXrowsOverFindableClusTPC>dNegXrowsOverFindableClusTPC) dDauXrowsOverFindableClusTPC = dNegXrowsOverFindableClusTPC; if (dDauXrowsOverFindableClusTPCCharge(); Short_t nNegCharge = pDauNeg->Charge(); if ((nPosCharge==0) || (nNegCharge==0) || (nPosCharge==nNegCharge)) return 0x0; Double_t dPosPxPyPz[3] = { 0., 0., 0. }; Double_t dNegPxPyPz[3] = { 0., 0., 0. }; if ((nPosCharge<0) && (nNegCharge>0)) { pDauPos = fEventESD->GetTrack(nNegIndex); pDauNeg = fEventESD->GetTrack(nPosIndex); pV0->GetNPxPyPz(dPosPxPyPz[0], dPosPxPyPz[1], dPosPxPyPz[2]); pV0->GetPPxPyPz(dNegPxPyPz[0], dNegPxPyPz[1], dNegPxPyPz[2]); } else { pV0->GetPPxPyPz(dPosPxPyPz[0], dPosPxPyPz[1], dPosPxPyPz[2]); pV0->GetNPxPyPz(dNegPxPyPz[0], dNegPxPyPz[1], dNegPxPyPz[2]); } TVector3 v3Pos(dPosPxPyPz); TVector3 v3Neg(dNegPxPyPz); if ((v3Pos.Pt()fCutMaxDauEta)) return 0x0; Double_t dNegEta = v3Neg.Eta(); if ((dNegEtafCutMaxDauEta)) return 0x0; //============================================================================= Bool_t bIsKshort = kFALSE; Bool_t bIsLambda = kFALSE; Bool_t bIsAntiLa = kFALSE; Float_t dPosPionSigmaTPC = fRespoPID->NumberOfSigmasTPC(pDauPos,AliPID::kPion); Float_t dNegPionSigmaTPC = fRespoPID->NumberOfSigmasTPC(pDauNeg,AliPID::kPion); Float_t dPosProtonSigmaTPC = fRespoPID->NumberOfSigmasTPC(pDauPos,AliPID::kProton); Float_t dNegProtonSigmaTPC = fRespoPID->NumberOfSigmasTPC(pDauNeg,AliPID::kProton); if (fCutMaxKshortSigmaTPC>0.) { bIsKshort = ((TMath::Abs(dPosPionSigmaTPC)0.) { bIsLambda = ((TMath::Abs(dPosProtonSigmaTPC)GetV0CosineOfPointingAngle(fPrimaryVtx[0], fPrimaryVtx[1], fPrimaryVtx[2]); if (bIsKshort) if (dV0CosPAP()+1e-10); if (bIsKshort) if ((dV0DistToPVoverP*fgkMassKshort)>fCutMaxKshortCtau) { bIsKshort = kFALSE; } if (bIsLambda || bIsAntiLa) if ((dV0DistToPVoverP*fgkMassLambda)>fCutMaxLambdaCtau) { bIsLambda = kFALSE; bIsAntiLa = kFALSE; } if (!(bIsKshort || bIsLambda || bIsAntiLa)) return 0x0; //============================================================================= Double_t dV0ArmFrac = pV0->PtArmV0() / (TMath::Abs(pV0->AlphaV0())+1e-12); if (bIsKshort && (fCutMaxKshortArmFrac>0.)) if (dV0ArmFrac>fCutMaxKshortArmFrac) { bIsKshort = kFALSE; } if ((bIsLambda && bIsAntiLa) && (fCutMaxLambdaArmFrac>0.)) if (dV0ArmFrac>fCutMaxLambdaArmFrac) { bIsLambda = kFALSE; bIsAntiLa = kFALSE; } if (!(bIsKshort || bIsLambda || bIsAntiLa)) return 0x0; //============================================================================= TLorentzVector vPosPion; vPosPion.SetVectM(v3Pos, fgkMassPion); TLorentzVector vNegPion; vNegPion.SetVectM(v3Neg, fgkMassPion); TLorentzVector vPosProton; vPosProton.SetVectM(v3Pos, fgkMassProton); TLorentzVector vNegProton; vNegProton.SetVectM(v3Neg, fgkMassProton); TLorentzVector vKshort = vPosPion + vNegPion; TLorentzVector vLamvda = vPosProton + vNegPion; TLorentzVector vAntiLa = vNegProton + vPosPion; Double_t dKshortInvM = vKshort.M(); Double_t dLambdaInvM = vLamvda.M(); Double_t dAntiLaInvM = vAntiLa.M(); if (bIsKshort) { Double_t dLower = 0.430006 - 0.0110029*dV0Pt; Double_t dUpper = 0.563707 + 0.0114979*dV0Pt; if ((dKshortInvMdUpper)) bIsKshort = kFALSE; } if (bIsLambda || bIsAntiLa) { Double_t dLower = 1.09501 - 0.00523272*dV0Pt - 0.075269*TMath::Exp(-3.46339*dV0Pt); Double_t dUpper = 1.13688 + 0.00527838*dV0Pt + 0.084222*TMath::Exp(-3.80595*dV0Pt); if (bIsLambda) if ((dLambdaInvMdUpper)) bIsLambda = kFALSE; if (bIsAntiLa) if ((dAntiLaInvMdUpper)) bIsAntiLa = kFALSE; } if (!(bIsKshort || bIsLambda || bIsAntiLa)) return 0x0; //============================================================================= if (bIsKshort && (fCutMinKshortDeltaM>0.)) { if ((TMath::Abs(dLambdaInvM-fgkMassLambda)0.)) { if ((TMath::Abs(dKshortInvM-fgkMassKshort)GetOnFlyStatus()) return 0x0; if ((pV0RD->Chi2V0())>fCutMaxV0Chi2) return 0x0; Double_t dV0Pt = pV0RD->Pt(); if ((dV0PtfCutMaxV0Pt)) return 0x0; //============================================================================= Double_t dV0Vtx[3]; pV0RD->GetXYZ(dV0Vtx); Double_t dV0Radius = TMath::Sqrt(dV0Vtx[0]*dV0Vtx[0] + dV0Vtx[1]*dV0Vtx[1]); if ((dV0RadiusfCutMaxV0Radius)) return 0x0; Double_t dDausDCA = pV0RD->DcaV0Daughters(); if (dDausDCA>fCutMaxDausDCA) return 0x0; Double_t dPosDCAtoPV = pV0RD->DcaPosToPrimVertex(); if (dPosDCAtoPVDcaNegToPrimVertex(); if (dNegDCAtoPVGetDaughter(0); if (!pDauPosRD) return 0x0; AliAODTrack *pDauNegRD = (AliAODTrack*)pV0RD->GetDaughter(1); if (!pDauNegRD) return 0x0; if (!(pDauPosRD->GetStatus() & AliESDtrack::kTPCrefit)) return 0x0; if (!(pDauNegRD->GetStatus() & AliESDtrack::kTPCrefit)) return 0x0; if ((pDauPosRD->GetProdVertex()->GetType())==((Char_t)AliAODVertex::kKink)) return 0x0; if ((pDauNegRD->GetProdVertex()->GetType())==((Char_t)AliAODVertex::kKink)) return 0x0; Float_t dPosXrowsTPC = pDauPosRD->GetTPCClusterInfo(2,1); Float_t dNegXrowsTPC = pDauNegRD->GetTPCClusterInfo(2,1); Float_t dDauXrowsTPC = dPosXrowsTPC; if (dDauXrowsTPC>dNegXrowsTPC) dDauXrowsTPC = dNegXrowsTPC; if (dDauXrowsTPCGetTPCNclsF(); if (wPosTPCNClsF<=0) return 0x0; UShort_t wNegTPCNClsF = pDauNegRD->GetTPCNclsF(); if (wNegTPCNClsF<=0) return 0x0; Double_t dPosXrowsOverFindableClusTPC = ((Double_t)dPosXrowsTPC) / ((Double_t)wPosTPCNClsF); Double_t dNegXrowsOverFindableClusTPC = ((Double_t)dNegXrowsTPC) / ((Double_t)wNegTPCNClsF); Double_t dDauXrowsOverFindableClusTPC = dPosXrowsOverFindableClusTPC; if (dDauXrowsOverFindableClusTPC>dNegXrowsOverFindableClusTPC) dDauXrowsOverFindableClusTPC = dNegXrowsOverFindableClusTPC; if (dDauXrowsOverFindableClusTPCCharge(); Short_t nNegCharge = pDauNegRD->Charge(); if ((nPosCharge==0) || (nNegCharge==0) || (nPosCharge==nNegCharge)) return 0x0; Double_t dPosPxPyPz[3] = { 0., 0., 0. }; Double_t dNegPxPyPz[3] = { 0., 0., 0. }; if ((nPosCharge<0) && (nNegCharge>0)) { pDauPosRD = (AliAODTrack*)pV0RD->GetDaughter(1); pDauNegRD = (AliAODTrack*)pV0RD->GetDaughter(0); dPosPxPyPz[0] = pV0RD->MomNegX(); dPosPxPyPz[1] = pV0RD->MomNegY(); dPosPxPyPz[2] = pV0RD->MomNegZ(); dNegPxPyPz[0] = pV0RD->MomPosX(); dNegPxPyPz[1] = pV0RD->MomPosY(); dNegPxPyPz[2] = pV0RD->MomPosZ(); } else { dPosPxPyPz[0] = pV0RD->MomPosX(); dPosPxPyPz[1] = pV0RD->MomPosY(); dPosPxPyPz[2] = pV0RD->MomPosZ(); dNegPxPyPz[0] = pV0RD->MomNegX(); dNegPxPyPz[1] = pV0RD->MomNegY(); dNegPxPyPz[2] = pV0RD->MomNegZ(); } TVector3 v3Pos(dPosPxPyPz); TVector3 v3Neg(dNegPxPyPz); if ((v3Pos.Pt()fCutMaxDauEta)) return 0x0; Double_t dNegEta = v3Neg.Eta(); if ((dNegEtafCutMaxDauEta)) return 0x0; //============================================================================= Int_t inp = TMath::Abs(pDauPosRD->GetLabel()); if (inp<0) return 0x0; Int_t inn = TMath::Abs(pDauNegRD->GetLabel()); if (inn<0) return 0x0; AliAODMCParticle *pDauPosMC = (AliAODMCParticle*)MCEvent()->GetTrack(inp); if (!pDauPosMC) return 0x0; AliAODMCParticle *pDauNegMC = (AliAODMCParticle*)MCEvent()->GetTrack(inn); if (!pDauNegMC) return 0x0; Int_t imp = pDauPosMC->GetMother(); if (imp<0) return 0x0; Int_t imn = pDauNegMC->GetMother(); if (imn<0) return 0x0; if (imp != imn) return 0x0; AliAODMCParticle *pV0MC = (AliAODMCParticle*)MCEvent()->GetTrack(imp); if (!pV0MC) return 0x0; if (((pV0MC->Y())Y())>fCutMaxV0Rap)) return 0x0; Int_t idvMC = pV0MC->GetPdgCode(); Int_t idp = pDauPosMC->GetPdgCode(); Int_t idn = pDauNegMC->GetPdgCode(); Bool_t bIsKshort = ((idp==211) && (idn==-211) && (idvMC== 310)); Bool_t bIsLambda = ((idp==2212) && (idn==-211) && (idvMC== 3122)); Bool_t bIsAntiLa = ((idp==211) && (idn==-2212) && (idvMC==-3122)); if (!(bIsKshort || bIsLambda || bIsAntiLa)) return 0x0; //============================================================================= UInt_t wsvMC = 0; if (pV0MC->IsPrimary()) wsvMC |= AliPicoHeaderCJ::kPrimary; if (pV0MC->IsPhysicalPrimary()) wsvMC |= AliPicoHeaderCJ::kPhysicalPrimary; if (pV0MC->IsSecondaryFromWeakDecay()) wsvMC |= AliPicoHeaderCJ::kSecondaryFromWeakDecay; if (pV0MC->IsSecondaryFromMaterial()) wsvMC |= AliPicoHeaderCJ::kSecondaryFromMaterial; Int_t idmMC = 0; UInt_t wsmMC = 0; Double_t dMotherPt = 0.; Double_t dMotherEta = 0.; Double_t dMotherRap = 0.; if (bIsLambda || bIsAntiLa) { Int_t imv = pV0MC->GetMother(); if (imv>=0) { AliAODMCParticle *pMother = (AliAODMCParticle*)MCEvent()->GetTrack(imv); if (pMother) { idmMC = pMother->GetPdgCode(); if ((bIsLambda && ((idmMC== 3312) || (idmMC== 3322))) || (bIsAntiLa && ((idmMC==-3312) || (idmMC==-3322)))) { dMotherPt = pMother->Pt(); dMotherEta = pMother->Eta(); dMotherRap = pMother->Y(); if (pMother->IsPrimary()) wsmMC |= AliPicoHeaderCJ::kPrimary; if (pMother->IsPhysicalPrimary()) wsmMC |= AliPicoHeaderCJ::kPhysicalPrimary; if (pMother->IsSecondaryFromWeakDecay()) wsmMC |= AliPicoHeaderCJ::kSecondaryFromWeakDecay; if (pMother->IsSecondaryFromMaterial()) wsmMC |= AliPicoHeaderCJ::kSecondaryFromMaterial; } } } } //============================================================================= Double_t dV0CosPA = pV0RD->CosPointingAngle(fPrimaryVtx); if (bIsKshort) if (dV0CosPAP()+1e-10); if (bIsKshort) if ((dV0DistToPVoverP*fgkMassKshort)>fCutMaxKshortCtau) { bIsKshort = kFALSE; } if (bIsLambda || bIsAntiLa) if ((dV0DistToPVoverP*fgkMassLambda)>fCutMaxLambdaCtau) { bIsLambda = kFALSE; bIsAntiLa = kFALSE; } if (!(bIsKshort || bIsLambda || bIsAntiLa)) return 0x0; //============================================================================= Double_t dV0ArmFrac = pV0RD->PtArmV0() / (TMath::Abs(pV0RD->AlphaV0())+1e-12); if (bIsKshort && (fCutMaxKshortArmFrac>0.)) if (dV0ArmFrac>fCutMaxKshortArmFrac) { bIsKshort = kFALSE; } if ((bIsLambda || bIsAntiLa) && fCutMaxLambdaArmFrac>0.) if (dV0ArmFrac>fCutMaxLambdaArmFrac) { bIsLambda = kFALSE; bIsAntiLa = kFALSE; } if (!(bIsKshort || bIsLambda || bIsAntiLa)) return 0x0; //============================================================================= Int_t wMask = 0; if (bIsKshort) { TLorentzVector vPosPion; vPosPion.SetVectM(v3Pos, fgkMassPion); TLorentzVector vNegPion; vNegPion.SetVectM(v3Neg, fgkMassPion); TLorentzVector vKshort = vPosPion + vNegPion; Double_t dKshortInvM = vKshort.M(); Double_t dLower = 0.430006 - 0.0110029*dV0Pt; Double_t dUpper = 0.563707 + 0.0114979*dV0Pt; if ((dKshortInvMdUpper)) return 0x0; if (fCutMinKshortDeltaM>0.) { TLorentzVector vPosProton; vPosProton.SetVectM(v3Pos, fgkMassProton); TLorentzVector vNegProton; vNegProton.SetVectM(v3Neg, fgkMassProton); TLorentzVector vLamvda = vPosProton + vNegPion; TLorentzVector vAntiLa = vNegProton + vPosPion; Double_t dLambdaInvM = vLamvda.M(); Double_t dAntiLaInvM = vAntiLa.M(); if ((TMath::Abs(dLambdaInvM-fgkMassLambda)dUpper)) return 0x0; if (fCutMinLambdaDeletaM>0.) { TLorentzVector vPosPion; vPosPion.SetVectM(v3Pos, fgkMassPion); TLorentzVector vKshort = vPosPion + vNegPion; Double_t dKshortInvM = vKshort.M(); if ((TMath::Abs(dKshortInvM-fgkMassKshort)dUpper)) return 0x0; if (fCutMinLambdaDeletaM>0.) { TLorentzVector vNegPion; vNegPion.SetVectM(v3Neg, fgkMassPion); TLorentzVector vKshort = vPosPion + vNegPion; Double_t dKshortInvM = vKshort.M(); if ((TMath::Abs(dKshortInvM-fgkMassKshort)Px(), pV0MC->Py(), pV0MC->Pz(), pV0MC->E(), idmMC, wsmMC, dMotherPt, dMotherEta, dMotherRap); return pPicoV0; } //_____________________________________________________________________________ AliPicoV0MC* AliAnalysisTaskSEPicoV0Maker::SelectV0CandidateMC(AliESDv0 const *pV0RD) { // // AliAnalysisTaskSEPicoV0Maker::SelectV0CandidateMC // AliStack *pStack = MCEvent()->Stack(); if (!pStack) return 0x0; Int_t nPrimary = pStack->GetNprimary(); //============================================================================= if (pV0RD->GetOnFlyStatus()) return 0x0; if (pV0RD->GetChi2V0()>fCutMaxV0Chi2) return 0x0; Double_t dV0Pt = pV0RD->Pt(); if ((dV0PtfCutMaxV0Pt)) return 0x0; //============================================================================= Double_t dV0Vtx[3]; pV0RD->GetXYZ(dV0Vtx[0], dV0Vtx[1], dV0Vtx[2]); Double_t dV0Radius = TMath::Sqrt(dV0Vtx[0]*dV0Vtx[0] + dV0Vtx[1]*dV0Vtx[1]); if ((dV0RadiusfCutMaxV0Radius)) return 0x0; Double_t dDausDCA = pV0RD->GetDcaV0Daughters(); if (dDausDCA>fCutMaxDausDCA) return 0x0; //============================================================================= Int_t nPosIndex = TMath::Abs(pV0RD->GetPindex()); if (nPosIndex<0) return 0x0; Int_t nNegIndex = TMath::Abs(pV0RD->GetNindex()); if (nNegIndex<0) return 0x0; AliESDtrack *pDauPosRD = fEventESD->GetTrack(nPosIndex); if (!pDauPosRD) return 0x0; AliESDtrack *pDauNegRD = fEventESD->GetTrack(nNegIndex); if (!pDauNegRD) return 0x0; Double_t dMegField = fEventESD->GetMagneticField(); Double_t dPosDCAtoPV = TMath::Abs(pDauPosRD->GetD(fPrimaryVtx[0],fPrimaryVtx[1],dMegField)); if (dPosDCAtoPVGetD(fPrimaryVtx[0],fPrimaryVtx[1],dMegField)); if (dNegDCAtoPVGetStatus() & AliESDtrack::kTPCrefit)) return 0x0; if (!(pDauNegRD->GetStatus() & AliESDtrack::kTPCrefit)) return 0x0; if ((pDauPosRD->GetKinkIndex(0)>0) || (pDauNegRD->GetKinkIndex(0)>0)) return 0x0; Float_t dPosXrowsTPC = pDauPosRD->GetTPCClusterInfo(2,1); Float_t dNegXrowsTPC = pDauNegRD->GetTPCClusterInfo(2,1); Float_t dDauXrowsTPC = dPosXrowsTPC; if (dDauXrowsTPC>dNegXrowsTPC) dDauXrowsTPC = dNegXrowsTPC; if (dDauXrowsTPCGetTPCNclsF(); if (wPosTPCNClsF<=0) return 0x0; UShort_t wNegTPCNClsF = pDauNegRD->GetTPCNclsF(); if (wNegTPCNClsF<=0) return 0x0; Double_t dPosXrowsOverFindableClusTPC = ((Double_t)dPosXrowsTPC) / ((Double_t)wPosTPCNClsF); Double_t dNegXrowsOverFindableClusTPC = ((Double_t)dNegXrowsTPC) / ((Double_t)wNegTPCNClsF); Double_t dDauXrowsOverFindableClusTPC = dPosXrowsOverFindableClusTPC; if (dDauXrowsOverFindableClusTPC>dNegXrowsOverFindableClusTPC) dDauXrowsOverFindableClusTPC = dNegXrowsOverFindableClusTPC; if (dDauXrowsOverFindableClusTPCCharge(); Short_t nNegCharge = pDauNegRD->Charge(); if ((nPosCharge==0) || (nNegCharge==0) || (nPosCharge==nNegCharge)) return 0x0; Double_t dPosPxPyPz[3] = { 0., 0., 0. }; Double_t dNegPxPyPz[3] = { 0., 0., 0. }; if ((nPosCharge<0) && (nNegCharge>0)) { pDauPosRD = fEventESD->GetTrack(nNegIndex); pDauNegRD = fEventESD->GetTrack(nPosIndex); pV0RD->GetNPxPyPz(dPosPxPyPz[0], dPosPxPyPz[1], dPosPxPyPz[2]); pV0RD->GetPPxPyPz(dNegPxPyPz[0], dNegPxPyPz[1], dNegPxPyPz[2]); } else { pV0RD->GetPPxPyPz(dPosPxPyPz[0], dPosPxPyPz[1], dPosPxPyPz[2]); pV0RD->GetNPxPyPz(dNegPxPyPz[0], dNegPxPyPz[1], dNegPxPyPz[2]); } TVector3 v3Pos(dPosPxPyPz); TVector3 v3Neg(dNegPxPyPz); if ((v3Pos.Pt()fCutMaxDauEta)) return 0x0; Double_t dNegEta = v3Neg.Eta(); if ((dNegEtafCutMaxDauEta)) return 0x0; //============================================================================= Int_t inp = TMath::Abs(pDauPosRD->GetLabel()); if (inp<0) return 0x0; Int_t inn = TMath::Abs(pDauNegRD->GetLabel()); if (inn<0) return 0x0; TParticle *pDauPosMC = ((AliMCParticle*)MCEvent()->GetTrack(inp))->Particle(); if (!pDauPosMC) return 0x0; TParticle *pDauNegMC = ((AliMCParticle*)MCEvent()->GetTrack(inn))->Particle(); if (!pDauNegMC) return 0x0; Int_t imp = pDauPosMC->GetFirstMother(); if (imp<0) return 0x0; Int_t imn = pDauNegMC->GetFirstMother(); if (imn<0) return 0x0; if (imp != imn) return 0x0; TParticle *pV0MC = ((AliMCParticle*)MCEvent()->GetTrack(imp))->Particle(); if (!pV0MC) return 0x0; if (((pV0MC->Y())Y())>fCutMaxV0Rap)) return 0x0; Int_t idvMC = pV0MC->GetPdgCode(); Int_t idp = pDauPosMC->GetPdgCode(); Int_t idn = pDauNegMC->GetPdgCode(); Bool_t bIsKshort = ((idp==211) && (idn==-211) && (idvMC== 310)); Bool_t bIsLambda = ((idp==2212) && (idn==-211) && (idvMC== 3122)); Bool_t bIsAntiLa = ((idp==211) && (idn==-2212) && (idvMC==-3122)); if (!(bIsKshort || bIsLambda || bIsAntiLa)) return 0x0; //============================================================================= UInt_t wsvMC = 0; if (impIsPhysicalPrimary(imp)) wsvMC |= AliPicoHeaderCJ::kPhysicalPrimary; if (pStack->IsSecondaryFromWeakDecay(imp)) wsvMC |= AliPicoHeaderCJ::kSecondaryFromWeakDecay; if (pStack->IsSecondaryFromMaterial(imp)) wsvMC |= AliPicoHeaderCJ::kSecondaryFromMaterial; Int_t idmMC = 0; UInt_t wsmMC = 0; Double_t dMotherPt = 0.; Double_t dMotherEta = 0.; Double_t dMotherRap = 0.; if (bIsLambda || bIsAntiLa) { Int_t imv = pV0MC->GetFirstMother(); if (imv>=0) { TParticle *pMother = ((AliMCParticle*)MCEvent()->GetTrack(imv))->Particle(); if (pMother) { idmMC = pMother->GetPdgCode(); if ((bIsLambda && ((idmMC== 3312) || (idmMC== 3322))) || (bIsAntiLa && ((idmMC==-3312) || (idmMC==-3322)))) { dMotherPt = pMother->Pt(); dMotherEta = pMother->Eta(); dMotherRap = pMother->Y(); if (impIsPhysicalPrimary(imv)) wsmMC |= AliPicoHeaderCJ::kPhysicalPrimary; if (pStack->IsSecondaryFromWeakDecay(imv)) wsmMC |= AliPicoHeaderCJ::kSecondaryFromWeakDecay; if (pStack->IsSecondaryFromMaterial(imv)) wsmMC |= AliPicoHeaderCJ::kSecondaryFromMaterial; } } } } //============================================================================= Double_t dV0CosPA = pV0RD->GetV0CosineOfPointingAngle(fPrimaryVtx[0], fPrimaryVtx[1], fPrimaryVtx[2]); if (bIsKshort) if (dV0CosPAP()+1e-10); if (bIsKshort) if ((dV0DistToPVoverP*fgkMassKshort)>fCutMaxKshortCtau) { bIsKshort = kFALSE; } if (bIsLambda || bIsAntiLa) if ((dV0DistToPVoverP*fgkMassLambda)>fCutMaxLambdaCtau) { bIsLambda = kFALSE; bIsAntiLa = kFALSE; } if (!(bIsKshort || bIsLambda || bIsAntiLa)) return 0x0; //============================================================================= Double_t dV0ArmFrac = pV0RD->PtArmV0() / (TMath::Abs(pV0RD->AlphaV0())+1e-12); if (bIsKshort && (fCutMaxKshortArmFrac>0.)) if (dV0ArmFrac>fCutMaxKshortArmFrac) { bIsKshort = kFALSE; } if ((bIsLambda && bIsAntiLa) && (fCutMaxLambdaArmFrac>0.)) if (dV0ArmFrac>fCutMaxLambdaArmFrac) { bIsLambda = kFALSE; bIsAntiLa = kFALSE; } if (!(bIsKshort || bIsLambda || bIsAntiLa)) return 0x0; //============================================================================= Int_t wMask = 0; if (bIsKshort) { TLorentzVector vPosPion; vPosPion.SetVectM(v3Pos, fgkMassPion); TLorentzVector vNegPion; vNegPion.SetVectM(v3Neg, fgkMassPion); TLorentzVector vKshort = vPosPion + vNegPion; Double_t dKshortInvM = vKshort.M(); Double_t dLower = 0.430006 - 0.0110029*dV0Pt; Double_t dUpper = 0.563707 + 0.0114979*dV0Pt; if ((dKshortInvMdUpper)) return 0x0; if (fCutMinKshortDeltaM>0.) { TLorentzVector vPosProton; vPosProton.SetVectM(v3Pos, fgkMassProton); TLorentzVector vNegProton; vNegProton.SetVectM(v3Neg, fgkMassProton); TLorentzVector vLamvda = vPosProton + vNegPion; TLorentzVector vAntiLa = vNegProton + vPosPion; Double_t dLambdaInvM = vLamvda.M(); Double_t dAntiLaInvM = vAntiLa.M(); if ((TMath::Abs(dLambdaInvM-fgkMassLambda)dUpper)) return 0x0; if (fCutMinLambdaDeletaM>0.) { TLorentzVector vPosPion; vPosPion.SetVectM(v3Pos, fgkMassPion); TLorentzVector vKshort = vPosPion + vNegPion; Double_t dKshortInvM = vKshort.M(); if ((TMath::Abs(dKshortInvM-fgkMassKshort)dUpper)) return 0x0; if (fCutMinLambdaDeletaM>0.) { TLorentzVector vNegPion; vNegPion.SetVectM(v3Neg, fgkMassPion); TLorentzVector vKshort = vPosPion + vNegPion; Double_t dKshortInvM = vKshort.M(); if ((TMath::Abs(dKshortInvM-fgkMassKshort)Px(), pV0MC->Py(), pV0MC->Pz(), pV0MC->Energy(), idmMC, wsmMC, dMotherPt, dMotherEta, dMotherRap); return pPicoV0; } //_____________________________________________________________________________ Bool_t AliAnalysisTaskSEPicoV0Maker::IsEventNotAcpt() { // // AliAnalysisTaskSEPicoV0Maker::IsEventNotAcpt // fEventAcptMask = 0; if (!InputEvent()) return (fEventAcptMask==0); if (!fInputHandler) return (fEventAcptMask==0); if (fCollisionType!=(AliPicoHeaderCJ::kPP)) { fCentInfo = InputEvent()->GetCentrality(); if (!fCentInfo) return (fEventAcptMask==0); } fEventAOD = dynamic_cast(InputEvent()); fEventESD = dynamic_cast(InputEvent()); if ((!fEventAOD) && (!fEventESD)) return (fEventAcptMask==0); fRespoPID = fInputHandler->GetPIDResponse(); if (!fRespoPID) return kTRUE; if (fIsAnaInfoMC) { if (MCEvent()) { if (MCEvent()->GetNumberOfTracks()<=0) return (fEventAcptMask==0); } else return (fEventAcptMask==0); AliHeader *pHeader = MCEvent()->Header(); if (!pHeader) return (fEventAcptMask==0); if (fIsDPMjetMC) { AliGenDPMjetEventHeader *pDPMjetH = dynamic_cast(pHeader->GenEventHeader()); if (pDPMjetH) { Int_t nd0=0, nd1=0, nd2=0; pDPMjetH->GetNDiffractive(nd1, nd2, nd0); if ((nd1+nd2) != (pDPMjetH->ProjectileParticipants() + pDPMjetH->TargetParticipants())) return (fEventAcptMask==0); } } } fEventAcptMask |= AliPicoHeaderCJ::kEventAccCheck; //============================================================================= if (fCollisionType==(AliPicoHeaderCJ::kPP)) { fEventAcptMask |= AliPicoHeaderCJ::kEventAccMult; } else { if (fCentInfo->GetQuality()==0) fEventAcptMask |= AliPicoHeaderCJ::kEventAccMult; else return (fEventAcptMask==0); } //============================================================================= UInt_t wMask = fInputHandler->IsEventSelected(); if ((wMask & fTriggerMask) != fTriggerMask) return (fEventAcptMask==0); if (fIsSkipFastOnly) if ((wMask & AliVEvent::kFastOnly) == AliVEvent::kFastOnly) return (fEventAcptMask==0); fEventAcptMask |= AliPicoHeaderCJ::kEventAccTrigger; //============================================================================= const AliVVertex *pVertex = InputEvent()->GetPrimaryVertex(); if (!pVertex) return (fEventAcptMask==0); pVertex->GetXYZ(fPrimaryVtx); if (TMath::Abs(fPrimaryVtx[2])>fCutMaxEventVzAbs) return (fEventAcptMask==0); if ((fCollisionType==(AliPicoHeaderCJ::kPA)) || (fCollisionType==(AliPicoHeaderCJ::kAP))) { if ( fAnaUtils->IsFirstEventInChunk(InputEvent())) return (fEventAcptMask==0); if (!fAnaUtils->IsVertexSelected2013pA(InputEvent())) return (fEventAcptMask==0); /* if (fEventAOD) { const AliAODVertex *pVtxSPD = fEventAOD->GetPrimaryVertexSPD(); const AliAODVertex *pVtxTrk = fEventAOD->GetPrimaryVertex(); if ((!pVtxSPD) && (!pVtxTrk)) return (fEventAcptMask==0); }*/ /* if (fEventESD) { Bool_t fHasVertex = kFALSE; const AliESDVertex *pVtxESD = fEventESD->GetPrimaryVertexTracks(); if (pVtxESD->GetNContributors()<1) { pVtxESD = fEventESD->GetPrimaryVertexSPD(); if (pVtxESD->GetNContributors()<1) fHasVertex = kFALSE; else fHasVertex = kTRUE; TString vtxTyp = pVtxESD->GetTitle(); Double_t cov[6] = { 0., 0., 0., 0., 0., 0. }; pVtxESD->GetCovarianceMatrix(cov); Double_t zRes = TMath::Sqrt(cov[5]); if (vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) fHasVertex = kFALSE; } else fHasVertex = kTRUE; if (!fHasVertex) return (fEventAcptMask==0); }*/ } else { if (fEventAOD) { const AliAODVertex *pVtxSPD = fEventAOD->GetPrimaryVertexSPD(); if (!pVtxSPD) return (fEventAcptMask==0); const AliAODVertex *pVtxTrk = fEventAOD->GetPrimaryVertex(); if (!pVtxTrk) return (fEventAcptMask==0); } if (fEventESD) { const AliESDVertex *pVtxPri = fEventESD->GetPrimaryVertex(); if (!pVtxPri) return (fEventAcptMask==0); const AliESDVertex *pVtxSPD = fEventESD->GetPrimaryVertexSPD(); if (!pVtxSPD) return (fEventAcptMask==0); const AliESDVertex *pVtxTrk = fEventESD->GetPrimaryVertexTracks(); if (!pVtxTrk) return (fEventAcptMask==0); if ((!(pVtxPri->GetStatus())) && (!(pVtxSPD->GetStatus())) && (!(pVtxTrk->GetStatus()))) return (fEventAcptMask==0); } } fEventAcptMask |= AliPicoHeaderCJ::kEventAccVertex; //============================================================================= if ((fCollisionType==AliPicoHeaderCJ::kPP) || (fCollisionType==AliPicoHeaderCJ::kPA) || (fCollisionType==AliPicoHeaderCJ::kAP)) { if (fAnaUtils->IsPileUpEvent(InputEvent())) return (fEventAcptMask==0); } fEventAcptMask |= AliPicoHeaderCJ::kEventAccPileup; //============================================================================= if (fIsRefitV0sESD && fEventESD) { Double_t dCuts[7] = { fCutMaxV0Chi2, fCutMinDauDCAtoPV, fCutMinDauDCAtoPV, fCutMaxDausDCA, fCutMinKshortCosPA, fCutMinV0Radius, fCutMaxV0Radius }; fEventESD->ResetV0s(); AliV0vertexer aV0vtxer; aV0vtxer.SetDefaultCuts(dCuts); aV0vtxer.Tracks2V0vertices(fEventESD); } return (fEventAcptMask==0); } //_____________________________________________________________________________ Bool_t AliAnalysisTaskSEPicoV0Maker::IsEventNotINEL() { // // AliAnalysisTaskSEPicoV0Maker::IsEventNotINEL // if ((fEventAcptMask & AliPicoHeaderCJ::kEventAccCheck) != AliPicoHeaderCJ::kEventAccCheck) return kTRUE; if ((fEventAcptMask & AliPicoHeaderCJ::kEventAccMult) != AliPicoHeaderCJ::kEventAccMult) return kTRUE; return kFALSE; } //_____________________________________________________________________________ Bool_t AliAnalysisTaskSEPicoV0Maker::IsEventNotMBsa() { // // AliAnalysisTaskSEPicoV0Maker::IsEventNotMBsa // if (IsEventNotINEL()) return kTRUE; if ((fEventAcptMask & AliPicoHeaderCJ::kEventAccTrigger) != AliPicoHeaderCJ::kEventAccTrigger) return kTRUE; if ((fEventAcptMask & AliPicoHeaderCJ::kEventAccVertex) != AliPicoHeaderCJ::kEventAccVertex) return kTRUE; if ((fEventAcptMask & AliPicoHeaderCJ::kEventAccPileup) != AliPicoHeaderCJ::kEventAccPileup) return kTRUE; return kFALSE; } //_____________________________________________________________________________ void AliAnalysisTaskSEPicoV0Maker::FillHistogramsEH() { // // AliAnalysisTaskSEPicoV0Maker::FillHistogramsEH // Float_t dV0M = fCentInfo->GetCentralityPercentile("V0M"); Float_t dV0A = fCentInfo->GetCentralityPercentile("V0A"); Float_t dCL1 = fCentInfo->GetCentralityPercentile("CL1"); Float_t dZNA = fCentInfo->GetCentralityPercentile("ZNA"); if ((fEventAcptMask & AliPicoHeaderCJ::kEventAccCheck) == AliPicoHeaderCJ::kEventAccCheck) { ((TH1D*)fOutputListEH->FindObject("hEventAccCheck_V0M"))->Fill(dV0M); ((TH1D*)fOutputListEH->FindObject("hEventAccCheck_V0A"))->Fill(dV0A); ((TH1D*)fOutputListEH->FindObject("hEventAccCheck_CL1"))->Fill(dCL1); ((TH1D*)fOutputListEH->FindObject("hEventAccCheck_ZNA"))->Fill(dZNA); } if ((fEventAcptMask & AliPicoHeaderCJ::kEventAccMult) == AliPicoHeaderCJ::kEventAccMult) { ((TH1D*)fOutputListEH->FindObject("hEventAccMult_V0M"))->Fill(dV0M); ((TH1D*)fOutputListEH->FindObject("hEventAccMult_V0A"))->Fill(dV0A); ((TH1D*)fOutputListEH->FindObject("hEventAccMult_CL1"))->Fill(dCL1); ((TH1D*)fOutputListEH->FindObject("hEventAccMult_ZNA"))->Fill(dZNA); } if ((fEventAcptMask & AliPicoHeaderCJ::kEventAccTrigger) == AliPicoHeaderCJ::kEventAccTrigger) { ((TH1D*)fOutputListEH->FindObject("hEventAccTrigger_V0M"))->Fill(dV0M); ((TH1D*)fOutputListEH->FindObject("hEventAccTrigger_V0A"))->Fill(dV0A); ((TH1D*)fOutputListEH->FindObject("hEventAccTrigger_CL1"))->Fill(dCL1); ((TH1D*)fOutputListEH->FindObject("hEventAccTrigger_ZNA"))->Fill(dZNA); } if ((fEventAcptMask & AliPicoHeaderCJ::kEventAccVertex) == AliPicoHeaderCJ::kEventAccVertex) { ((TH1D*)fOutputListEH->FindObject("hEventAccVertex_V0M"))->Fill(dV0M); ((TH1D*)fOutputListEH->FindObject("hEventAccVertex_V0A"))->Fill(dV0A); ((TH1D*)fOutputListEH->FindObject("hEventAccVertex_CL1"))->Fill(dCL1); ((TH1D*)fOutputListEH->FindObject("hEventAccVertex_ZNA"))->Fill(dZNA); } if ((fEventAcptMask & AliPicoHeaderCJ::kEventAccPileup) == AliPicoHeaderCJ::kEventAccPileup) { ((TH1D*)fOutputListEH->FindObject("hEventAccPileup_V0M"))->Fill(dV0M); ((TH1D*)fOutputListEH->FindObject("hEventAccPileup_V0A"))->Fill(dV0A); ((TH1D*)fOutputListEH->FindObject("hEventAccPileup_CL1"))->Fill(dCL1); ((TH1D*)fOutputListEH->FindObject("hEventAccPileup_ZNA"))->Fill(dZNA); } return; } //_____________________________________________________________________________ void AliAnalysisTaskSEPicoV0Maker::FillHistogramsMC() { // // AliAnalysisTaskSEPicoV0Maker::FillHistogramsMC // Int_t nPrimary = 0; AliStack *pStack = 0; if (fEventESD) { pStack = MCEvent()->Stack(); if (!pStack) return; nPrimary = pStack->GetNprimary(); } //============================================================================= Double_t dEvType = -0.5; if (IsEventNotMBsa()) dEvType = 0.5; Double_t dV0M = fCentInfo->GetCentralityPercentile("V0M"); Double_t dV0A = fCentInfo->GetCentralityPercentile("V0A"); Double_t dCL1 = fCentInfo->GetCentralityPercentile("CL1"); Double_t dZNA = fCentInfo->GetCentralityPercentile("ZNA"); THnSparseD *hsV0 = dynamic_cast(fOutputListMC->FindObject("hsV0")); THnSparseD *hsXi = dynamic_cast(fOutputListMC->FindObject("hsXi")); //============================================================================= TParticle *pESD = 0; AliAODMCParticle *pAOD = 0; for (Int_t i=0; iGetNumberOfTracks(); i++) { if (fEventAOD) { pAOD = (AliAODMCParticle*)MCEvent()->GetTrack(i); if (!pAOD) continue; } if (fEventESD) { pESD = ((AliMCParticle*)MCEvent()->GetTrack(i))->Particle(); if (!pESD) continue; } Bool_t bPri = kFALSE; if (pAOD) bPri = pAOD->IsPrimary(); if (pESD) bPri = (iIsPhysicalPrimary(); if (pESD) bPhy = pStack->IsPhysicalPrimary(i); if ((!bPri) && (!bPhy)) { pAOD=0; pESD=0; continue; } Int_t id = 0; if (pAOD) id = pAOD->GetPdgCode(); if (pESD) id = pESD->GetPdgCode(); Bool_t bXi = (bPri && ((id==3312) || (id==-3312))); Bool_t bV0 = (bPhy && ((id==3122) || (id==-3122) || (id==310))); if (!(bXi || bV0)) { pAOD=0; pESD=0; continue; } Double_t dEta = 0.; if (pAOD) dEta = pAOD->Eta(); if (pESD) dEta = pESD->Eta(); if ((dEta<-5.) || (dEta>=5.)) { pAOD=0; pESD=0; continue; } Double_t dRapLab = 0.; if (pAOD) dRapLab = pAOD->Y(); if (pESD) dRapLab = pESD->Y(); if ((dRapLab<-5.) || (dRapLab>=5.)) { pAOD=0; pESD=0; continue; } Double_t dRapCMS = dRapLab + fRapidityShift; if ((dRapCMS<-5.) || (dRapCMS>=5.)) { pAOD=0; pESD=0; continue; } Double_t dVar[10]; if (pAOD) dVar[9] = pAOD->Pt(); if (pESD) dVar[9] = pESD->Pt(); dVar[1] = dEvType; dVar[2] = dV0M; dVar[3] = dV0A; dVar[4] = dCL1; dVar[5] = dZNA; dVar[6] = dEta; dVar[7] = dRapLab; dVar[8] = dRapCMS; if (bXi) { if (id== 3312) dVar[0] = -0.5; if (id==-3312) dVar[0] = 0.5; hsXi->Fill(dVar); } if (bV0) { if (id== 310 ) dVar[0] = 0.; if (id== 3122) dVar[0] = 1.; if (id==-3122) dVar[0] = 2.; hsV0->Fill(dVar); } pAOD = 0; pESD = 0; } return; } //_____________________________________________________________________________ void AliAnalysisTaskSEPicoV0Maker::CreateHistogramsEH() { // // AliAnalysisTaskSEPicoV0Maker::CreateHistogramsEH // Bool_t bStatusTmpH = TH1::AddDirectoryStatus(); TH1::AddDirectory(kFALSE); //============================================================================= TH1D *h1 = 0; h1 = new TH1D("hEventAccCheck_V0M", "", 210, -10., 200.); h1->Sumw2(); fOutputListEH->Add(h1); h1 = new TH1D("hEventAccCheck_V0A", "", 210, -10., 200.); h1->Sumw2(); fOutputListEH->Add(h1); h1 = new TH1D("hEventAccCheck_CL1", "", 210, -10., 200.); h1->Sumw2(); fOutputListEH->Add(h1); h1 = new TH1D("hEventAccCheck_ZNA", "", 210, -10., 200.); h1->Sumw2(); fOutputListEH->Add(h1); h1 = new TH1D("hEventAccMult_V0M", "", 210, -10., 200.); h1->Sumw2(); fOutputListEH->Add(h1); h1 = new TH1D("hEventAccMult_V0A", "", 210, -10., 200.); h1->Sumw2(); fOutputListEH->Add(h1); h1 = new TH1D("hEventAccMult_CL1", "", 210, -10., 200.); h1->Sumw2(); fOutputListEH->Add(h1); h1 = new TH1D("hEventAccMult_ZNA", "", 210, -10., 200.); h1->Sumw2(); fOutputListEH->Add(h1); h1 = new TH1D("hEventAccTrigger_V0M", "", 210, -10., 200.); h1->Sumw2(); fOutputListEH->Add(h1); h1 = new TH1D("hEventAccTrigger_V0A", "", 210, -10., 200.); h1->Sumw2(); fOutputListEH->Add(h1); h1 = new TH1D("hEventAccTrigger_CL1", "", 210, -10., 200.); h1->Sumw2(); fOutputListEH->Add(h1); h1 = new TH1D("hEventAccTrigger_ZNA", "", 210, -10., 200.); h1->Sumw2(); fOutputListEH->Add(h1); h1 = new TH1D("hEventAccVertex_V0M", "", 210, -10., 200.); h1->Sumw2(); fOutputListEH->Add(h1); h1 = new TH1D("hEventAccVertex_V0A", "", 210, -10., 200.); h1->Sumw2(); fOutputListEH->Add(h1); h1 = new TH1D("hEventAccVertex_CL1", "", 210, -10., 200.); h1->Sumw2(); fOutputListEH->Add(h1); h1 = new TH1D("hEventAccVertex_ZNA", "", 210, -10., 200.); h1->Sumw2(); fOutputListEH->Add(h1); h1 = new TH1D("hEventAccPileup_V0M", "", 210, -10., 200.); h1->Sumw2(); fOutputListEH->Add(h1); h1 = new TH1D("hEventAccPileup_V0A", "", 210, -10., 200.); h1->Sumw2(); fOutputListEH->Add(h1); h1 = new TH1D("hEventAccPileup_CL1", "", 210, -10., 200.); h1->Sumw2(); fOutputListEH->Add(h1); h1 = new TH1D("hEventAccPileup_ZNA", "", 210, -10., 200.); h1->Sumw2(); fOutputListEH->Add(h1); TH2D *h2 = 0; h2 = new TH2D("hKshortPtInvM", "", 1000, 0., 100., 300, fgkMassKshort-0.15, fgkMassKshort+0.15); h2->Sumw2(); fOutputListEH->Add(h2); h2=0; h2 = new TH2D("hLambdaPtInvM", "", 1000, 0., 100., 200, fgkMassLambda-0.10, fgkMassLambda+0.10); h2->Sumw2(); fOutputListEH->Add(h2); h2=0; h2 = new TH2D("hAntiLaPtInvM", "", 1000, 0., 100., 200, fgkMassLambda-0.10, fgkMassLambda+0.10); h2->Sumw2(); fOutputListEH->Add(h2); h2=0; TH1::AddDirectory(bStatusTmpH); return; } //_____________________________________________________________________________ void AliAnalysisTaskSEPicoV0Maker::CreateHistogramsMC() { // // AliAnalysisTaskSEPicoV0Maker::CreateHistogramsMC // // TODO: add the multiplicity bins Bool_t bStatusTmpH = TH1::AddDirectoryStatus(); TH1::AddDirectory(kFALSE); const Int_t nV0 = 10; // 0: particle type // ==0, Kshort // ==1, Lambda // ==2, AntiLa // 1: Event type // ==-0.5, INEL // == 0.5, MB // 2: V0M // 3: V0A // 4: CL1 // 5: ZNA // 6: eta // 7: rap in Lab // 8: rap in CMS // 9: Pt const Int_t nV0Bin[nV0] = { 3, 2, 210, 210, 210, 210, 100, 100, 100, 1000 }; const Double_t dV0Min[nV0] = { -0.5, -1., -10., -10., -10., -10., -5., -5., -5., 0. }; const Double_t dV0Max[nV0] = { 2.5, 1., 200., 200., 200., 200., 5., 5., 5., 100. }; THnSparseD *hsV0 = new THnSparseD("hsV0", "", nV0, nV0Bin, dV0Min, dV0Max); fOutputListMC->Add(hsV0); //============================================================================= const Int_t nXi = 10; // 0: particle type // ==-0.5, XiNeg // == 0.5, XiPos // 1: Event type // ==-0.5, INEL // == 0.5, MB // 2: V0M // 3: V0A // 4: CL1 // 5: ZNA // 6: eta // 7: rap in Lab // 8: rap in CMS // 9: Pt const Int_t nXiBin[nV0] = { 2, 2, 210, 210, 210, 210, 100, 100, 100, 1000 }; const Double_t dXiMin[nV0] = { -1., -1., -10., -10., -10., -10., -5., -5., -5., 0. }; const Double_t dXiMax[nV0] = { 1., 1., 200., 200., 200., 200., 5., 5., 5., 100. }; THnSparseD *hsXi = new THnSparseD("hsXi", "", nXi, nXiBin, dXiMin, dXiMax); fOutputListMC->Add(hsXi); TH1::AddDirectory(bStatusTmpH); return; } //_____________________________________________________________________________ void AliAnalysisTaskSEPicoV0Maker::InitAnalysis() { // // AliAnalysisTaskSEPicoV0Maker::InitAnalysis // if (fCollisionType==(AliPicoHeaderCJ::kPP)) InitParamsPP(); if (fCollisionType==(AliPicoHeaderCJ::kPA)) InitParamsPA(); if (fCollisionType==(AliPicoHeaderCJ::kAP)) InitParamsAP(); if (fCollisionType==(AliPicoHeaderCJ::kAA)) InitParamsAA(); fAnaUtils = new AliAnalysisUtils(); fAnaUtils->SetMinVtxContr(fCutMinEventVtxContr); fAnaUtils->SetMaxVtxZ(fCutMaxEventVzAbs); return; } //_____________________________________________________________________________ void AliAnalysisTaskSEPicoV0Maker::InitParamsPP() { // // AliAnalysisTaskSEPicoV0Maker::InitParametersPP // fRapidityShift = 0.; fCutMaxEventVzAbs = 10.; //============================================================================= fCutMaxV0Chi2 = 33.; fCutMinV0Radius = 0.3; // default: >0.5; uncertainty: >0.3, 0.4, 0.6, 0.7; fCutMaxV0Radius = 200.; // default: not applied in pp //============================================================================= fCutMaxDausDCA = 1.5; // default: <1; uncertainty: <0.5, 0.75, 1.25, 1.5 fCutMinDauDCAtoPV = 0.05; // default: >0.06; uncertainty: >0.05, 0.055, 0.07, 0.08 fCutMinDauXrowsTPC = 70.; // default: >70; uncertainty: >75, 80 fCutMinDauXrowsOverFindableClusTPC = 0.8; // default: >0.8; uncertainty: >0.95 //============================================================================= fCutMaxKshortSigmaTPC = -1.; // default: <5; uncertainty: w/o cut fCutMinKshortCosPA = 0.95; // default: >0.97; uncertainty: >0.95, 0.96, 0.98, 0.99 fCutMaxKshortCtau = 30.; // default: <20; uncertainty: <12, 30 fCutMaxKshortArmFrac = -1.; // default: not applied in pp fCutMinKshortDeltaM = 0.003; // default: >0.005; uncertainty: >0.003, 0.006 //============================================================================= fCutMaxLambdaSigmaTPC = 7.; // default: <5; uncertainty: 4, 6, 7 fCutMinLambdaCosPA = 0.993; // default: >0.995; uncertainty: >0.993, 0.994, 0.996, 0.997 fCutMaxLambdaCtau = 40.; // default: <30; uncertainty: <20, 40 fCutMaxLambdaArmFrac = -1.; // default: not applied in pp fCutMinLambdaDeletaM = -1.; // default: >0.01; uncertainty: w/o rejection return; } //_____________________________________________________________________________ void AliAnalysisTaskSEPicoV0Maker::InitParamsPA() { // // AliAnalysisTaskSEPicoV0Maker::InitParametersPA // InitParamsPP(); fRapidityShift = 0.465; fCutMaxLambdaSigmaTPC = 6; // default: <5; uncertaity: <4, 6 return; } //_____________________________________________________________________________ void AliAnalysisTaskSEPicoV0Maker::InitParamsAP() { // // AliAnalysisTaskSEPicoV0Maker::InitParametersAP // InitParamsPP(); fRapidityShift = -0.465; fCutMaxLambdaSigmaTPC = 6; // default: <5; uncertaity: <4, 6 return; } //_____________________________________________________________________________ void AliAnalysisTaskSEPicoV0Maker::InitParamsAA() { // // AliAnalysisTaskSEPicoV0Maker::InitParametersAA // InitParamsPP(); fCutMinV0Radius = 0.9; // default: 5; uncertainty: varying around fCutMaxV0Radius = 100.; //fCutMinDauPt = 0.16; // default: 0.16 fCutMinDauDCAtoPV = 0.08; // default: 0.1; uncertainty: 0.08, 0.12 fCutMaxKshortSigmaTPC = 6; // default: <5; uncertainty: <4, 6; fCutMinKshortCosPA = 0.997; // default: >0.998; uncertainty: 0.997, 0.999 fCutMaxKshortArmFrac = 0.2; // default: <0.2 fCutMaxLambdaSigmaTPC = 6; // default: <5; uncertaity: <4, 6 fCutMinLambdaCosPA = 0.997; // default: >0.998; uncertainty: 0.997, 0.999 fCutMinLambdaDeletaM = 0.008; // default: >0.01; uncertainty: 0.008, 0.012 return; }