From 73c6a33872ef1b77b7deafa7635bebf28aa6f1e8 Mon Sep 17 00:00:00 2001 From: romainschotter Date: Fri, 28 Nov 2025 14:29:56 +0100 Subject: [PATCH 1/7] Consider propagation of Tracks + add method to calculate DCA without propagation --- Common/Tools/TrackPropagationModule.h | 172 +++++++++++++++++++------- 1 file changed, 128 insertions(+), 44 deletions(-) diff --git a/Common/Tools/TrackPropagationModule.h b/Common/Tools/TrackPropagationModule.h index 22474641354..755a121c7dc 100644 --- a/Common/Tools/TrackPropagationModule.h +++ b/Common/Tools/TrackPropagationModule.h @@ -272,58 +272,81 @@ class TrackPropagationModule // std::array trackPxPyPzTuned = {0.0, 0.0, 0.0}; double q2OverPtNew = -9999.; // Only propagate tracks which have passed the innermost wall of the TPC (e.g. skipping loopers etc). Others fill unpropagated. - if (track.trackType() == o2::aod::track::TrackIU && track.x() < cGroup.minPropagationRadius.value) { - if (fillTracksCov) { - if constexpr (isMc) { // checking MC and fillCovMat block begins - // bool hasMcParticle = track.has_mcParticle(); - if (cGroup.useTrackTuner.value) { - trackTunedTracks->Fill(1); // all tracks - bool hasMcParticle = track.has_mcParticle(); - if (hasMcParticle) { - auto mcParticle = track.mcParticle(); - trackTunerObj.tuneTrackParams(mcParticle, mTrackParCov, matCorr, &mDcaInfoCov, trackTunedTracks); - q2OverPtNew = mTrackParCov.getQ2Pt(); + if (track.x() < cGroup.minPropagationRadius.value) { + if (track.trackType() == o2::aod::track::TrackIU) { + if (fillTracksCov) { + if constexpr (isMc) { // checking MC and fillCovMat block begins + // bool hasMcParticle = track.has_mcParticle(); + if (cGroup.useTrackTuner.value) { + trackTunedTracks->Fill(1); // all tracks + bool hasMcParticle = track.has_mcParticle(); + if (hasMcParticle) { + auto mcParticle = track.mcParticle(); + trackTunerObj.tuneTrackParams(mcParticle, mTrackParCov, matCorr, &mDcaInfoCov, trackTunedTracks); + q2OverPtNew = mTrackParCov.getQ2Pt(); + } } + } // MC and fillCovMat block ends + } + bool isPropagationOK = true; + + if (track.has_collision()) { + auto const& collision = collisions.rawIteratorAt(track.collisionId()); + if (fillTracksCov) { + mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()}); + mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ()); + isPropagationOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, mTrackParCov, 2.f, matCorr, &mDcaInfoCov); + } else { + isPropagationOK = o2::base::Propagator::Instance()->propagateToDCABxByBz({collision.posX(), collision.posY(), collision.posZ()}, mTrackPar, 2.f, matCorr, &mDcaInfo); } - } // MC and fillCovMat block ends - } - bool isPropagationOK = true; - - if (track.has_collision()) { - auto const& collision = collisions.rawIteratorAt(track.collisionId()); - if (fillTracksCov) { - mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()}); - mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ()); - isPropagationOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, mTrackParCov, 2.f, matCorr, &mDcaInfoCov); } else { - isPropagationOK = o2::base::Propagator::Instance()->propagateToDCABxByBz({collision.posX(), collision.posY(), collision.posZ()}, mTrackPar, 2.f, matCorr, &mDcaInfo); + if (fillTracksCov) { + mVtx.setPos({ccdbLoader.mMeanVtx->getX(), ccdbLoader.mMeanVtx->getY(), ccdbLoader.mMeanVtx->getZ()}); + mVtx.setCov(ccdbLoader.mMeanVtx->getSigmaX() * ccdbLoader.mMeanVtx->getSigmaX(), 0.0f, ccdbLoader.mMeanVtx->getSigmaY() * ccdbLoader.mMeanVtx->getSigmaY(), 0.0f, 0.0f, ccdbLoader.mMeanVtx->getSigmaZ() * ccdbLoader.mMeanVtx->getSigmaZ()); + isPropagationOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, mTrackParCov, 2.f, matCorr, &mDcaInfoCov); + } else { + isPropagationOK = o2::base::Propagator::Instance()->propagateToDCABxByBz({ccdbLoader.mMeanVtx->getX(), ccdbLoader.mMeanVtx->getY(), ccdbLoader.mMeanVtx->getZ()}, mTrackPar, 2.f, matCorr, &mDcaInfo); + } } - } else { + if (isPropagationOK) { + trackType = o2::aod::track::Track; + } + // filling some QA histograms for track tuner test purpose if (fillTracksCov) { - mVtx.setPos({ccdbLoader.mMeanVtx->getX(), ccdbLoader.mMeanVtx->getY(), ccdbLoader.mMeanVtx->getZ()}); - mVtx.setCov(ccdbLoader.mMeanVtx->getSigmaX() * ccdbLoader.mMeanVtx->getSigmaX(), 0.0f, ccdbLoader.mMeanVtx->getSigmaY() * ccdbLoader.mMeanVtx->getSigmaY(), 0.0f, 0.0f, ccdbLoader.mMeanVtx->getSigmaZ() * ccdbLoader.mMeanVtx->getSigmaZ()); - isPropagationOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, mTrackParCov, 2.f, matCorr, &mDcaInfoCov); - } else { - isPropagationOK = o2::base::Propagator::Instance()->propagateToDCABxByBz({ccdbLoader.mMeanVtx->getX(), ccdbLoader.mMeanVtx->getY(), ccdbLoader.mMeanVtx->getZ()}, mTrackPar, 2.f, matCorr, &mDcaInfo); + if constexpr (isMc) { // checking MC and fillCovMat block begins + if (track.has_mcParticle() && isPropagationOK) { + auto mcParticle1 = track.mcParticle(); + // && abs(mcParticle1.pdgCode())==211 + if (mcParticle1.isPhysicalPrimary()) { + registry.fill(HIST("hDCAxyVsPtRec"), mDcaInfoCov.getY(), mTrackParCov.getPt()); + registry.fill(HIST("hDCAxyVsPtMC"), mDcaInfoCov.getY(), mcParticle1.pt()); + registry.fill(HIST("hDCAzVsPtRec"), mDcaInfoCov.getZ(), mTrackParCov.getPt()); + registry.fill(HIST("hDCAzVsPtMC"), mDcaInfoCov.getZ(), mcParticle1.pt()); + } + } + } // MC and fillCovMat block ends } - } - if (isPropagationOK) { - trackType = o2::aod::track::Track; - } - // filling some QA histograms for track tuner test purpose - if (fillTracksCov) { - if constexpr (isMc) { // checking MC and fillCovMat block begins - if (track.has_mcParticle() && isPropagationOK) { - auto mcParticle1 = track.mcParticle(); - // && abs(mcParticle1.pdgCode())==211 - if (mcParticle1.isPhysicalPrimary()) { - registry.fill(HIST("hDCAxyVsPtRec"), mDcaInfoCov.getY(), mTrackParCov.getPt()); - registry.fill(HIST("hDCAxyVsPtMC"), mDcaInfoCov.getY(), mcParticle1.pt()); - registry.fill(HIST("hDCAzVsPtRec"), mDcaInfoCov.getZ(), mTrackParCov.getPt()); - registry.fill(HIST("hDCAzVsPtMC"), mDcaInfoCov.getZ(), mcParticle1.pt()); + } else { + if (fillTracksDCA || fillTracksDCACov) { + if (track.has_collision()) { + auto const& collision = collisions.rawIteratorAt(track.collisionId()); + mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()}); + if (fillTracksDCACov) { + mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ()); + } + } else { + mVtx.setPos({ccdbLoader.mMeanVtx->getX(), ccdbLoader.mMeanVtx->getY(), ccdbLoader.mMeanVtx->getZ()}); + if (fillTracksDCACov) { + mVtx.setCov(ccdbLoader.mMeanVtx->getSigmaX() * ccdbLoader.mMeanVtx->getSigmaX(), 0.0f, ccdbLoader.mMeanVtx->getSigmaY() * ccdbLoader.mMeanVtx->getSigmaY(), 0.0f, 0.0f, ccdbLoader.mMeanVtx->getSigmaZ() * ccdbLoader.mMeanVtx->getSigmaZ()); } } - } // MC and fillCovMat block ends + + if (fillTracksDCACov) { + calculateDCA(mTrackParCov, mVtx, o2::base::Propagator::Instance()->getNominalBz(), &mDcaInfoCov, 999.f); + } else { + calculateDCA(mTrackPar, mVtx, o2::base::Propagator::Instance()->getNominalBz(), &mDcaInfo, 999.f); + } + } } } // Filling modified Q/Pt values at IU/production point by track tuner in track tuner table @@ -356,6 +379,67 @@ class TrackPropagationModule } } } + + //_______________________________________________________________________ + // TTrackPar type: either aod::TrackPar or aod::TrackParCov + // TVertex type: either math_utils::Point3D or o2::dataformats::VertexBase + // TDCA type: either dim2_t or o2::dataformats::DCA + template + bool calculateDCA(TTrackPar trackPar, const TVertex& vtx, double b, TDCA* dca, double maxD) + { + // propagate track to DCA to the vertex + double sn, cs, alp = trackPar.getAlpha(); + o2::math_utils::detail::sincos(alp, sn, cs); + double x = trackPar.getX(), y = trackPar.getY(), snp = trackPar.getSnp(), csp = gpu::CAMath::Sqrt((1.f - snp) * (1.f + snp)); + double xv = vtx.getX() * cs + vtx.getY() * sn, yv = -vtx.getX() * sn + vtx.getY() * cs, zv = vtx.getZ(); + x -= xv; + y -= yv; + // Estimate the impact parameter neglecting the track curvature + double d = gpu::CAMath::Abs(x * snp - y * csp); + if (d > maxD) { + // provide default DCA for failed propag + if constexpr (requires { trackPar.getSigmaY2(); vtx.getSigmaX2(); }) { + dca->set(o2::track::DefaultDCA, o2::track::DefaultDCA, + o2::track::DefaultDCACov, o2::track::DefaultDCACov, o2::track::DefaultDCACov); + } else { + (*dca)[0] = o2::track::DefaultDCA; + (*dca)[1] = o2::track::DefaultDCA; + } + return false; + } + double crv = trackPar.getCurvature(b); + double tgfv = -(crv * x - snp) / (crv * y + csp); + sn = tgfv / gpu::CAMath::Sqrt(1.f + tgfv * tgfv); + cs = gpu::CAMath::Sqrt((1.f - sn) * (1.f + sn)); + cs = (gpu::CAMath::Abs(tgfv) > constants::math::Almost0) ? sn / tgfv : constants::math::Almost1; + + x = xv * cs + yv * sn; + yv = -xv * sn + yv * cs; + xv = x; + + alp += gpu::CAMath::ASin(sn); + if (!trackPar.rotate(alp)) { + // provide default DCA for failed propag + if constexpr (requires { trackPar.getSigmaY2(); vtx.getSigmaX2(); }) { + dca->set(o2::track::DefaultDCA, o2::track::DefaultDCA, + o2::track::DefaultDCACov, o2::track::DefaultDCACov, o2::track::DefaultDCACov); + } else { + (*dca)[0] = o2::track::DefaultDCA; + (*dca)[1] = o2::track::DefaultDCA; + } + + return false; + } + if constexpr (requires { trackPar.getSigmaY2(); vtx.getSigmaX2(); }) { + o2::math_utils::detail::sincos(alp, sn, cs); + auto s2ylocvtx = vtx.getSigmaX2() * sn * sn + vtx.getSigmaY2() * cs * cs - 2. * vtx.getSigmaXY() * cs * sn; + dca->set(trackPar.getY() - yv, trackPar.getZ() - zv, trackPar.getSigmaY2() + s2ylocvtx, trackPar.getSigmaZY(), trackPar.getSigmaZ2() + vtx.getSigmaZ2()); + } else { + (*dca)[0] = trackPar.getY() - yv; + (*dca)[1] = trackPar.getZ() - zv; + } + return true; + } }; } // namespace common From 528c226190d9262fa39de90d8da344b74e02da6c Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Mon, 8 Dec 2025 06:28:06 +0000 Subject: [PATCH 2/7] Please consider the following formatting changes --- Common/Tools/TrackPropagationModule.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Common/Tools/TrackPropagationModule.h b/Common/Tools/TrackPropagationModule.h index 755a121c7dc..02f464d139c 100644 --- a/Common/Tools/TrackPropagationModule.h +++ b/Common/Tools/TrackPropagationModule.h @@ -384,7 +384,7 @@ class TrackPropagationModule // TTrackPar type: either aod::TrackPar or aod::TrackParCov // TVertex type: either math_utils::Point3D or o2::dataformats::VertexBase // TDCA type: either dim2_t or o2::dataformats::DCA - template + template bool calculateDCA(TTrackPar trackPar, const TVertex& vtx, double b, TDCA* dca, double maxD) { // propagate track to DCA to the vertex @@ -400,7 +400,7 @@ class TrackPropagationModule // provide default DCA for failed propag if constexpr (requires { trackPar.getSigmaY2(); vtx.getSigmaX2(); }) { dca->set(o2::track::DefaultDCA, o2::track::DefaultDCA, - o2::track::DefaultDCACov, o2::track::DefaultDCACov, o2::track::DefaultDCACov); + o2::track::DefaultDCACov, o2::track::DefaultDCACov, o2::track::DefaultDCACov); } else { (*dca)[0] = o2::track::DefaultDCA; (*dca)[1] = o2::track::DefaultDCA; From f0dcd440af2ebdbee09f61991963c6f360df62fc Mon Sep 17 00:00:00 2001 From: SCHOTTER Romain <47983209+romainschotter@users.noreply.github.com> Date: Wed, 10 Dec 2025 00:02:45 +0100 Subject: [PATCH 3/7] Add TrackTuner for prepropagated tracks --- Common/Tools/TrackPropagationModule.h | 62 +++++++++++++-------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/Common/Tools/TrackPropagationModule.h b/Common/Tools/TrackPropagationModule.h index 02f464d139c..17fa810fd9a 100644 --- a/Common/Tools/TrackPropagationModule.h +++ b/Common/Tools/TrackPropagationModule.h @@ -271,25 +271,25 @@ class TrackPropagationModule // std::array trackPxPyPz; // std::array trackPxPyPzTuned = {0.0, 0.0, 0.0}; double q2OverPtNew = -9999.; + bool isPropagationOK = true; // Only propagate tracks which have passed the innermost wall of the TPC (e.g. skipping loopers etc). Others fill unpropagated. if (track.x() < cGroup.minPropagationRadius.value) { - if (track.trackType() == o2::aod::track::TrackIU) { - if (fillTracksCov) { - if constexpr (isMc) { // checking MC and fillCovMat block begins - // bool hasMcParticle = track.has_mcParticle(); - if (cGroup.useTrackTuner.value) { - trackTunedTracks->Fill(1); // all tracks - bool hasMcParticle = track.has_mcParticle(); - if (hasMcParticle) { - auto mcParticle = track.mcParticle(); - trackTunerObj.tuneTrackParams(mcParticle, mTrackParCov, matCorr, &mDcaInfoCov, trackTunedTracks); - q2OverPtNew = mTrackParCov.getQ2Pt(); - } + if (fillTracksCov) { + if constexpr (isMc) { // checking MC and fillCovMat block begins + // bool hasMcParticle = track.has_mcParticle(); + if (cGroup.useTrackTuner.value) { + trackTunedTracks->Fill(1); // all tracks + bool hasMcParticle = track.has_mcParticle(); + if (hasMcParticle) { + auto mcParticle = track.mcParticle(); + trackTunerObj.tuneTrackParams(mcParticle, mTrackParCov, matCorr, &mDcaInfoCov, trackTunedTracks); + q2OverPtNew = mTrackParCov.getQ2Pt(); } - } // MC and fillCovMat block ends - } - bool isPropagationOK = true; - + } + } // MC and fillCovMat block ends + } + + if (track.trackType() == o2::aod::track::TrackIU) { if (track.has_collision()) { auto const& collision = collisions.rawIteratorAt(track.collisionId()); if (fillTracksCov) { @@ -311,21 +311,6 @@ class TrackPropagationModule if (isPropagationOK) { trackType = o2::aod::track::Track; } - // filling some QA histograms for track tuner test purpose - if (fillTracksCov) { - if constexpr (isMc) { // checking MC and fillCovMat block begins - if (track.has_mcParticle() && isPropagationOK) { - auto mcParticle1 = track.mcParticle(); - // && abs(mcParticle1.pdgCode())==211 - if (mcParticle1.isPhysicalPrimary()) { - registry.fill(HIST("hDCAxyVsPtRec"), mDcaInfoCov.getY(), mTrackParCov.getPt()); - registry.fill(HIST("hDCAxyVsPtMC"), mDcaInfoCov.getY(), mcParticle1.pt()); - registry.fill(HIST("hDCAzVsPtRec"), mDcaInfoCov.getZ(), mTrackParCov.getPt()); - registry.fill(HIST("hDCAzVsPtMC"), mDcaInfoCov.getZ(), mcParticle1.pt()); - } - } - } // MC and fillCovMat block ends - } } else { if (fillTracksDCA || fillTracksDCACov) { if (track.has_collision()) { @@ -348,6 +333,21 @@ class TrackPropagationModule } } } + // filling some QA histograms for track tuner test purpose + if (fillTracksCov) { + if constexpr (isMc) { // checking MC and fillCovMat block begins + if (track.has_mcParticle() && isPropagationOK) { + auto mcParticle1 = track.mcParticle(); + // && abs(mcParticle1.pdgCode())==211 + if (mcParticle1.isPhysicalPrimary()) { + registry.fill(HIST("hDCAxyVsPtRec"), mDcaInfoCov.getY(), mTrackParCov.getPt()); + registry.fill(HIST("hDCAxyVsPtMC"), mDcaInfoCov.getY(), mcParticle1.pt()); + registry.fill(HIST("hDCAzVsPtRec"), mDcaInfoCov.getZ(), mTrackParCov.getPt()); + registry.fill(HIST("hDCAzVsPtMC"), mDcaInfoCov.getZ(), mcParticle1.pt()); + } + } + } // MC and fillCovMat block ends + } } // Filling modified Q/Pt values at IU/production point by track tuner in track tuner table if (cGroup.useTrackTuner.value && cGroup.fillTrackTunerTable.value) { From 59823f339d5bb4be51e63d569ff9a5cf2d3c3e05 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Tue, 9 Dec 2025 23:03:16 +0000 Subject: [PATCH 4/7] Please consider the following formatting changes --- Common/Tools/TrackPropagationModule.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/Tools/TrackPropagationModule.h b/Common/Tools/TrackPropagationModule.h index 17fa810fd9a..4b4bd80dc5d 100644 --- a/Common/Tools/TrackPropagationModule.h +++ b/Common/Tools/TrackPropagationModule.h @@ -288,7 +288,7 @@ class TrackPropagationModule } } // MC and fillCovMat block ends } - + if (track.trackType() == o2::aod::track::TrackIU) { if (track.has_collision()) { auto const& collision = collisions.rawIteratorAt(track.collisionId()); From fda90eb4a5579c3070504ce5233ee33fe85e7d93 Mon Sep 17 00:00:00 2001 From: SCHOTTER Romain <47983209+romainschotter@users.noreply.github.com> Date: Wed, 10 Dec 2025 10:43:32 +0100 Subject: [PATCH 5/7] Pass TrackPar by reference in calculateDCA --- Common/Tools/TrackPropagationModule.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/Tools/TrackPropagationModule.h b/Common/Tools/TrackPropagationModule.h index 4b4bd80dc5d..68e5cabfa8e 100644 --- a/Common/Tools/TrackPropagationModule.h +++ b/Common/Tools/TrackPropagationModule.h @@ -385,7 +385,7 @@ class TrackPropagationModule // TVertex type: either math_utils::Point3D or o2::dataformats::VertexBase // TDCA type: either dim2_t or o2::dataformats::DCA template - bool calculateDCA(TTrackPar trackPar, const TVertex& vtx, double b, TDCA* dca, double maxD) + bool calculateDCA(TTrackPar& trackPar, const TVertex& vtx, double b, TDCA* dca, double maxD) { // propagate track to DCA to the vertex double sn, cs, alp = trackPar.getAlpha(); From f2d6b2be858b09622f33f6f089fffd9ba64eadc4 Mon Sep 17 00:00:00 2001 From: romainschotter Date: Sat, 13 Dec 2025 00:14:44 +0100 Subject: [PATCH 6/7] Add propagation to PV for preprogated tracks if track tuner used --- Common/Tools/TrackPropagationModule.h | 41 +++++++++++++-------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/Common/Tools/TrackPropagationModule.h b/Common/Tools/TrackPropagationModule.h index 68e5cabfa8e..6bdedcb17a7 100644 --- a/Common/Tools/TrackPropagationModule.h +++ b/Common/Tools/TrackPropagationModule.h @@ -312,19 +312,30 @@ class TrackPropagationModule trackType = o2::aod::track::Track; } } else { - if (fillTracksDCA || fillTracksDCACov) { + if (fillTracksCov || fillTracksDCA || fillTracksDCACov) { if (track.has_collision()) { auto const& collision = collisions.rawIteratorAt(track.collisionId()); mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()}); - if (fillTracksDCACov) { + if (fillTracksCov || fillTracksDCACov) { mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ()); } } else { mVtx.setPos({ccdbLoader.mMeanVtx->getX(), ccdbLoader.mMeanVtx->getY(), ccdbLoader.mMeanVtx->getZ()}); - if (fillTracksDCACov) { + if (fillTracksCov || fillTracksDCACov) { mVtx.setCov(ccdbLoader.mMeanVtx->getSigmaX() * ccdbLoader.mMeanVtx->getSigmaX(), 0.0f, ccdbLoader.mMeanVtx->getSigmaY() * ccdbLoader.mMeanVtx->getSigmaY(), 0.0f, 0.0f, ccdbLoader.mMeanVtx->getSigmaZ() * ccdbLoader.mMeanVtx->getSigmaZ()); } } + if (fillTracksCov) { + if constexpr (isMc) { // checking MC and fillCovMat block begins + if (cGroup.useTrackTuner.value) { + bool hasMcParticle = track.has_mcParticle(); + if (hasMcParticle) { + isPropagationOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, mTrackParCov, 2.f, matCorr, &mDcaInfoCov); + } + } + } // MC and fillCovMat block ends + } + if (fillTracksDCACov) { calculateDCA(mTrackParCov, mVtx, o2::base::Propagator::Instance()->getNominalBz(), &mDcaInfoCov, 999.f); @@ -388,27 +399,15 @@ class TrackPropagationModule bool calculateDCA(TTrackPar& trackPar, const TVertex& vtx, double b, TDCA* dca, double maxD) { // propagate track to DCA to the vertex - double sn, cs, alp = trackPar.getAlpha(); + float sn, cs, alp = trackPar.getAlpha(); o2::math_utils::detail::sincos(alp, sn, cs); - double x = trackPar.getX(), y = trackPar.getY(), snp = trackPar.getSnp(), csp = gpu::CAMath::Sqrt((1.f - snp) * (1.f + snp)); - double xv = vtx.getX() * cs + vtx.getY() * sn, yv = -vtx.getX() * sn + vtx.getY() * cs, zv = vtx.getZ(); + float x = trackPar.getX(), y = trackPar.getY(), snp = trackPar.getSnp(), csp = gpu::CAMath::Sqrt((1.f - snp) * (1.f + snp)); + float xv = vtx.getX() * cs + vtx.getY() * sn, yv = -vtx.getX() * sn + vtx.getY() * cs, zv = vtx.getZ(); x -= xv; y -= yv; - // Estimate the impact parameter neglecting the track curvature - double d = gpu::CAMath::Abs(x * snp - y * csp); - if (d > maxD) { - // provide default DCA for failed propag - if constexpr (requires { trackPar.getSigmaY2(); vtx.getSigmaX2(); }) { - dca->set(o2::track::DefaultDCA, o2::track::DefaultDCA, - o2::track::DefaultDCACov, o2::track::DefaultDCACov, o2::track::DefaultDCACov); - } else { - (*dca)[0] = o2::track::DefaultDCA; - (*dca)[1] = o2::track::DefaultDCA; - } - return false; - } - double crv = trackPar.getCurvature(b); - double tgfv = -(crv * x - snp) / (crv * y + csp); + + float crv = trackPar.getCurvature(b); + float tgfv = -(crv * x - snp) / (crv * y + csp); sn = tgfv / gpu::CAMath::Sqrt(1.f + tgfv * tgfv); cs = gpu::CAMath::Sqrt((1.f - sn) * (1.f + sn)); cs = (gpu::CAMath::Abs(tgfv) > constants::math::Almost0) ? sn / tgfv : constants::math::Almost1; From 23808fc4d2097feb542a24aa9f9b4aecca656a05 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Fri, 12 Dec 2025 23:15:25 +0000 Subject: [PATCH 7/7] Please consider the following formatting changes --- Common/Tools/TrackPropagationModule.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Common/Tools/TrackPropagationModule.h b/Common/Tools/TrackPropagationModule.h index 6bdedcb17a7..86db93eed10 100644 --- a/Common/Tools/TrackPropagationModule.h +++ b/Common/Tools/TrackPropagationModule.h @@ -325,7 +325,7 @@ class TrackPropagationModule mVtx.setCov(ccdbLoader.mMeanVtx->getSigmaX() * ccdbLoader.mMeanVtx->getSigmaX(), 0.0f, ccdbLoader.mMeanVtx->getSigmaY() * ccdbLoader.mMeanVtx->getSigmaY(), 0.0f, 0.0f, ccdbLoader.mMeanVtx->getSigmaZ() * ccdbLoader.mMeanVtx->getSigmaZ()); } } - if (fillTracksCov) { + if (fillTracksCov) { if constexpr (isMc) { // checking MC and fillCovMat block begins if (cGroup.useTrackTuner.value) { bool hasMcParticle = track.has_mcParticle(); @@ -336,7 +336,6 @@ class TrackPropagationModule } // MC and fillCovMat block ends } - if (fillTracksDCACov) { calculateDCA(mTrackParCov, mVtx, o2::base::Propagator::Instance()->getNominalBz(), &mDcaInfoCov, 999.f); } else {