From cc26f9fa77cb7cffebeaa7f8b4905107ae4f12ec Mon Sep 17 00:00:00 2001
From: christos <christos@cern.ch>
Date: Fri, 14 Aug 2020 01:40:59 +0200
Subject: [PATCH] GsfMeasurementUpdator:Remove un-needed allocations

---
 .../GsfMeasurementUpdator.h                   |  2 +-
 .../src/GsfMeasurementUpdator.cxx             | 24 +++++++------------
 2 files changed, 10 insertions(+), 16 deletions(-)

diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfMeasurementUpdator.h b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfMeasurementUpdator.h
index d2ff4e48829f..9ef3829768da 100644
--- a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfMeasurementUpdator.h
+++ b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfMeasurementUpdator.h
@@ -49,7 +49,7 @@ private:
   MultiComponentState calculateFilterStep(
     MultiComponentState&&,
     const MeasurementBase&,
-    std::unique_ptr<FitQualityOnSurface>& fitQoS) const;
+    FitQualityOnSurface& fitQoS) const;
 
   bool invalidComponent(const Trk::TrackParameters* trackParameters) const;
 
diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMeasurementUpdator.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMeasurementUpdator.cxx
index bc984b9e41c1..a9499f21b060 100644
--- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMeasurementUpdator.cxx
+++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMeasurementUpdator.cxx
@@ -170,7 +170,7 @@ Trk::GsfMeasurementUpdator::update(
       rebuildState(std::move(stateBeforeUpdate));
     // Perform the measurement update with the modified state
     updatedState = calculateFilterStep(
-      std::move(stateWithInsertedErrors), measurement, fitQoS);
+      std::move(stateWithInsertedErrors), measurement, *fitQoS);
     if (updatedState.empty()) {
       fitQoS.reset();
       return {};
@@ -180,7 +180,7 @@ Trk::GsfMeasurementUpdator::update(
 
   // Perform the measurement update
   updatedState =
-    calculateFilterStep(std::move(stateBeforeUpdate), measurement, fitQoS);
+    calculateFilterStep(std::move(stateBeforeUpdate), measurement, *fitQoS);
 
   if (updatedState.empty()) {
     fitQoS.reset();
@@ -193,7 +193,7 @@ Trk::MultiComponentState
 Trk::GsfMeasurementUpdator::calculateFilterStep(
   Trk::MultiComponentState&& stateBeforeUpdate,
   const Trk::MeasurementBase& measurement,
-  std::unique_ptr<FitQualityOnSurface>& fitQoS) const
+  FitQualityOnSurface& fitQoS) const
 {
   // state Assembler cache
   MultiComponentStateAssembler::Cache cache;
@@ -218,39 +218,33 @@ Trk::GsfMeasurementUpdator::calculateFilterStep(
         std::abs(component.first->parameters()[Trk::qOverP]) > 0.033333) {
       continue;
     }
-    auto componentFitQuality = std::make_unique<Trk::FitQualityOnSurface>();
+    Trk::FitQualityOnSurface componentFitQuality{};
     /// Update the component in place
     bool updateSuccess = m_updator.filterStep(*(component.first),
-                                              *componentFitQuality,
+                                              componentFitQuality,
                                               measurement.localParameters(),
                                               measurement.localCovariance(),
                                               1);
     if (!updateSuccess) {
-      if (componentFitQuality) {
-        componentFitQuality.reset();
-      }
       continue;
     }
 
     if (invalidComponent(component.first.get())) {
-      componentFitQuality.reset();
       continue;
     }
 
-    if (!componentFitQuality || componentFitQuality->chiSquared() <= 0.) {
-      componentFitQuality.reset();
+    if (componentFitQuality.chiSquared() <= 0.) {
       continue;
     }
 
-    double componentChi2 = componentFitQuality->chiSquared();
+    double componentChi2 = componentFitQuality.chiSquared();
     chiSquared += component.second * componentChi2;
 
     // The same measurement is included in each update
     // so we can update the degree of freedom only
     if (degreesOfFreedom == 0.0) {
-      degreesOfFreedom = componentFitQuality->numberDoF();
+      degreesOfFreedom = componentFitQuality.numberDoF();
     }
-    componentFitQuality.reset();
 
     // Add component to state being prepared for assembly
     MultiComponentStateAssembler::addComponent(cache, std::move(component));
@@ -263,7 +257,7 @@ Trk::GsfMeasurementUpdator::calculateFilterStep(
     return {};
   }
 
-  fitQoS = std::make_unique<FitQualityOnSurface>(chiSquared, degreesOfFreedom);
+  fitQoS = FitQualityOnSurface(chiSquared, degreesOfFreedom);
   // Renormalise state
   MultiComponentStateHelpers::renormaliseState(assembledUpdatedState);
   return assembledUpdatedState;
-- 
GitLab