diff --git a/PWGHF/DataModel/CandidateReconstructionTables.h b/PWGHF/DataModel/CandidateReconstructionTables.h index b4d60f34123..5fddf9d0f0d 100644 --- a/PWGHF/DataModel/CandidateReconstructionTables.h +++ b/PWGHF/DataModel/CandidateReconstructionTables.h @@ -1450,7 +1450,9 @@ DECLARE_SOA_COLUMN(CpaLambda, cpaLambda, float); DECLARE_SOA_COLUMN(CpaXYLambda, cpaXYLambda, float); DECLARE_SOA_COLUMN(CpaLambdaToXi, cpaLambdaToXi, float); DECLARE_SOA_COLUMN(CpaXYLambdaToXi, cpaXYLambdaToXi, float); +DECLARE_SOA_COLUMN(RadiusLambda, radiusLambda, float); DECLARE_SOA_COLUMN(PBachelorPi, pBachelorPi, float); +DECLARE_SOA_COLUMN(PtBachelorPi, ptBachelorPi, float); DECLARE_SOA_COLUMN(PPiFromLambda, pPiFromLambda, float); DECLARE_SOA_COLUMN(PPrFromLambda, pPrFromLambda, float); DECLARE_SOA_COLUMN(DcaXiDaughters, dcaXiDaughters, float); @@ -1462,10 +1464,10 @@ DECLARE_SOA_COLUMN(DcaXYCascToPV, dcaXYCascToPV, float); DECLARE_SOA_COLUMN(DcaZCascToPV, dcaZCascToPV, float); // KF specific columns DECLARE_SOA_COLUMN(Chi2TopoXicPlusToPV, chi2TopoXicPlusToPV, float); -DECLARE_SOA_COLUMN(Chi2TopoXicPlusToPVBefConst, chi2TopoXicPlusToPVBefConst, float); -DECLARE_SOA_COLUMN(Chi2PrimXi, chi2PrimXi, float); -DECLARE_SOA_COLUMN(Chi2PrimPi0, chi2PrimPi0, float); -DECLARE_SOA_COLUMN(Chi2PrimPi1, chi2PrimPi1, float); +DECLARE_SOA_COLUMN(Chi2XicPlusToPV, chi2XicPlusToPV, float); +DECLARE_SOA_COLUMN(Chi2XiToPV, chi2XiToPV, float); +DECLARE_SOA_COLUMN(Chi2Pi0ToPV, chi2Pi0ToPV, float); +DECLARE_SOA_COLUMN(Chi2Pi1ToPV, chi2Pi1ToPV, float); DECLARE_SOA_COLUMN(Chi2DevPi0Pi1, chi2DevPi0Pi1, float); DECLARE_SOA_COLUMN(Chi2DevPi0Xi, chi2DevPi0Xi, float); DECLARE_SOA_COLUMN(Chi2DevPi1Xi, chi2DevPi1Xi, float); @@ -1535,9 +1537,10 @@ DECLARE_SOA_TABLE(HfCandXicBase, "AOD", "HFCANDXICBASE", hf_cand::ImpactParameter0, hf_cand::ImpactParameter1, hf_cand::ImpactParameter2, hf_cand::ErrorImpactParameter0, hf_cand::ErrorImpactParameter1, hf_cand::ErrorImpactParameter2, // cascade specific columns - hf_cand_xic_to_xi_pi_pi::PBachelorPi, hf_cand_xic_to_xi_pi_pi::PPiFromLambda, hf_cand_xic_to_xi_pi_pi::PPrFromLambda, + hf_cand_xic_to_xi_pi_pi::PBachelorPi, hf_cand_xic_to_xi_pi_pi::PPiFromLambda, hf_cand_xic_to_xi_pi_pi::PPrFromLambda, hf_cand_xic_to_xi_pi_pi::PtBachelorPi, hf_cand_xic_to_xi_pi_pi::CpaXi, hf_cand_xic_to_xi_pi_pi::CpaXYXi, hf_cand_xic_to_xi_pi_pi::CpaLambda, hf_cand_xic_to_xi_pi_pi::CpaXYLambda, hf_cand_xic_to_xi_pi_pi::CpaLambdaToXi, hf_cand_xic_to_xi_pi_pi::CpaXYLambdaToXi, hf_cand_xic_to_xi_pi_pi::InvMassXi, hf_cand_xic_to_xi_pi_pi::InvMassLambda, hf_cand_xic_to_xi_pi_pi::InvMassXiPi0, hf_cand_xic_to_xi_pi_pi::InvMassXiPi1, + hf_cand_xic_to_xi_pi_pi::RadiusLambda, // DCA hf_cand_xic_to_xi_pi_pi::DcaXiDaughters, hf_cand_xic_to_xi_pi_pi::DcaV0Daughters, hf_cand_xic_to_xi_pi_pi::DcaPosToPV, hf_cand_xic_to_xi_pi_pi::DcaNegToPV, hf_cand_xic_to_xi_pi_pi::DcaBachelorToPV, hf_cand_xic_to_xi_pi_pi::DcaXYCascToPV, hf_cand_xic_to_xi_pi_pi::DcaZCascToPV, // PID @@ -1580,8 +1583,8 @@ using HfCandXic = HfCandXicExt; DECLARE_SOA_TABLE(HfCandXicKF, "AOD", "HFCANDXICKF", hf_cand_xic_to_xi_pi_pi::KfDecayLength, hf_cand_xic_to_xi_pi_pi::KfDecayLengthNormalised, hf_cand_xic_to_xi_pi_pi::KfDecayLengthXY, hf_cand_xic_to_xi_pi_pi::KfDecayLengthXYNormalised, cascdata::KFCascadeChi2, cascdata::KFV0Chi2, - hf_cand_xic_to_xi_pi_pi::Chi2TopoXicPlusToPVBefConst, hf_cand_xic_to_xi_pi_pi::Chi2TopoXicPlusToPV, - hf_cand_xic_to_xi_pi_pi::Chi2PrimXi, hf_cand_xic_to_xi_pi_pi::Chi2PrimPi0, hf_cand_xic_to_xi_pi_pi::Chi2PrimPi1, + hf_cand_xic_to_xi_pi_pi::Chi2XicPlusToPV, hf_cand_xic_to_xi_pi_pi::Chi2TopoXicPlusToPV, + hf_cand_xic_to_xi_pi_pi::Chi2XiToPV, hf_cand_xic_to_xi_pi_pi::Chi2Pi0ToPV, hf_cand_xic_to_xi_pi_pi::Chi2Pi1ToPV, hf_cand_xic_to_xi_pi_pi::Chi2DevPi0Pi1, hf_cand_xic_to_xi_pi_pi::Chi2DevPi0Xi, hf_cand_xic_to_xi_pi_pi::Chi2DevPi1Xi, hf_cand_xic_to_xi_pi_pi::DcaPi0Pi1, hf_cand_xic_to_xi_pi_pi::DcaPi0Xi, hf_cand_xic_to_xi_pi_pi::DcaPi1Xi, hf_cand_xic_to_xi_pi_pi::DcaXYPi0Pi1, hf_cand_xic_to_xi_pi_pi::DcaXYPi0Xi, hf_cand_xic_to_xi_pi_pi::DcaXYPi1Xi); diff --git a/PWGHF/TableProducer/candidateCreatorXicToXiPiPi.cxx b/PWGHF/TableProducer/candidateCreatorXicToXiPiPi.cxx index 5ec7bbced6b..871b6e06aa8 100644 --- a/PWGHF/TableProducer/candidateCreatorXicToXiPiPi.cxx +++ b/PWGHF/TableProducer/candidateCreatorXicToXiPiPi.cxx @@ -107,7 +107,7 @@ struct HfCandidateCreatorXicToXiPiPi { Configurable useAbsDCA{"useAbsDCA", false, "Minimise abs. distance rather than chi2"}; Configurable useWeightedFinalPCA{"useWeightedFinalPCA", false, "Recalculate vertex position using track covariances, effective only if useAbsDCA is true"}; // KFParticle - Configurable useXiMassConstraint{"useXiMassConstraint", true, "Use mass constraint for Xi"}; + Configurable useXiMassConstraint{"useXiMassConstraint", true, "Use mass constraint for Xi. WARNING: Only disable if you know what you are doing!"}; Configurable constrainXicPlusToPv{"constrainXicPlusToPv", false, "Constrain XicPlus to PV"}; Configurable kfConstructMethod{"kfConstructMethod", 2, "Construct method of XicPlus: 0 fast mathematics without constraint of fixed daughter particle masses, 2 daughter particle masses stay fixed in construction process"}; Configurable rejDiffCollTrack{"rejDiffCollTrack", true, "Reject tracks coming from different collisions (effective only for KFParticle w/o derived data)"}; @@ -414,6 +414,9 @@ struct HfCandidateCreatorXicToXiPiPi { float const cpaLambdaToXi = RecoDecay::cpa(vertexCasc, vertexV0, pVecV0); float const cpaXYLambdaToXi = RecoDecay::cpaXY(vertexCasc, vertexV0, pVecV0); + // calculate Lambda radius + float const radiusLambda = std::hypot(vertexV0[0], vertexV0[1]); + // get invariant mass of Xi-pi pairs auto arrayMomentaXiPi0 = std::array{pVecXi, pVecPi0}; massXiPi0 = RecoDecay::m(arrayMomentaXiPi0, std::array{MassXiMinus, MassPiPlus}); @@ -495,9 +498,10 @@ struct HfCandidateCreatorXicToXiPiPi { impactParameterCasc.getY(), impactParameter0.getY(), impactParameter1.getY(), std::sqrt(impactParameterCasc.getSigmaY2()), std::sqrt(impactParameter0.getSigmaY2()), std::sqrt(impactParameter1.getSigmaY2()), /*cascade specific columns*/ - trackPionFromXi.p(), pPiFromLambda, pPrFromLambda, + trackPionFromXi.p(), pPiFromLambda, pPrFromLambda, trackPionFromXi.pt(), cpaXi, cpaXYXi, cpaLambda, cpaXYLambda, cpaLambdaToXi, cpaXYLambdaToXi, casc.mXi(), casc.mLambda(), massXiPi0, massXiPi1, + radiusLambda, /*DCA information*/ casc.dcacascdaughters(), casc.dcaV0daughters(), casc.dcapostopv(), casc.dcanegtopv(), casc.dcabachtopv(), casc.dcaXYCascToPV(), casc.dcaZCascToPV(), @@ -598,6 +602,10 @@ struct HfCandidateCreatorXicToXiPiPi { float parPosMom[NElementsStateVector]; std::copy(xyzpxpypz.begin(), xyzpxpypz.end(), parPosMom); // create KFParticle + // README: The Xi KFParticle in this case is constructed from the parameters stored in the LF cascade table. + // The LF strangenessbuilder should in this case be run WITHOUT the mass constraint on the Xi to consistently store the unconstrained parameters and invariant mass of the Xi. + // The mass constraint on the Xi is applied here only after the KFParticle object was created from the unconstrained parameters and covariance matrix of the Xi. + // WARNING: If the Xi gets already constrained in the LF strangenessbuilder, the parameters and cov matrix passed to the KFParticle.Create() function will be constrained while the mass won't be. The stored energy, mass, and momentum will not be correctly related anymore! KFParticle kfXi; float const massXi = casc.mXi(); kfXi.Create(parPosMom, casc.kfTrackCovMat(), casc.sign(), massXi); @@ -663,6 +671,9 @@ struct HfCandidateCreatorXicToXiPiPi { float const cpaLambdaToXi = RecoDecay::cpa(vertexCasc, vertexV0, pVecV0); float const cpaXYLambdaToXi = RecoDecay::cpaXY(vertexCasc, vertexV0, pVecV0); + // calculate Lambda radius + float const radiusLambda = std::hypot(vertexV0[0], vertexV0[1]); + // get chi2 deviation of Pi0-Pi1, Pi0-Xi, Pi1-Xi float chi2DevPi0Pi1 = kfCharmBachelor0.GetDeviationFromParticle(kfCharmBachelor1); float chi2DevPi0Xi = kfCharmBachelor0.GetDeviationFromParticle(kfXi); @@ -779,9 +790,10 @@ struct HfCandidateCreatorXicToXiPiPi { impactParameterXiXY, impactParameterPi0XY, impactParameterPi1XY, errImpactParameterXiXY, errImpactParameterPi0XY, errImpactParameterPi1XY, /*cascade specific columns*/ - trackPionFromXi.p(), pPiFromLambda, pPrFromLambda, + trackPionFromXi.p(), pPiFromLambda, pPrFromLambda, trackPionFromXi.pt(), cpaXi, cpaXYXi, cpaLambda, cpaXYLambda, cpaLambdaToXi, cpaXYLambdaToXi, massXi, casc.mLambda(), massXiPi0, massXiPi1, + radiusLambda, /*DCA information*/ casc.dcacascdaughters(), casc.dcaV0daughters(), casc.dcapostopv(), casc.dcanegtopv(), casc.dcabachtopv(), casc.dcaXYCascToPV(), casc.dcaZCascToPV(), diff --git a/PWGHF/TableProducer/treeCreatorXicToXiPiPi.cxx b/PWGHF/TableProducer/treeCreatorXicToXiPiPi.cxx index 11fbbf3508b..a80f2df5af5 100644 --- a/PWGHF/TableProducer/treeCreatorXicToXiPiPi.cxx +++ b/PWGHF/TableProducer/treeCreatorXicToXiPiPi.cxx @@ -132,6 +132,7 @@ DECLARE_SOA_TABLE(HfCandXicToXiPiPiLiteKfs, "AOD", "HFXICXI2PILITKF", full::PtXi, full::PtPi0, full::PtPi1, + hf_cand_xic_to_xi_pi_pi::PtBachelorPi, full::M, full::Chi2SV, full::Ct, @@ -145,15 +146,15 @@ DECLARE_SOA_TABLE(HfCandXicToXiPiPiLiteKfs, "AOD", "HFXICXI2PILITKF", hf_cand_xic_to_xi_pi_pi::CpaXYXi, hf_cand_xic_to_xi_pi_pi::CpaLambda, hf_cand_xic_to_xi_pi_pi::CpaXYLambda, - hf_cand_xic_to_xi_pi_pi::CpaLambdaToXi, - hf_cand_xic_to_xi_pi_pi::CpaXYLambdaToXi, + hf_cand_xic_to_xi_pi_pi::RadiusLambda, + hf_cand_xic_to_xi_pi_pi::InvMassXi, + hf_cand_xic_to_xi_pi_pi::InvMassLambda, full::ImpactParameterXi, full::ImpactParameterNormalisedXi, full::ImpactParameterPi0, full::ImpactParameterNormalisedPi0, full::ImpactParameterPi1, full::ImpactParameterNormalisedPi1, - full::MaxNormalisedDeltaIP, hf_cand_xic_to_xi_pi_pi::DcaXiDaughters, hf_cand_xic_to_xi_pi_pi::DcaV0Daughters, hf_cand_xic_to_xi_pi_pi::DcaXYCascToPV, @@ -175,11 +176,11 @@ DECLARE_SOA_TABLE(HfCandXicToXiPiPiLiteKfs, "AOD", "HFXICXI2PILITKF", // KF specific columns full::Chi2GeoXi, full::Chi2GeoLambda, - hf_cand_xic_to_xi_pi_pi::Chi2TopoXicPlusToPVBefConst, + hf_cand_xic_to_xi_pi_pi::Chi2XicPlusToPV, hf_cand_xic_to_xi_pi_pi::Chi2TopoXicPlusToPV, - hf_cand_xic_to_xi_pi_pi::Chi2PrimXi, - hf_cand_xic_to_xi_pi_pi::Chi2PrimPi0, - hf_cand_xic_to_xi_pi_pi::Chi2PrimPi1, + hf_cand_xic_to_xi_pi_pi::Chi2XiToPV, + hf_cand_xic_to_xi_pi_pi::Chi2Pi0ToPV, + hf_cand_xic_to_xi_pi_pi::Chi2Pi1ToPV, hf_cand_xic_to_xi_pi_pi::Chi2DevPi0Pi1, hf_cand_xic_to_xi_pi_pi::Chi2DevPi0Xi, hf_cand_xic_to_xi_pi_pi::Chi2DevPi1Xi, @@ -294,6 +295,7 @@ DECLARE_SOA_TABLE(HfCandXicToXiPiPiFullKfs, "AOD", "HFXICXI2PIFULKF", full::PtXi, full::PtPi0, full::PtPi1, + hf_cand_xic_to_xi_pi_pi::PtBachelorPi, full::M, full::Chi2SV, full::Ct, @@ -309,6 +311,9 @@ DECLARE_SOA_TABLE(HfCandXicToXiPiPiFullKfs, "AOD", "HFXICXI2PIFULKF", hf_cand_xic_to_xi_pi_pi::CpaXYLambda, hf_cand_xic_to_xi_pi_pi::CpaLambdaToXi, hf_cand_xic_to_xi_pi_pi::CpaXYLambdaToXi, + hf_cand_xic_to_xi_pi_pi::RadiusLambda, + hf_cand_xic_to_xi_pi_pi::InvMassXi, + hf_cand_xic_to_xi_pi_pi::InvMassLambda, full::ImpactParameterXi, full::ImpactParameterNormalisedXi, full::ImpactParameterPi0, @@ -324,10 +329,8 @@ DECLARE_SOA_TABLE(HfCandXicToXiPiPiFullKfs, "AOD", "HFXICXI2PIFULKF", hf_cand_xic_to_xi_pi_pi::DcaPosToPV, hf_cand_xic_to_xi_pi_pi::DcaNegToPV, // additional columns only stored in the full candidate table - hf_cand_xic_to_xi_pi_pi::InvMassXi, hf_cand_xic_to_xi_pi_pi::InvMassXiPi0, hf_cand_xic_to_xi_pi_pi::InvMassXiPi1, - hf_cand_xic_to_xi_pi_pi::InvMassLambda, full::P, full::PPi0, full::PPi1, @@ -348,11 +351,11 @@ DECLARE_SOA_TABLE(HfCandXicToXiPiPiFullKfs, "AOD", "HFXICXI2PIFULKF", // KF-specific columns full::Chi2GeoXi, full::Chi2GeoLambda, - hf_cand_xic_to_xi_pi_pi::Chi2TopoXicPlusToPVBefConst, + hf_cand_xic_to_xi_pi_pi::Chi2XicPlusToPV, hf_cand_xic_to_xi_pi_pi::Chi2TopoXicPlusToPV, - hf_cand_xic_to_xi_pi_pi::Chi2PrimXi, - hf_cand_xic_to_xi_pi_pi::Chi2PrimPi0, - hf_cand_xic_to_xi_pi_pi::Chi2PrimPi1, + hf_cand_xic_to_xi_pi_pi::Chi2XiToPV, + hf_cand_xic_to_xi_pi_pi::Chi2Pi0ToPV, + hf_cand_xic_to_xi_pi_pi::Chi2Pi1ToPV, hf_cand_xic_to_xi_pi_pi::Chi2DevPi0Pi1, hf_cand_xic_to_xi_pi_pi::Chi2DevPi0Xi, hf_cand_xic_to_xi_pi_pi::Chi2DevPi1Xi, @@ -541,6 +544,7 @@ struct HfTreeCreatorXicToXiPiPi { candidate.ptProng0(), candidate.ptProng1(), candidate.ptProng2(), + candidate.ptBachelorPi(), candidate.invMassXicPlus(), candidate.chi2PCA(), candidate.ct(o2::constants::physics::MassXiCPlus), @@ -554,15 +558,15 @@ struct HfTreeCreatorXicToXiPiPi { candidate.cpaXYXi(), candidate.cpaLambda(), candidate.cpaXYLambda(), - candidate.cpaLambdaToXi(), - candidate.cpaXYLambdaToXi(), + candidate.radiusLambda(), + candidate.invMassXi(), + candidate.invMassLambda(), candidate.impactParameter0(), candidate.impactParameterNormalised0(), candidate.impactParameter1(), candidate.impactParameterNormalised1(), candidate.impactParameter2(), candidate.impactParameterNormalised2(), - candidate.maxNormalisedDeltaIP(), candidate.dcaXiDaughters(), candidate.dcaV0Daughters(), candidate.dcaXYCascToPV(), @@ -584,11 +588,11 @@ struct HfTreeCreatorXicToXiPiPi { // KF-specific columns candidate.kfCascadeChi2(), candidate.kfV0Chi2(), - candidate.chi2TopoXicPlusToPVBefConst(), + candidate.chi2XicPlusToPV(), candidate.chi2TopoXicPlusToPV(), - candidate.chi2PrimXi(), - candidate.chi2PrimPi0(), - candidate.chi2PrimPi1(), + candidate.chi2XiToPV(), + candidate.chi2Pi0ToPV(), + candidate.chi2Pi1ToPV(), candidate.chi2DevPi0Pi1(), candidate.chi2DevPi0Xi(), candidate.chi2DevPi1Xi(), @@ -610,6 +614,7 @@ struct HfTreeCreatorXicToXiPiPi { candidate.ptProng0(), candidate.ptProng1(), candidate.ptProng2(), + candidate.ptBachelorPi(), candidate.invMassXicPlus(), candidate.chi2PCA(), candidate.ct(o2::constants::physics::MassXiCPlus), @@ -625,6 +630,9 @@ struct HfTreeCreatorXicToXiPiPi { candidate.cpaXYLambda(), candidate.cpaLambdaToXi(), candidate.cpaXYLambdaToXi(), + candidate.radiusLambda(), + candidate.invMassXi(), + candidate.invMassLambda(), candidate.impactParameter0(), candidate.impactParameterNormalised0(), candidate.impactParameter1(), @@ -640,10 +648,8 @@ struct HfTreeCreatorXicToXiPiPi { candidate.dcaPosToPV(), candidate.dcaNegToPV(), // additional columns only stored in the full candidate table - candidate.invMassXi(), candidate.invMassXiPi0(), candidate.invMassXiPi1(), - candidate.invMassLambda(), candidate.p(), candidate.pProng1(), candidate.pProng2(), @@ -664,11 +670,11 @@ struct HfTreeCreatorXicToXiPiPi { // KF-specific columns candidate.kfCascadeChi2(), candidate.kfV0Chi2(), - candidate.chi2TopoXicPlusToPVBefConst(), + candidate.chi2XicPlusToPV(), candidate.chi2TopoXicPlusToPV(), - candidate.chi2PrimXi(), - candidate.chi2PrimPi0(), - candidate.chi2PrimPi1(), + candidate.chi2XiToPV(), + candidate.chi2Pi0ToPV(), + candidate.chi2Pi1ToPV(), candidate.chi2DevPi0Pi1(), candidate.chi2DevPi0Xi(), candidate.chi2DevPi1Xi(),