Skip to content

Commit

Permalink
fix: any direction for helical track linearizer [backport #1363 to de…
Browse files Browse the repository at this point in the history
…velop/v19.x] (#1377)

Backport 8639c37 from #1363.
---
Previously the `HelicalTrackLinearizer` assumed that the vertex we are fitting has to be reachable by back propagation. This is not always the case. In this PR we try to estimate the direction in which we will find the vertex and use it for the propagation.

@asalzburger mentioned that it would be good to back propagate from the first measurement of the particle on the track as this will always be "ahead" of the vertex

cc @paulgessinger
  • Loading branch information
acts-project-service authored Aug 4, 2022
1 parent 539017c commit e7510ca
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions Core/include/Acts/Vertexing/HelicalTrackLinearizer.ipp
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,21 @@ Acts::Result<Acts::LinearizedTrack> Acts::
const std::shared_ptr<PerigeeSurface> perigeeSurface =
Surface::makeShared<PerigeeSurface>(linPointPos);

auto intersection = perigeeSurface->intersect(gctx, params.position(gctx),
params.unitDirection(), false);

// Create propagator options
auto logger = getDefaultLogger("HelTrkLinProp", Logging::INFO);
propagator_options_t pOptions(gctx, mctx, LoggerWrapper{*logger});
pOptions.direction = NavigationDirection::Backward;
pOptions.direction = intersection.intersection.pathLength >= 0
? NavigationDirection::Forward
: NavigationDirection::Backward;

const BoundTrackParameters* endParams = nullptr;
// Do the propagation to linPointPos
auto result = m_cfg.propagator->propagate(params, *perigeeSurface, pOptions);
if (result.ok()) {
endParams = (*result).endParameters.get();

} else {
return result.error();
}
Expand Down

0 comments on commit e7510ca

Please sign in to comment.