From e2861d1d34306828188946ba0896b130a0844ff8 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Thu, 30 Nov 2023 11:44:08 +0100
Subject: [PATCH] don't call virtual method from c'tor

---
 .clang-tidy             | 12 ++++++------
 Sim/Scan/AlphaScan.cpp  | 15 +++++----------
 Sim/Scan/AlphaScan.h    |  2 --
 Sim/Scan/BeamScan.h     |  1 -
 Sim/Scan/LambdaScan.cpp | 14 ++++----------
 Sim/Scan/LambdaScan.h   |  1 -
 Sim/Scan/QzScan.cpp     | 27 +++++++++++----------------
 Sim/Scan/QzScan.h       |  2 --
 8 files changed, 26 insertions(+), 48 deletions(-)

diff --git a/.clang-tidy b/.clang-tidy
index dd402e4d957..a545430782b 100644
--- a/.clang-tidy
+++ b/.clang-tidy
@@ -20,17 +20,14 @@ Checks: '*,
 -bugprone-copy-constructor-init,
 -bugprone-exception-escape,
 -bugprone-misplaced-widening-cast,
--clang-analyzer-core.CallAndMessage,
--clang-analyzer-optin.cplusplus.VirtualCall,
--cppcoreguidelines-pro-type-const-cast,
+clang-analyzer-core.CallAndMessage,
 
-modernize-use-equals-default,
--*-use-nullptr,
--*-use-override,
 
 -bugprone-unused-return-value,
+-clang-analyzer-optin.cplusplus.VirtualCall,
 -cppcoreguidelines-explicit-virtual-functions,
 -cppcoreguidelines-prefer-member-initializer,
+-cppcoreguidelines-pro-type-const-cast,
 -hicpp-move-const-arg,
 -llvm-namespace-comment,
 -llvm-qualified-auto,
@@ -42,6 +39,9 @@ modernize-use-equals-default,
 -modernize-use-auto,
 -modernize-use-default-member-init,
 -modermize-use-emplace,
+-modernize-use-equals-default,
+-modernize-use-nullptr,
+-modernize-use-override,
 -modernize-use-using,
 -performance-for-range-copy,
 -performance-inefficient-vector-operation,
diff --git a/Sim/Scan/AlphaScan.cpp b/Sim/Scan/AlphaScan.cpp
index 2ea97985b19..f79631755b9 100644
--- a/Sim/Scan/AlphaScan.cpp
+++ b/Sim/Scan/AlphaScan.cpp
@@ -52,7 +52,11 @@ AlphaScan::AlphaScan(const Scale& alpha_axis)
     if (axis_values.back() > std::numbers::pi / 2)
         throw std::runtime_error("AlphaScan: angles beyond normal.");
 
-    createBeams();
+    m_beams.clear();
+    for (size_t i = 0; i < nScan(); i++) {
+        auto* beam = new Beam(defaultIntensity, defaultWavelength, m_axis->binCenter(i));
+        m_beams.emplace_back(beam);
+    }
 }
 
 AlphaScan::AlphaScan(std::vector<double> points)
@@ -100,12 +104,3 @@ std::vector<SpecularElement> AlphaScan::generateElements() const
     }
     return result;
 }
-
-void AlphaScan::createBeams()
-{
-    m_beams.clear();
-    for (size_t i = 0; i < nScan(); i++) {
-        auto* beam = new Beam(defaultIntensity, defaultWavelength, m_axis->binCenter(i));
-        m_beams.emplace_back(beam);
-    }
-}
diff --git a/Sim/Scan/AlphaScan.h b/Sim/Scan/AlphaScan.h
index abdfeb6d62e..141c0961945 100644
--- a/Sim/Scan/AlphaScan.h
+++ b/Sim/Scan/AlphaScan.h
@@ -45,8 +45,6 @@ public:
     }
 
 private:
-    void createBeams() override;
-
     double m_alpha_offset{0};
 
 #endif // SWIG
diff --git a/Sim/Scan/BeamScan.h b/Sim/Scan/BeamScan.h
index 8810f6b1826..dcfcb93b3e2 100644
--- a/Sim/Scan/BeamScan.h
+++ b/Sim/Scan/BeamScan.h
@@ -108,7 +108,6 @@ protected:
     CloneableVector<Beam> m_beams;
 
 private:
-    virtual void createBeams() = 0;
     void setBeams(const CloneableVector<Beam>& beams);
 
     bool isCommonIntensity() const;
diff --git a/Sim/Scan/LambdaScan.cpp b/Sim/Scan/LambdaScan.cpp
index b8acb52ab15..52e2e76cea9 100644
--- a/Sim/Scan/LambdaScan.cpp
+++ b/Sim/Scan/LambdaScan.cpp
@@ -33,7 +33,10 @@ LambdaScan::LambdaScan(Scale* lambdaScale)
     if (axis_values.front() <= 0)
         throw std::runtime_error("LambdaScan: non-positive wavelengths.");
 
-    createBeams();
+    for (size_t i = 0; i < nScan(); i++) {
+        auto* beam = new Beam(defaultIntensity, m_axis->binCenter(i), defaultInclination);
+        m_beams.emplace_back(beam);
+    }
 }
 
 LambdaScan::LambdaScan(const Scale& lambdaScale)
@@ -75,12 +78,3 @@ std::vector<SpecularElement> LambdaScan::generateElements() const
     }
     return result;
 }
-
-void LambdaScan::createBeams()
-{
-    m_beams.clear();
-    for (size_t i = 0; i < nScan(); i++) {
-        auto* beam = new Beam(defaultIntensity, m_axis->binCenter(i), defaultInclination);
-        m_beams.emplace_back(beam);
-    }
-}
diff --git a/Sim/Scan/LambdaScan.h b/Sim/Scan/LambdaScan.h
index dec1f717bfb..2629fbe60fa 100644
--- a/Sim/Scan/LambdaScan.h
+++ b/Sim/Scan/LambdaScan.h
@@ -40,7 +40,6 @@ public:
 
 private:
     LambdaScan(Scale* lambdaScale);
-    void createBeams() override;
 #endif // SWIG
 };
 
diff --git a/Sim/Scan/QzScan.cpp b/Sim/Scan/QzScan.cpp
index 9b00d82d328..865f44f14d0 100644
--- a/Sim/Scan/QzScan.cpp
+++ b/Sim/Scan/QzScan.cpp
@@ -33,7 +33,17 @@ QzScan::QzScan(Scale* qs_nm)
     if (axis_values.front() < 0)
         throw std::runtime_error("QzScan: negative q-values.");
 
-    createBeams();
+    m_beams.clear();
+    for (size_t i = 0; i < nScan(); i++) {
+        // Qz scan is internally understood as wavelength scan
+        // TODO use some shared function "qz2lambda"
+        double lambda =
+            4.0 * std::numbers::pi * std::sin(defaultInclination) / m_axis->binCenter(i);
+        auto* beam = new Beam(defaultIntensity, lambda, defaultInclination);
+        // Since the grazing geometry is not clear in q-space, the footprint should not be used
+        beam->setFootprint(nullptr);
+        m_beams.emplace_back(beam);
+    }
 }
 
 QzScan::QzScan(const Scale& qs_nm)
@@ -132,18 +142,3 @@ void QzScan::setVectorResolution(const IDistribution1D& distr, const std::vector
     ASSERT(std_devs.size() > 1);
     m_resol_width = std_devs;
 }
-
-void QzScan::createBeams()
-{
-    m_beams.clear();
-    for (size_t i = 0; i < nScan(); i++) {
-        // Qz scan is internally understood as wavelength scan
-        // TODO use some shared function "qz2lambda"
-        double lambda =
-            4.0 * std::numbers::pi * std::sin(defaultInclination) / m_axis->binCenter(i);
-        auto* beam = new Beam(defaultIntensity, lambda, defaultInclination);
-        // Since the grazing geometry is not clear in q-space, the footprint should not be used
-        beam->setFootprint(nullptr);
-        m_beams.emplace_back(beam);
-    }
-}
diff --git a/Sim/Scan/QzScan.h b/Sim/Scan/QzScan.h
index 8639c99e763..a8e789c3b61 100644
--- a/Sim/Scan/QzScan.h
+++ b/Sim/Scan/QzScan.h
@@ -71,8 +71,6 @@ public:
 private:
     QzScan(Scale* qs_nm);
 
-    void createBeams() override;
-
     std::unique_ptr<const IDistribution1D> m_qz_distrib;
     std::vector<double> m_resol_width;
     bool m_relative_resolution{false};
-- 
GitLab