29   const AmgVector(5)& firstParameters = firstTrackParameters->parameters();
 
   30   double const firstWeight = mergeTo.
weight;
 
   33   const AmgVector(5)& secondParameters = secondTrackParameters->parameters();
 
   34   double const secondWeight = addThis.
weight;
 
   37   AmgVector(5) finalParameters(firstParameters);
 
   38   double finalWeight = firstWeight;
 
   40     finalParameters, finalWeight, secondParameters, secondWeight);
 
   45   if (firstMeasuredCov && secondMeasuredCov) {
 
   48         firstParameters, finalMeasuredCov, firstWeight, secondParameters,
 
   49         *secondMeasuredCov, secondWeight);
 
   50     mergeTo.
params->updateParameters(finalParameters, finalMeasuredCov);
 
   51     mergeTo.
weight = finalWeight;
 
   53     mergeTo.
params->updateParameters(finalParameters);
 
   54     mergeTo.
weight = finalWeight;
 
   62     const unsigned int maximumNumberOfComponents) {
 
   64   const int n = statesToMerge.size();
 
   66   for (
int i = 0; 
i < 
n; ++
i) {
 
   67     const AmgSymMatrix(5)* measuredCov = statesToMerge[
i].params->covariance();
 
   72     componentsArray[
i].cov = 
cov;
 
   73     componentsArray[
i].invCov = 
cov > 0 ? 1. / 
cov : 1e10;
 
   74     componentsArray[
i].weight = statesToMerge[
i].weight;
 
   81   const int numMerges = merges.size();
 
   82   for (
int i = 0; 
i < numMerges; ++
i) {
 
   83     const int mini = merges[
i].To;
 
   84     const int minj = merges[
i].From;
 
   85     combineWithWeight(statesToMerge[mini], statesToMerge[minj]);
 
   86     statesToMerge[minj].params.reset();
 
   87     statesToMerge[minj].weight = 0.;
 
   90   for (
auto& state : statesToMerge) {
 
  107       const unsigned int maximumNumberOfComponents) {
 
  111   if (statesToMerge.size() <= maximumNumberOfComponents) {
 
  118   bool componentWithoutMeasurement = 
false;
 
  119   Trk::MultiComponentState::const_iterator component = statesToMerge.cbegin();
 
  120   for (; component != statesToMerge.cend(); ++component) {
 
  121     if (!component->params->covariance()) {
 
  122       componentWithoutMeasurement = 
true;
 
  126   if (componentWithoutMeasurement) {
 
  129         statesToMerge.begin(), statesToMerge.end(),
 
  135     returnMultiState.push_back(std::move(dummyCompParams));
 
  136     return returnMultiState;
 
  139   return mergeFullDistArray(cache, std::move(statesToMerge),maximumNumberOfComponents);
 
  152   unsigned int maximumNumberOfComponents)
 
  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));
 
  205       const AmgVector(5) smootherParams = smootherComponent.params->parameters();
 
  206       const AmgVector(5) forwardParams = forwardsComponent.params->parameters();
 
  207       const AmgSymMatrix(5) summedCovariance = *forwardCov + *smootherCov;
 
  208       const AmgSymMatrix(5) invertedSummedCovariance = summedCovariance.inverse();
 
  209       const AmgSymMatrix(5) K = *forwardCov * invertedSummedCovariance;
 
  210       const AmgVector(5) newParameters = forwardParams + K * (smootherParams - forwardParams);
 
  211       AmgSymMatrix(5) covarianceOfNewParameters = K * (*smootherCov);
 
  213       std::unique_ptr<Trk::TrackParameters> combinedTrackParameters =
 
  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 *
 
  235           std::move(combinedTrackParameters), combinedWeight};
 
  236       combinedMultiState->push_back(std::move(combinedComponent));
 
  242       merge(std::move(*combinedMultiState), maximumNumberOfComponents);