12 template <
typename propagator_t,
typename propagator_options_t>
19 propagator_options_t pOptions(gctx, mctx);
23 pOptions.targetTolerance =
m_cfg.targetTolerance;
31 .intersect(gctx, params.position(gctx), params.direction(),
false)
39 Direction::fromScalarZeroAsPositive(intersection.pathLength());
42 auto result =
m_cfg.propagator->propagate(params, perigeeSurface, pOptions);
43 if (not result.ok()) {
44 return result.error();
49 const auto& endParams = *result->endParameters;
55 auto pos = endParams.position(gctx);
59 pca[
eTime] = endParams.time();
78 ActsScalar m0 = params.particleHypothesis().mass();
80 ActsScalar p = params.particleHypothesis().extractMomentum(qOvP);
88 Vector3 momentumAtPCA(phi, theta, qOvP);
91 ActsScalar absoluteCharge = params.particleHypothesis().absoluteCharge();
102 ActsMatrix<eBoundSize, eLinSize> completeJacobian =
108 if (absoluteCharge == 0. or Bz == 0.) {
145 ActsScalar X = pca(0) - perigeeSurface.center(gctx).x() + rho * sinPhi;
146 ActsScalar Y = pca(1) - perigeeSurface.center(gctx).y() - rho * cosPhi;
194 ActsMatrix<eBoundSize, eLinPosSize> positionJacobian =
196 ActsMatrix<eBoundSize, eLinMomSize> momentumJacobian =
201 paramsAtPCA - positionJacobian * pca - momentumJacobian * momentumAtPCA;
207 linPoint.head<3>() = perigeeSurface.center(gctx);
208 linPoint[3] = linPointTime;
210 return LinearizedTrack(paramsAtPCA, parCovarianceAtPCA, weightAtPCA, linPoint,
211 positionJacobian, momentumJacobian, pca, momentumAtPCA,