Helper to combine forward with smoother MultiComponentStates.
154 auto combinedMultiState = std::make_unique<Trk::MultiComponentState>();
157 for (
const auto& forwardsComponent : forwardsMultiState) {
158 const AmgSymMatrix(5)* forwardCov = forwardsComponent.params->covariance();
160 for (
const auto& smootherComponent : smootherMultiState) {
161 const AmgSymMatrix(5)* smootherCov = smootherComponent.params->covariance();
164 if (!smootherCov && !forwardCov) {
170 smootherComponent.
params->uniqueClone(), smootherComponent.weight};
171 combinedMultiState->push_back(std::move(smootherComponentOnly));
177 forwardsComponent.
params->uniqueClone(), forwardsComponent.weight};
178 combinedMultiState->push_back(std::move(forwardComponentOnly));
210 const AmgVector(5) newParameters = forwardParams + K * (smootherParams - forwardParams);
211 AmgSymMatrix(5) covarianceOfNewParameters = K * (*smootherCov);
214 (forwardsComponent.
params)
215 ->associatedSurface()
216 .createUniqueTrackParameters(
222 std::move(covarianceOfNewParameters));
227 const AmgVector(5) parametersDiff = forwardParams - smootherParams;
228 double const exponent = parametersDiff.transpose() *
229 invertedSummedCovariance * parametersDiff;
230 double const weightScalingFactor =
exp(-0.5 * exponent);
231 double const combinedWeight = smootherComponent.
weight *
232 forwardsComponent.
weight *
234 Trk::ComponentParameters combinedComponent = {
235 std::move(combinedTrackParameters), combinedWeight};
236 combinedMultiState->push_back(std::move(combinedComponent));
242 merge(std::move(*combinedMultiState), maximumNumberOfComponents);