Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Core/src/Geometry/MultiWireVolumeBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,8 @@ MultiWireVolumeBuilder::createNavigationPolicyFactory() const {
// The indexed grid to be filled from the navigation policy
IndexedSurfacesNavigation<decltype(grid)> indexedGrid(
std::move(grid),
{protoAxisA.getAxisDirection(), protoAxisB.getAxisDirection()});
{protoAxisA.getAxisDirection(), protoAxisB.getAxisDirection()},
m_config.transform.inverse());

TryAllNavigationPolicy::Config tryAllConfig;
tryAllConfig.portals = true;
Expand Down
23 changes: 16 additions & 7 deletions Core/src/Navigation/MultiLayerNavigationPolicy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

#include "Acts/Navigation/MultiLayerNavigationPolicy.hpp"

#include "Acts/Utilities/GridAccessHelpers.hpp"

namespace Acts::Experimental {

MultiLayerNavigationPolicy::MultiLayerNavigationPolicy(
Expand Down Expand Up @@ -38,7 +40,7 @@ void MultiLayerNavigationPolicy::initializeCandidates(
<< m_volume.volumeName());
const Transform3& itransform = m_volume.itransform();
const Vector3 locPosition = itransform * args.position;
const Vector3 locDirection = itransform * args.direction;
const Vector3 locDirection = itransform.linear() * args.direction;

std::vector<Vector2> path = generatePath(locPosition, locDirection);

Expand All @@ -47,13 +49,15 @@ void MultiLayerNavigationPolicy::initializeCandidates(
surfCandidates.reserve(surfaces.size());

for (const auto& pos : path) {
std::vector<std::size_t> indices = m_indexedGrid.grid.atPosition(pos);

// Local access
std::vector<std::size_t> fAccessor = {0u, 1u};
const auto& indices = m_indexedGrid.grid.atPosition(
GridAccessHelpers::accessLocal<GridType>(pos, fAccessor));
std::ranges::transform(indices, std::back_inserter(surfCandidates),
[&](const auto& i) { return &surfaces[i]; });
}

ACTS_VERBOSE("MultiLayerNavigationPolicy Candidates reported"
ACTS_VERBOSE("MultiLayerNavigationPolicy Candidates reported "
<< surfCandidates.size() << " candidates");

// fill the navigation stream with the container
Expand All @@ -70,14 +74,19 @@ std::vector<Vector2> MultiLayerNavigationPolicy::generatePath(
auto maxYIndex = m_indexedGrid.grid.numLocalBins()[1];
Vector3 unitDir = direction.normalized();

// cast the starting position and direction to the correct axis
Vector2 startPoint{
VectorHelpers::cast(startPosition, m_indexedGrid.casts[0]),
VectorHelpers::cast(startPosition, m_indexedGrid.casts[1])};
Vector2 startDir{VectorHelpers::cast(unitDir, m_indexedGrid.casts[0]),
VectorHelpers::cast(unitDir, m_indexedGrid.casts[1])};

for (std::size_t i = 0; i < maxYIndex; i++) {
auto v1 = m_indexedGrid.grid.lowerLeftBinEdge({1, i + 1});
auto v2 = m_indexedGrid.grid.upperRightBinEdge({maxXIndex, i + 1});

auto intersection = Acts::detail::IntersectionHelper2D::intersectSegment(
Vector2(v1[0], v1[1]), Vector2(v2[0], v2[1]),
startPosition.template block<2, 1>(0, 0),
unitDir.template block<2, 1>(0, 0));
Vector2(v1[0], v1[1]), Vector2(v2[0], v2[1]), startPoint, startDir);
if (!intersection.isValid()) {
continue;
}
Expand Down
Loading