From e8f1754e048607e1013dc7261a3b74c5d650aa9d Mon Sep 17 00:00:00 2001
From: christos <christos@cern.ch>
Date: Wed, 21 Oct 2020 21:21:59 +0200
Subject: [PATCH] Gsf Bethe Heitler effect, polynomial simplify a bit the code

---
 .../GsfBetheHeitlerEffects.h                  | 44 ++---------------
 .../src/GsfBetheHeitlerEffects.cxx            | 48 +++++++++----------
 2 files changed, 27 insertions(+), 65 deletions(-)

diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfBetheHeitlerEffects.h b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfBetheHeitlerEffects.h
index f2046ebf685..ff4e94aebb8 100644
--- a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfBetheHeitlerEffects.h
+++ b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfBetheHeitlerEffects.h
@@ -18,7 +18,7 @@
 #include "TrkGaussianSumFilter/GsfConstants.h"
 #include "TrkGaussianSumFilter/IBetheHeitlerEffects.h"
 #include "TrkMultiComponentStateOnSurface/MultiComponentState.h"
-
+#include <array>
 namespace Trk {
 
 class GsfBetheHeitlerEffects
@@ -29,19 +29,6 @@ class GsfBetheHeitlerEffects
 public:
   struct ComponentValues
   {
-    // Default ctors/dtor/assignment operators
-    ComponentValues() = default;
-    ~ComponentValues() = default;
-    ComponentValues(const ComponentValues&) = default;
-    ComponentValues& operator=(const ComponentValues&) = default;
-    ComponentValues(ComponentValues&&) = default;
-    ComponentValues& operator=(ComponentValues&&) = default;
-    // Constructor with arguments
-    ComponentValues(double aWeight, double aMean, double aVariance)
-      : weight(aWeight)
-      , mean(aMean)
-      , variance(aVariance)
-    {}
     double weight;
     double mean;
     double variance;
@@ -51,36 +38,18 @@ public:
     std::array<ComponentValues, GSFConstants::maxNumberofBHComponents>;
 
   /** Helper class for construction and evaluation of polynomial */
-  class Polynomial
+  struct Polynomial
   {
-  public:
-    Polynomial() = default;
-    ~Polynomial() = default;
-    Polynomial(const Polynomial&) = default;
-    Polynomial& operator=(const Polynomial&) = default;
-    Polynomial(Polynomial&&) = default;
-    Polynomial& operator=(Polynomial&&) = default;
-
-    /** Constructor from a vector of coefficients
-     * (in decreasing order of powers of x) */
-    Polynomial(const std::vector<double>& coefficients)
-      : m_coefficients(coefficients){};
-
     // Evaluation of the polynomial for given material thickness (t)
     double operator()(const double& t) const
     {
       double sum(0.);
-      std::vector<double>::const_iterator coefficient = m_coefficients.begin();
-
-      for (; coefficient != m_coefficients.end(); ++coefficient) {
-        sum = t * sum + (*coefficient);
+      for (size_t i = 0; i < GSFConstants::polynomialCoefficients; ++i) {
+        sum = t * sum + coefficients[i];
       }
-
       return sum;
     }
-
-  private:
-    std::vector<double> m_coefficients;
+    std::array<double, GSFConstants::polynomialCoefficients> coefficients;
   };
 
   GsfBetheHeitlerEffects(const std::string&,
@@ -104,9 +73,6 @@ private:
   // Read polynomial fit parameters from a specified file
   bool readParameters();
 
-  // Read coeffients for a single polynomial fit
-  Polynomial readPolynomial(std::ifstream&, const int);
-
   std::array<Polynomial, GSFConstants::maxNumberofBHComponents>
     m_polynomialWeights;
   std::array<Polynomial, GSFConstants::maxNumberofBHComponents>
diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfBetheHeitlerEffects.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfBetheHeitlerEffects.cxx
index ca42169aa61..c4fc4676c8e 100644
--- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfBetheHeitlerEffects.cxx
+++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfBetheHeitlerEffects.cxx
@@ -24,7 +24,7 @@ namespace {
 using BH = Trk::GsfBetheHeitlerEffects;
 
 inline bool
-inRange(int var,  int lo, int hi)
+inRange(int var, int lo, int hi)
 {
   return ((var <= hi) and (var >= lo));
 }
@@ -158,6 +158,21 @@ getMixtureParameters(
   return mixture;
 }
 
+Trk::GsfBetheHeitlerEffects::Polynomial
+readPolynomial(std::ifstream& fin)
+{
+  Trk::GsfBetheHeitlerEffects::Polynomial poly{};
+  for (size_t i = 0; i < GSFConstants::polynomialCoefficients; ++i) {
+    if (!fin) {
+      throw std::runtime_error(
+        "Reached end of stream but still expecting data.");
+    }
+    fin >> poly.coefficients[i];
+  }
+  return poly;
+}
+
+
 } // end of Anonymous namespace for Helper methods
 
 Trk::GsfBetheHeitlerEffects::GsfBetheHeitlerEffects(const std::string& type,
@@ -262,10 +277,9 @@ Trk::GsfBetheHeitlerEffects::readParameters()
   // Fill the polynomials
   int componentIndex = 0;
   for (; componentIndex < m_numberOfComponents; ++componentIndex) {
-    m_polynomialWeights[componentIndex] = readPolynomial(fin, orderPolynomial);
-    m_polynomialMeans[componentIndex] = readPolynomial(fin, orderPolynomial);
-    m_polynomialVariances[componentIndex] =
-      readPolynomial(fin, orderPolynomial);
+    m_polynomialWeights[componentIndex] = readPolynomial(fin);
+    m_polynomialMeans[componentIndex] = readPolynomial(fin);
+    m_polynomialVariances[componentIndex] = readPolynomial(fin);
   }
 
   // Read the high X0 polynomial
@@ -321,32 +335,14 @@ Trk::GsfBetheHeitlerEffects::readParameters()
     // Fill the polynomials
     int componentIndex = 0;
     for (; componentIndex < m_numberOfComponentsHighX0; ++componentIndex) {
-      m_polynomialWeightsHighX0[componentIndex] =
-        readPolynomial(fin, orderPolynomial);
-      m_polynomialMeansHighX0[componentIndex] =
-        readPolynomial(fin, orderPolynomial);
-      m_polynomialVariancesHighX0[componentIndex] =
-        readPolynomial(fin, orderPolynomial);
+      m_polynomialWeightsHighX0[componentIndex] = readPolynomial(fin);
+      m_polynomialMeansHighX0[componentIndex] = readPolynomial(fin);
+      m_polynomialVariancesHighX0[componentIndex] = readPolynomial(fin);
     }
   }
   return true;
 }
 
-Trk::GsfBetheHeitlerEffects::Polynomial
-Trk::GsfBetheHeitlerEffects::readPolynomial(std::ifstream& fin, const int order)
-{
-  std::vector<double> coefficients(order + 1);
-  int orderIndex = 0;
-  for (; orderIndex < (order + 1); ++orderIndex) {
-    if (!fin) {
-      throw std::runtime_error(
-        "Reached end of stream but still expecting data.");
-    }
-    fin >> coefficients[orderIndex];
-  }
-  return Polynomial(coefficients);
-}
-
 void
 Trk::GsfBetheHeitlerEffects::compute(
   Trk::GSFEnergyLossCache& cache,
-- 
GitLab