77 const auto& sp_collection =
seed.sp();
78 if ( sp_collection.size() < 3 )
return std::nullopt;
81 Acts::FreeVector freeParams = useTopSp ?
82 Acts::estimateTrackParamsFromSeed(sp_collection |
std::views::reverse | std::views::take(3),
84 Acts::estimateTrackParamsFromSeed(sp_collection | std::views::take(3),
90 sp_collection2.assign({sp_collection.back(), sp_collection.at(sp_collection.size()/2
ul), sp_collection.front()});
92 sp_collection2.assign({sp_collection.front(), sp_collection.at(sp_collection.size()/2
ul), sp_collection.back()});
93 Acts::FreeVector freeParams2 = Acts::estimateTrackParamsFromSeed(sp_collection2, bField);
94 ATH_MSG_DEBUG(
"update seed p = " << 1.0 / freeParams[Acts::eFreeQOverP] <<
" to " << 1.0 / freeParams2[Acts::eFreeQOverP]);
95 freeParams[Acts::eFreeQOverP] = freeParams2[Acts::eFreeQOverP];
100 freeParams = Acts::reflectFreeParameters(freeParams);
104 Acts::BoundTrackParameters curvilinearParams = Acts::BoundTrackParameters::createCurvilinear(
105 freeParams.segment<4>(Acts::eFreePos0),
106 freeParams.segment<3>(Acts::eFreeDir0),
107 freeParams[Acts::eFreeQOverP],
112 Acts::PropagatorPlainOptions propOptions(geoContext, magFieldContext);
113 propOptions.direction = Acts::Direction::fromScalarZeroAsPositive(
116 freeParams.segment<3>(Acts::eFreePos0),
117 freeParams.segment<3>(Acts::eFreeDir0)
118 ).closest().pathLength());
119 auto boundParamsResult =
m_extrapolator->propagateToSurface(curvilinearParams, surface, propOptions);
120 if (!boundParamsResult.ok()) {
126 Acts::BoundTrackParameters boundParams = *boundParamsResult;
129 Acts::EstimateTrackParamCovarianceConfig covarianceEstimationConfig = {
133 .noTimeVarInflation = 1.0,
135 boundParams.covariance() = Acts::estimateTrackParamCovariance(
136 covarianceEstimationConfig,
137 boundParams.parameters(),