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