Skip to content

Commit

Permalink
Merge branch 'main' into feat-acts-digitization
Browse files Browse the repository at this point in the history
  • Loading branch information
asalzburger authored Jan 9, 2025
2 parents b51db1f + 4d37131 commit 12e7460
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 17 deletions.
49 changes: 36 additions & 13 deletions Core/include/Acts/Utilities/TrackHelpers.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -412,9 +412,10 @@ void calculateTrackQuantities(track_proxy_t track)
/// @param trimHoles whether to trim holes
/// @param trimOutliers whether to trim outliers
/// @param trimMaterial whether to trim pure material states
/// @param trimOtherNoneMeasurement whether to trim other, non measurement, states
template <TrackProxyConcept track_proxy_t>
void trimTrackFront(track_proxy_t track, bool trimHoles, bool trimOutliers,
bool trimMaterial)
bool trimMaterial, bool trimOtherNoneMeasurement)
requires(!track_proxy_t::ReadOnly)
{
using TrackStateProxy = typename track_proxy_t::TrackStateProxy;
Expand All @@ -425,14 +426,23 @@ void trimTrackFront(track_proxy_t track, bool trimHoles, bool trimOutliers,

for (TrackStateProxy trackState : track.trackStatesReversed()) {
TrackStateType typeFlags = trackState.typeFlags();
if (trimHoles && typeFlags.test(TrackStateFlag::HoleFlag)) {
bool isHole = typeFlags.test(TrackStateFlag::HoleFlag);
bool isOutlier = typeFlags.test(TrackStateFlag::OutlierFlag);
bool isMaterial = typeFlags.test(TrackStateFlag::MaterialFlag) &&
!typeFlags.test(TrackStateFlag::MeasurementFlag);
bool isOtherNoneMeasurement =
!typeFlags.test(TrackStateFlag::MeasurementFlag) && !isHole &&
!isOutlier && !isMaterial;
if (trimHoles && isHole) {
continue;
}
if (trimOutliers && typeFlags.test(TrackStateFlag::OutlierFlag)) {
if (trimOutliers && isOutlier) {
continue;
}
if (trimMaterial && typeFlags.test(TrackStateFlag::MaterialFlag) &&
!typeFlags.test(TrackStateFlag::MeasurementFlag)) {
if (trimMaterial && isMaterial) {
continue;
}
if (trimOtherNoneMeasurement && isOtherNoneMeasurement) {
continue;
}

Expand All @@ -450,9 +460,10 @@ void trimTrackFront(track_proxy_t track, bool trimHoles, bool trimOutliers,
/// @param trimHoles whether to trim holes
/// @param trimOutliers whether to trim outliers
/// @param trimMaterial whether to trim pure material states
/// @param trimOtherNoneMeasurement whether to trim other, non measurement, states
template <TrackProxyConcept track_proxy_t>
void trimTrackBack(track_proxy_t track, bool trimHoles, bool trimOutliers,
bool trimMaterial)
bool trimMaterial, bool trimOtherNoneMeasurement)
requires(!track_proxy_t::ReadOnly)
{
using TrackStateProxy = typename track_proxy_t::TrackStateProxy;
Expand All @@ -463,14 +474,23 @@ void trimTrackBack(track_proxy_t track, bool trimHoles, bool trimOutliers,
back = trackState;

TrackStateType typeFlags = trackState.typeFlags();
if (trimHoles && typeFlags.test(TrackStateFlag::HoleFlag)) {
bool isHole = typeFlags.test(TrackStateFlag::HoleFlag);
bool isOutlier = typeFlags.test(TrackStateFlag::OutlierFlag);
bool isMaterial = typeFlags.test(TrackStateFlag::MaterialFlag) &&
!typeFlags.test(TrackStateFlag::MeasurementFlag);
bool isOtherNoneMeasurement =
!typeFlags.test(TrackStateFlag::MeasurementFlag) && !isHole &&
!isOutlier && !isMaterial;
if (trimHoles && isHole) {
continue;
}
if (trimOutliers && isOutlier) {
continue;
}
if (trimOutliers && typeFlags.test(TrackStateFlag::OutlierFlag)) {
if (trimMaterial && isMaterial) {
continue;
}
if (trimMaterial && typeFlags.test(TrackStateFlag::MaterialFlag) &&
!typeFlags.test(TrackStateFlag::MeasurementFlag)) {
if (trimOtherNoneMeasurement && isOtherNoneMeasurement) {
continue;
}

Expand All @@ -488,13 +508,16 @@ void trimTrackBack(track_proxy_t track, bool trimHoles, bool trimOutliers,
/// @param trimHoles whether to trim holes
/// @param trimOutliers whether to trim outliers
/// @param trimMaterial whether to trim pure material states
/// @param trimOtherNoneMeasurement whether to trim other, non measurement, states
template <TrackProxyConcept track_proxy_t>
void trimTrack(track_proxy_t track, bool trimHoles, bool trimOutliers,
bool trimMaterial)
bool trimMaterial, bool trimOtherNoneMeasurement)
requires(!track_proxy_t::ReadOnly)
{
trimTrackFront(track, trimHoles, trimOutliers, trimMaterial);
trimTrackBack(track, trimHoles, trimOutliers, trimMaterial);
trimTrackFront(track, trimHoles, trimOutliers, trimMaterial,
trimOtherNoneMeasurement);
trimTrackBack(track, trimHoles, trimOutliers, trimMaterial,
trimOtherNoneMeasurement);
}

/// Helper function to calculate the predicted residual and its covariance
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -421,7 +421,7 @@ ProcessCode TrackFindingAlgorithm::execute(const AlgorithmContext& ctx) const {

// trim the track if requested
if (m_cfg.trimTracks) {
Acts::trimTrack(track, true, true, true);
Acts::trimTrack(track, true, true, true, true);
}
Acts::calculateTrackQuantities(track);

Expand Down
12 changes: 9 additions & 3 deletions Tests/UnitTests/Core/Utilities/TrackHelpersTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ BOOST_AUTO_TEST_CASE(CalculateQuantities) {
BOOST_AUTO_TEST_CASE(TrimTrack) {
TrackContainer tc{VectorTrackContainer{}, VectorMultiTrajectory{}};
auto t = createTestTrack(tc, std::vector<std::vector<TrackStateFlag>>{
{},
{HoleFlag},
{MeasurementFlag},
{OutlierFlag},
Expand All @@ -98,34 +99,39 @@ BOOST_AUTO_TEST_CASE(TrimTrack) {
{HoleFlag},
{MeasurementFlag},
{OutlierFlag},
{},
});

calculateTrackQuantities(t);

BOOST_CHECK_EQUAL(t.nTrackStates(), 11);
BOOST_CHECK_EQUAL(t.nHoles(), 3);
BOOST_CHECK_EQUAL(t.nMeasurements(), 3);
BOOST_CHECK_EQUAL(t.nOutliers(), 3);
BOOST_CHECK_EQUAL(t.nSharedHits(), 1);

trimTrackFront(t, true, true, true);
trimTrackFront(t, true, true, true, true);
calculateTrackQuantities(t);

BOOST_CHECK_EQUAL(t.nTrackStates(), 9);
BOOST_CHECK_EQUAL(t.nHoles(), 2);
BOOST_CHECK_EQUAL(t.nMeasurements(), 3);
BOOST_CHECK_EQUAL(t.nOutliers(), 3);
BOOST_CHECK_EQUAL(t.nSharedHits(), 1);

trimTrackBack(t, true, true, true);
trimTrackBack(t, true, true, true, true);
calculateTrackQuantities(t);

BOOST_CHECK_EQUAL(t.nTrackStates(), 7);
BOOST_CHECK_EQUAL(t.nHoles(), 2);
BOOST_CHECK_EQUAL(t.nMeasurements(), 3);
BOOST_CHECK_EQUAL(t.nOutliers(), 2);
BOOST_CHECK_EQUAL(t.nSharedHits(), 1);

trimTrack(t, true, true, true);
trimTrack(t, true, true, true, true);
calculateTrackQuantities(t);

BOOST_CHECK_EQUAL(t.nTrackStates(), 7);
BOOST_CHECK_EQUAL(t.nHoles(), 2);
BOOST_CHECK_EQUAL(t.nMeasurements(), 3);
BOOST_CHECK_EQUAL(t.nOutliers(), 2);
Expand Down

0 comments on commit 12e7460

Please sign in to comment.