From fc358e7820522633e82e2ec4979e2258f1309830 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Fri, 23 Apr 2021 20:52:06 +0200
Subject: [PATCH 1/4] file comment

---
 GUI/coregui/Models/InstrumentItems.cpp | 2 +-
 GUI/coregui/Models/InstrumentItems.h   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/GUI/coregui/Models/InstrumentItems.cpp b/GUI/coregui/Models/InstrumentItems.cpp
index a8fbb2f489d..b12bf5eedc3 100644
--- a/GUI/coregui/Models/InstrumentItems.cpp
+++ b/GUI/coregui/Models/InstrumentItems.cpp
@@ -3,7 +3,7 @@
 //  BornAgain: simulate and fit reflection and scattering
 //
 //! @file      GUI/coregui/Models/InstrumentItems.cpp
-//! @brief     Implements InstrumentItems classes
+//! @brief     Implement class InstrumentItem and all its children
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
diff --git a/GUI/coregui/Models/InstrumentItems.h b/GUI/coregui/Models/InstrumentItems.h
index d12978d8ba3..d425f43e3b8 100644
--- a/GUI/coregui/Models/InstrumentItems.h
+++ b/GUI/coregui/Models/InstrumentItems.h
@@ -3,7 +3,7 @@
 //  BornAgain: simulate and fit reflection and scattering
 //
 //! @file      GUI/coregui/Models/InstrumentItems.h
-//! @brief     Defines InstrumentItems classes
+//! @brief     Defines class InstrumentItem and all its children
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
-- 
GitLab


From 89ac82baa0cdb8b90cdd3c419de14e558936558f Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Fri, 23 Apr 2021 20:55:19 +0200
Subject: [PATCH 2/4] delete c'tor

---
 GUI/coregui/Models/InstrumentItems.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/GUI/coregui/Models/InstrumentItems.h b/GUI/coregui/Models/InstrumentItems.h
index d425f43e3b8..23d91eaf455 100644
--- a/GUI/coregui/Models/InstrumentItems.h
+++ b/GUI/coregui/Models/InstrumentItems.h
@@ -38,6 +38,8 @@ public:
     static const QString P_BACKGROUND;
 
 public:
+    InstrumentItem() = delete;
+
     QStringList translateList(const QStringList& list) const override;
 
     QString id() const;
-- 
GitLab


From 2ff36e5028807f7ba21d5cee2ba906554871efc6 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Fri, 23 Apr 2021 21:15:24 +0200
Subject: [PATCH 3/4] replace final by override

---
 Core/Computation/ConstantBackground.h         |   4 +-
 Core/Computation/PoissonNoiseBackground.h     |   4 +-
 Core/Scan/UnitConverter1D.h                   |   2 +-
 Core/Simulation/DepthProbeSimulation.h        |   2 +-
 Core/Simulation/SpecularSimulation.h          |   2 +-
 Device/Detector/IsGISAXSDetector.h            |   2 +-
 Device/Detector/RectangularDetector.h         |   4 +-
 Device/Detector/SpecularDetector1D.h          |   2 +-
 Device/Detector/SphericalDetector.h           |   2 +-
 Device/Instrument/Instrument.h                |   2 +-
 Device/ProDetector/DetectionProperties.h      |   2 +-
 .../ConvolutionDetectorResolution.h           |   2 +-
 .../Resolution/ResolutionFunction2DGaussian.h |   2 +-
 Fit/Adapter/MinimizerAdapter.h                |   8 +-
 Fit/Minimizer/TestMinimizer.h                 |   4 +-
 GUI/coregui/Models/InstrumentItems.h          |   8 +-
 Param/Distrib/Distributions.h                 |  86 +--
 Sample/Aggregate/InterferenceFunctionNone.h   |   6 +-
 .../InterferenceFunctionRadialParaCrystal.h   |   8 +-
 Sample/Aggregate/InterferenceFunctionTwin.h   |   6 +-
 Sample/Correlations/FTDecay1D.h               |  16 +-
 Sample/Correlations/FTDecay2D.h               |  12 +-
 Sample/Correlations/FTDistributions1D.h       |  60 +--
 Sample/Correlations/FTDistributions2D.h       |  40 +-
 Sample/Correlations/IDistribution1DSampler.h  |  10 +-
 Sample/Correlations/IDistribution2DSampler.h  |   8 +-
 Sample/Fresnel/MatrixFresnelMap.h             |   4 +-
 Sample/HardParticle/FormFactorAnisoPyramid.h  |   6 +-
 Sample/HardParticle/FormFactorBar.h           |  12 +-
 Sample/HardParticle/FormFactorBox.h           |  16 +-
 .../HardParticle/FormFactorCantellatedCube.h  |   4 +-
 Sample/HardParticle/FormFactorCone.h          |  12 +-
 Sample/HardParticle/FormFactorCone6.h         |   6 +-
 Sample/HardParticle/FormFactorCosineRipple.h  |  18 +-
 Sample/HardParticle/FormFactorCuboctahedron.h |   6 +-
 Sample/HardParticle/FormFactorCylinder.h      |  12 +-
 Sample/HardParticle/FormFactorDodecahedron.h  |   6 +-
 Sample/HardParticle/FormFactorDot.h           |  14 +-
 .../FormFactorEllipsoidalCylinder.h           |  10 +-
 Sample/HardParticle/FormFactorFullSphere.h    |  16 +-
 Sample/HardParticle/FormFactorFullSpheroid.h  |  10 +-
 Sample/HardParticle/FormFactorHemiEllipsoid.h |   8 +-
 Sample/HardParticle/FormFactorHollowSphere.h  |   8 +-
 Sample/HardParticle/FormFactorIcosahedron.h   |   6 +-
 Sample/HardParticle/FormFactorLongBoxGauss.h  |  10 +-
 .../HardParticle/FormFactorLongBoxLorentz.h   |  10 +-
 Sample/HardParticle/FormFactorPrism3.h        |  10 +-
 Sample/HardParticle/FormFactorPrism6.h        |  10 +-
 Sample/HardParticle/FormFactorPyramid.h       |   6 +-
 .../HardParticle/FormFactorSawtoothRipple.h   |  18 +-
 Sample/HardParticle/FormFactorTetrahedron.h   |   6 +-
 Sample/HardParticle/FormFactorTruncatedCube.h |   4 +-
 .../HardParticle/FormFactorTruncatedSphere.h  |  10 +-
 .../FormFactorTruncatedSpheroid.h             |  10 +-
 Sample/HardParticle/IFormFactorPolyhedron.h   |  10 +-
 Sample/HardParticle/IFormFactorPrism.h        |   4 +-
 Sample/HardParticle/IProfileRipple.h          |  16 +-
 Sample/Lattice/Lattice2D.h                    |  32 +-
 Sample/Material/MagneticMaterialImpl.h        |  12 +-
 Sample/Multilayer/Layer.h                     |   8 +-
 Sample/Multilayer/MultiLayer.h                |   6 +-
 Sample/Particle/Crystal.h                     |   6 +-
 Sample/Particle/IParticle.h                   |   4 +-
 Sample/Particle/MesoCrystal.h                 |   8 +-
 Sample/Particle/Particle.h                    |  10 +-
 Sample/Particle/ParticleComposition.h         |  12 +-
 Sample/Particle/ParticleCoreShell.h           |   8 +-
 Sample/Particle/ParticleDistribution.h        |  10 +-
 .../SampleBuilderEngine/SampleBuilderNode.h   |   2 +-
 Sample/SampleBuilderEngine/SampleProvider.h   |   2 +-
 .../FormFactorDecoratorPositionFactor.h       |  10 +-
 .../Scattering/FormFactorDecoratorRotation.h  |  12 +-
 Sample/SoftParticle/FormFactorGauss.h         |   8 +-
 .../FormFactorSphereGaussianRadius.h          |   8 +-
 .../FormFactorSphereLogNormalRadius.h         |  10 +-
 Tests/UnitTests/Core/Sample/INodeTest.cpp     |   2 +-
 Tests/UnitTests/Core/Sample/Lattice2DTest.cpp |   2 +-
 .../Core/Sample/SampleProviderTest.cpp        |   2 +-
 auto/Wrap/doxygenCore.i                       |  14 +-
 auto/Wrap/doxygenDevice.i                     |  18 +-
 auto/Wrap/doxygenFit.i                        |  12 +-
 auto/Wrap/doxygenParam.i                      |  68 +--
 auto/Wrap/doxygenSample.i                     | 502 +++++++++---------
 auto/Wrap/libBornAgainCore.py                 |  12 +-
 auto/Wrap/libBornAgainCore_wrap.cpp           |  12 +-
 auto/Wrap/libBornAgainDevice.py               |  10 +-
 auto/Wrap/libBornAgainDevice_wrap.cpp         |  10 +-
 auto/Wrap/libBornAgainParam.py                |  68 +--
 auto/Wrap/libBornAgainParam_wrap.cpp          |  68 +--
 auto/Wrap/libBornAgainSample.py               | 412 +++++++-------
 auto/Wrap/libBornAgainSample_wrap.cpp         | 412 +++++++-------
 91 files changed, 1197 insertions(+), 1197 deletions(-)

diff --git a/Core/Computation/ConstantBackground.h b/Core/Computation/ConstantBackground.h
index b6da9a39465..6c7650e2772 100644
--- a/Core/Computation/ConstantBackground.h
+++ b/Core/Computation/ConstantBackground.h
@@ -26,13 +26,13 @@ public:
     ConstantBackground(const std::vector<double> P);
     ConstantBackground(double background_value);
 
-    ConstantBackground* clone() const final;
+    ConstantBackground* clone() const override;
 
     double backgroundValue() const { return m_background_value; }
 
     void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    double addBackground(double intensity) const final;
+    double addBackground(double intensity) const override;
 
 private:
     const double& m_background_value;
diff --git a/Core/Computation/PoissonNoiseBackground.h b/Core/Computation/PoissonNoiseBackground.h
index 30f72ebfeb7..0581ffef731 100644
--- a/Core/Computation/PoissonNoiseBackground.h
+++ b/Core/Computation/PoissonNoiseBackground.h
@@ -24,11 +24,11 @@
 class PoissonNoiseBackground : public IBackground {
 public:
     PoissonNoiseBackground();
-    PoissonNoiseBackground* clone() const final;
+    PoissonNoiseBackground* clone() const override;
 
     void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    double addBackground(double intensity) const final;
+    double addBackground(double intensity) const override;
 };
 
 #endif // BORNAGAIN_CORE_COMPUTATION_POISSONNOISEBACKGROUND_H
diff --git a/Core/Scan/UnitConverter1D.h b/Core/Scan/UnitConverter1D.h
index 9f2e28a9bdf..095f0fa1a79 100644
--- a/Core/Scan/UnitConverter1D.h
+++ b/Core/Scan/UnitConverter1D.h
@@ -43,7 +43,7 @@ public:
     UnitConverter1D* clone() const override = 0;
 
     //! Returns dimensionality of converted canvas.
-    size_t dimension() const final { return 1u; }
+    size_t dimension() const override { return 1u; }
 
     //! Calculates minimum on-axis value in given units.
     double calculateMin(size_t i_axis, Axes::Units units) const override;
diff --git a/Core/Simulation/DepthProbeSimulation.h b/Core/Simulation/DepthProbeSimulation.h
index cf2cbad5219..abbdae7235f 100644
--- a/Core/Simulation/DepthProbeSimulation.h
+++ b/Core/Simulation/DepthProbeSimulation.h
@@ -37,7 +37,7 @@ public:
 
     DepthProbeSimulation* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     //! Returns the results of the simulation in a format that supports unit conversion and export
     //! to numpy arrays
diff --git a/Core/Simulation/SpecularSimulation.h b/Core/Simulation/SpecularSimulation.h
index 88dd079ec2d..39debc1a9af 100644
--- a/Core/Simulation/SpecularSimulation.h
+++ b/Core/Simulation/SpecularSimulation.h
@@ -39,7 +39,7 @@ public:
     //! Put into a clean state for running a simulation.
     void prepareSimulation() override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     //! Returns the results of the simulation in a format that supports unit conversion and export
     //! to numpy arrays. If simulation was not run, returns an array of proper size filled with
diff --git a/Device/Detector/IsGISAXSDetector.h b/Device/Detector/IsGISAXSDetector.h
index 9d6ad434796..342638f5902 100644
--- a/Device/Detector/IsGISAXSDetector.h
+++ b/Device/Detector/IsGISAXSDetector.h
@@ -29,7 +29,7 @@ public:
 
     IsGISAXSDetector* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
 protected:
     //! Generates an axis with correct name and default binning for given index
diff --git a/Device/Detector/RectangularDetector.h b/Device/Detector/RectangularDetector.h
index 774af2c4779..f0207732788 100644
--- a/Device/Detector/RectangularDetector.h
+++ b/Device/Detector/RectangularDetector.h
@@ -44,7 +44,7 @@ public:
 
     RectangularDetector* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     ~RectangularDetector();
 
@@ -73,7 +73,7 @@ public:
     EDetectorArrangement getDetectorArrangment() const;
 
     //! return default axes units
-    virtual Axes::Units defaultAxesUnits() const final { return Axes::Units::MM; }
+    virtual Axes::Units defaultAxesUnits() const override { return Axes::Units::MM; }
 
     RectangularPixel* regionOfInterestPixel() const;
 
diff --git a/Device/Detector/SpecularDetector1D.h b/Device/Detector/SpecularDetector1D.h
index 09501594e10..90fecfb6cde 100644
--- a/Device/Detector/SpecularDetector1D.h
+++ b/Device/Detector/SpecularDetector1D.h
@@ -49,7 +49,7 @@ public:
     void setAxis(const IAxis& axis);
 
     //! Return default axes units
-    virtual Axes::Units defaultAxesUnits() const final { return Axes::Units::RADIANS; }
+    virtual Axes::Units defaultAxesUnits() const override { return Axes::Units::RADIANS; }
 
 
 protected:
diff --git a/Device/Detector/SphericalDetector.h b/Device/Detector/SphericalDetector.h
index 52eef2a455a..6d0fab8bdd2 100644
--- a/Device/Detector/SphericalDetector.h
+++ b/Device/Detector/SphericalDetector.h
@@ -53,7 +53,7 @@ public:
     ~SphericalDetector() override {}
 
     //! return default axes units
-    virtual Axes::Units defaultAxesUnits() const final { return Axes::Units::RADIANS; }
+    virtual Axes::Units defaultAxesUnits() const override { return Axes::Units::RADIANS; }
 
 protected:
     //! Creates an IPixel for the given OutputData object and index
diff --git a/Device/Instrument/Instrument.h b/Device/Instrument/Instrument.h
index 90dc0e34668..5e53de265e4 100644
--- a/Device/Instrument/Instrument.h
+++ b/Device/Instrument/Instrument.h
@@ -38,7 +38,7 @@ public:
 
     virtual ~Instrument();
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     Beam& beam() { return m_beam; }
     const Beam& beam() const { return m_beam; }
diff --git a/Device/ProDetector/DetectionProperties.h b/Device/ProDetector/DetectionProperties.h
index 7a747d60b1e..54d789de2d9 100644
--- a/Device/ProDetector/DetectionProperties.h
+++ b/Device/ProDetector/DetectionProperties.h
@@ -46,7 +46,7 @@ public:
     double analyzerEfficiency() const; //!< will always return positive value
     double analyzerTotalTransmission() const;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
 private:
     //! Verify if the given analyzer properties are physical
diff --git a/Device/Resolution/ConvolutionDetectorResolution.h b/Device/Resolution/ConvolutionDetectorResolution.h
index be0f2070399..1cbc74895f4 100644
--- a/Device/Resolution/ConvolutionDetectorResolution.h
+++ b/Device/Resolution/ConvolutionDetectorResolution.h
@@ -45,7 +45,7 @@ public:
 
     virtual ConvolutionDetectorResolution* clone() const;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     const IResolutionFunction2D* getResolutionFunction2D() const;
 
diff --git a/Device/Resolution/ResolutionFunction2DGaussian.h b/Device/Resolution/ResolutionFunction2DGaussian.h
index aa41d02e863..2ce7bdc1f26 100644
--- a/Device/Resolution/ResolutionFunction2DGaussian.h
+++ b/Device/Resolution/ResolutionFunction2DGaussian.h
@@ -31,7 +31,7 @@ public:
         return new ResolutionFunction2DGaussian(m_sigma_x, m_sigma_y);
     }
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getSigmaX() const { return m_sigma_x; }
     double getSigmaY() const { return m_sigma_y; }
diff --git a/Fit/Adapter/MinimizerAdapter.h b/Fit/Adapter/MinimizerAdapter.h
index 442b8393567..1a4c592bc60 100644
--- a/Fit/Adapter/MinimizerAdapter.h
+++ b/Fit/Adapter/MinimizerAdapter.h
@@ -52,14 +52,14 @@ public:
                                                mumufit::Parameters parameters) override;
 
     //! Returns name of the minimizer.
-    std::string minimizerName() const final;
+    std::string minimizerName() const override;
 
     //! Returns name of the minimization algorithm.
-    std::string algorithmName() const final;
+    std::string algorithmName() const override;
 
     void setParameters(const mumufit::Parameters& parameters);
 
-    double minValue() const final;
+    double minValue() const override;
 
     MinimizerOptions& options() { return m_options; }
     const MinimizerOptions& options() const { return m_options; }
@@ -74,7 +74,7 @@ public:
     virtual std::map<std::string, std::string> statusMap() const;
 
     //! Sets option string to the minimizer
-    void setOptions(const std::string& optionString) final;
+    void setOptions(const std::string& optionString) override;
 
 protected:
     MinimizerAdapter(const MinimizerInfo& minimizerInfo);
diff --git a/Fit/Minimizer/TestMinimizer.h b/Fit/Minimizer/TestMinimizer.h
index cc25f51f748..52a83c28f3f 100644
--- a/Fit/Minimizer/TestMinimizer.h
+++ b/Fit/Minimizer/TestMinimizer.h
@@ -29,8 +29,8 @@ public:
     TestMinimizer();
     ~TestMinimizer() override;
 
-    std::string minimizerName() const final;
-    std::string algorithmName() const final { return ""; }
+    std::string minimizerName() const override;
+    std::string algorithmName() const override { return ""; }
 
     mumufit::MinimizerResult minimize_scalar(fcn_scalar_t fcn,
                                              mumufit::Parameters parameters) override;
diff --git a/GUI/coregui/Models/InstrumentItems.h b/GUI/coregui/Models/InstrumentItems.h
index 23d91eaf455..b4d4b640f3c 100644
--- a/GUI/coregui/Models/InstrumentItems.h
+++ b/GUI/coregui/Models/InstrumentItems.h
@@ -84,7 +84,7 @@ public:
     bool alignedWith(const RealDataItem* item) const override;
     virtual QString defaultName() const override;
 
-    std::unique_ptr<IUnitConverter> createUnitConverter() const final;
+    std::unique_ptr<IUnitConverter> createUnitConverter() const override;
 };
 
 
@@ -116,7 +116,7 @@ public:
     void updateToRealData(const RealDataItem* item) override;
     virtual QString defaultName() const override;
 
-    std::unique_ptr<IUnitConverter> createUnitConverter() const final;
+    std::unique_ptr<IUnitConverter> createUnitConverter() const override;
 };
 
 
@@ -129,7 +129,7 @@ public:
     void updateToRealData(const RealDataItem* item) override;
     virtual QString defaultName() const override;
 
-    std::unique_ptr<IUnitConverter> createUnitConverter() const final;
+    std::unique_ptr<IUnitConverter> createUnitConverter() const override;
 };
 
 
@@ -151,7 +151,7 @@ public:
     // after ISimulation gets createUnitConverter method
     std::unique_ptr<DepthProbeSimulation> createSimulation() const;
 
-    std::unique_ptr<IUnitConverter> createUnitConverter() const final;
+    std::unique_ptr<IUnitConverter> createUnitConverter() const override;
 };
 
 #endif // BORNAGAIN_GUI_COREGUI_MODELS_INSTRUMENTITEMS_H
diff --git a/Param/Distrib/Distributions.h b/Param/Distrib/Distributions.h
index fe4c2250ba2..b38d62bdd2a 100644
--- a/Param/Distrib/Distributions.h
+++ b/Param/Distrib/Distributions.h
@@ -91,20 +91,20 @@ public:
     DistributionGate(double min, double max);
     DistributionGate();
 
-    DistributionGate* clone() const final { return new DistributionGate(m_min, m_max); }
+    DistributionGate* clone() const override { return new DistributionGate(m_min, m_max); }
 
-    double probabilityDensity(double x) const final;
-    double getMean() const final { return (m_min + m_max) / 2.0; }
+    double probabilityDensity(double x) const override;
+    double getMean() const override { return (m_min + m_max) / 2.0; }
     double lowerBound() const { return m_min; }
     double upperBound() const { return m_max; }
 
     //! Returns list of sample values
-    virtual std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
-                                                  const RealLimits& limits = RealLimits()) const;
+    std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
+                                          const RealLimits& limits = RealLimits()) const override;
 
-    bool isDelta() const final;
+    bool isDelta() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
 private:
     const double& m_min;
@@ -124,19 +124,19 @@ public:
     DistributionLorentz(double mean, double hwhm);
     DistributionLorentz();
 
-    DistributionLorentz* clone() const final { return new DistributionLorentz(m_mean, m_hwhm); }
+    DistributionLorentz* clone() const override { return new DistributionLorentz(m_mean, m_hwhm); }
 
-    double probabilityDensity(double x) const final;
-    double getMean() const final { return m_mean; }
+    double probabilityDensity(double x) const override;
+    double getMean() const override { return m_mean; }
     double getHWHM() const { return m_hwhm; }
 
     //! generate list of sample values
-    virtual std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
-                                                  const RealLimits& limits = RealLimits()) const;
+    std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
+                                          const RealLimits& limits = RealLimits()) const override;
 
-    bool isDelta() const final;
+    bool isDelta() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
 private:
     const double& m_mean;
@@ -156,22 +156,22 @@ public:
     DistributionGaussian(double mean, double std_dev);
     DistributionGaussian();
 
-    DistributionGaussian* clone() const final
+    DistributionGaussian* clone() const override
     {
         return new DistributionGaussian(m_mean, m_std_dev);
     }
 
-    double probabilityDensity(double x) const final;
-    double getMean() const final { return m_mean; }
+    double probabilityDensity(double x) const override;
+    double getMean() const override { return m_mean; }
     double getStdDev() const { return m_std_dev; }
 
     //! generate list of sample values
-    virtual std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
-                                                  const RealLimits& limits = RealLimits()) const;
+    std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
+                                          const RealLimits& limits = RealLimits()) const override;
 
-    bool isDelta() const final;
+    bool isDelta() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
 private:
     const double& m_mean;
@@ -191,25 +191,25 @@ public:
     DistributionLogNormal(double median, double scale_param);
     DistributionLogNormal() = delete;
 
-    DistributionLogNormal* clone() const final
+    DistributionLogNormal* clone() const override
     {
         return new DistributionLogNormal(m_median, m_scale_param);
     }
 
-    double probabilityDensity(double x) const final;
-    double getMean() const final;
+    double probabilityDensity(double x) const override;
+    double getMean() const override;
     double getMedian() const { return m_median; }
     double getScalePar() const { return m_scale_param; }
 
     //! generate list of sample values
-    virtual std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
-                                                  const RealLimits& limits = RealLimits()) const;
+    std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
+                                          const RealLimits& limits = RealLimits()) const override;
 
-    bool isDelta() const final;
+    bool isDelta() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    virtual void setUnits(const std::string& units);
+    void setUnits(const std::string& units) override;
 
 private:
     const double& m_median;
@@ -229,19 +229,19 @@ public:
     DistributionCosine(double mean, double sigma);
     DistributionCosine();
 
-    DistributionCosine* clone() const final { return new DistributionCosine(m_mean, m_sigma); }
+    DistributionCosine* clone() const override { return new DistributionCosine(m_mean, m_sigma); }
 
-    double probabilityDensity(double x) const final;
-    double getMean() const final { return m_mean; }
+    double probabilityDensity(double x) const override;
+    double getMean() const override { return m_mean; }
     double getSigma() const { return m_sigma; }
 
     //! generate list of sample values
-    virtual std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
-                                                  const RealLimits& limits = RealLimits()) const;
+    std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
+                                          const RealLimits& limits = RealLimits()) const override;
 
-    bool isDelta() const final;
+    bool isDelta() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
 private:
     const double& m_mean;
@@ -261,24 +261,24 @@ public:
     DistributionTrapezoid(double center, double left, double middle, double right);
     DistributionTrapezoid();
 
-    DistributionTrapezoid* clone() const final
+    DistributionTrapezoid* clone() const override
     {
         return new DistributionTrapezoid(m_center, m_left, m_middle, m_right);
     }
 
-    double probabilityDensity(double x) const final;
-    double getMean() const final { return m_center; }
+    double probabilityDensity(double x) const override;
+    double getMean() const override { return m_center; }
     double getLeftWidth() const { return m_left; }
     double getMiddleWidth() const { return m_middle; }
     double getRightWidth() const { return m_right; }
 
     //! generate list of sample values
-    virtual std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
-                                                  const RealLimits& limits = RealLimits()) const;
+    std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
+                                          const RealLimits& limits = RealLimits()) const override;
 
-    bool isDelta() const final;
+    bool isDelta() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
 private:
     void adjustLimitsToNonZeroSamples(double& min, double& max, size_t nbr_samples) const;
diff --git a/Sample/Aggregate/InterferenceFunctionNone.h b/Sample/Aggregate/InterferenceFunctionNone.h
index 68150a98ed7..f323fdff685 100644
--- a/Sample/Aggregate/InterferenceFunctionNone.h
+++ b/Sample/Aggregate/InterferenceFunctionNone.h
@@ -24,12 +24,12 @@ class InterferenceFunctionNone : public IInterferenceFunction {
 public:
     InterferenceFunctionNone();
 
-    InterferenceFunctionNone* clone() const final;
+    InterferenceFunctionNone* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
 private:
-    double iff_without_dw(const kvector_t q) const final;
+    double iff_without_dw(const kvector_t q) const override;
 };
 
 #endif // BORNAGAIN_SAMPLE_AGGREGATE_INTERFERENCEFUNCTIONNONE_H
diff --git a/Sample/Aggregate/InterferenceFunctionRadialParaCrystal.h b/Sample/Aggregate/InterferenceFunctionRadialParaCrystal.h
index 7f32d1761db..f4e61ca1e98 100644
--- a/Sample/Aggregate/InterferenceFunctionRadialParaCrystal.h
+++ b/Sample/Aggregate/InterferenceFunctionRadialParaCrystal.h
@@ -25,9 +25,9 @@
 class InterferenceFunctionRadialParaCrystal : public IInterferenceFunction {
 public:
     InterferenceFunctionRadialParaCrystal(double peak_distance, double damping_length);
-    InterferenceFunctionRadialParaCrystal* clone() const final;
+    InterferenceFunctionRadialParaCrystal* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     void setKappa(double kappa);
     double kappa() const;
@@ -43,12 +43,12 @@ public:
 
     double dampingLength() const { return m_damping_length; }
 
-    std::vector<const INode*> getChildren() const final;
+    std::vector<const INode*> getChildren() const override;
 
     double randomSample() const { return m_pdf->createSampler()->randomSample(); }
 
 private:
-    double iff_without_dw(const kvector_t q) const final;
+    double iff_without_dw(const kvector_t q) const override;
     void init_parameters();
 
     double m_peak_distance;  //!< the distance to the first neighbor peak
diff --git a/Sample/Aggregate/InterferenceFunctionTwin.h b/Sample/Aggregate/InterferenceFunctionTwin.h
index d4429e961ef..abfb3a2318b 100644
--- a/Sample/Aggregate/InterferenceFunctionTwin.h
+++ b/Sample/Aggregate/InterferenceFunctionTwin.h
@@ -25,16 +25,16 @@ class InterferenceFunctionTwin : public IInterferenceFunction {
 public:
     InterferenceFunctionTwin(const kvector_t& direction, double mean_distance, double std_dev);
 
-    InterferenceFunctionTwin* clone() const final;
+    InterferenceFunctionTwin* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     kvector_t direction() const;
     double meanDistance() const;
     double stdDev() const;
 
 private:
-    double iff_without_dw(const kvector_t q) const final;
+    double iff_without_dw(const kvector_t q) const override;
 
     kvector_t m_direction;
     double m_distance;
diff --git a/Sample/Correlations/FTDecay1D.h b/Sample/Correlations/FTDecay1D.h
index 087f370b886..18a2deab0f3 100644
--- a/Sample/Correlations/FTDecay1D.h
+++ b/Sample/Correlations/FTDecay1D.h
@@ -49,8 +49,8 @@ public:
     FTDecayFunction1DCauchy(double decay_length);
 
     FTDecayFunction1DCauchy* clone() const;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double q) const final;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double q) const override;
 };
 
 //! One-dimensional Gauss decay function in reciprocal space;
@@ -62,8 +62,8 @@ public:
     FTDecayFunction1DGauss(double decay_length);
 
     FTDecayFunction1DGauss* clone() const;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double q) const final;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double q) const override;
 };
 
 //! One-dimensional triangle decay function in reciprocal space;
@@ -75,8 +75,8 @@ public:
     FTDecayFunction1DTriangle(double decay_length);
 
     FTDecayFunction1DTriangle* clone() const;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double q) const final;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double q) const override;
 };
 
 //! One-dimensional pseudo-Voigt decay function in reciprocal space;
@@ -88,8 +88,8 @@ public:
     FTDecayFunction1DVoigt(double decay_length, double eta);
 
     FTDecayFunction1DVoigt* clone() const;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double q) const final;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double q) const override;
     double eEta() const { return m_eta; }
 
 private:
diff --git a/Sample/Correlations/FTDecay2D.h b/Sample/Correlations/FTDecay2D.h
index c1ab026d2ec..7a3aa16bcd6 100644
--- a/Sample/Correlations/FTDecay2D.h
+++ b/Sample/Correlations/FTDecay2D.h
@@ -68,8 +68,8 @@ public:
     FTDecayFunction2DCauchy(double decay_length_x, double decay_length_y, double gamma);
 
     FTDecayFunction2DCauchy* clone() const;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double qx, double qy) const final;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double qx, double qy) const override;
 };
 
 //! Two-dimensional Gauss decay function in reciprocal space;
@@ -82,8 +82,8 @@ public:
     FTDecayFunction2DGauss(double decay_length_x, double decay_length_y, double gamma);
 
     FTDecayFunction2DGauss* clone() const;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double qx, double qy) const final;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double qx, double qy) const override;
 };
 
 //! Two-dimensional pseudo-Voigt decay function in reciprocal space;
@@ -95,8 +95,8 @@ public:
     FTDecayFunction2DVoigt(double decay_length_x, double decay_length_y, double gamma, double eta);
 
     FTDecayFunction2DVoigt* clone() const;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double qx, double qy) const final;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double qx, double qy) const override;
     double eta() const { return m_eta; }
 
 protected:
diff --git a/Sample/Correlations/FTDistributions1D.h b/Sample/Correlations/FTDistributions1D.h
index 51dacfdc58b..365d1d1a424 100644
--- a/Sample/Correlations/FTDistributions1D.h
+++ b/Sample/Correlations/FTDistributions1D.h
@@ -59,13 +59,13 @@ public:
     FTDistribution1DCauchy(const std::vector<double> P);
     FTDistribution1DCauchy(double omega);
 
-    FTDistribution1DCauchy* clone() const final;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double q) const final;
+    FTDistribution1DCauchy* clone() const override;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double q) const override;
 
-    double qSecondDerivative() const final;
+    double qSecondDerivative() const override;
 #ifndef SWIG
-    std::unique_ptr<IDistribution1DSampler> createSampler() const final;
+    std::unique_ptr<IDistribution1DSampler> createSampler() const override;
 #endif
 };
 
@@ -78,13 +78,13 @@ public:
     FTDistribution1DGauss(const std::vector<double> P);
     FTDistribution1DGauss(double omega);
 
-    FTDistribution1DGauss* clone() const final;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double q) const final;
+    FTDistribution1DGauss* clone() const override;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double q) const override;
 
-    double qSecondDerivative() const final;
+    double qSecondDerivative() const override;
 #ifndef SWIG
-    std::unique_ptr<IDistribution1DSampler> createSampler() const final;
+    std::unique_ptr<IDistribution1DSampler> createSampler() const override;
 #endif
 };
 
@@ -97,13 +97,13 @@ public:
     FTDistribution1DGate(const std::vector<double> P);
     FTDistribution1DGate(double omega);
 
-    FTDistribution1DGate* clone() const final;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double q) const final;
+    FTDistribution1DGate* clone() const override;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double q) const override;
 
-    double qSecondDerivative() const final;
+    double qSecondDerivative() const override;
 #ifndef SWIG
-    std::unique_ptr<IDistribution1DSampler> createSampler() const final;
+    std::unique_ptr<IDistribution1DSampler> createSampler() const override;
 #endif
 };
 
@@ -116,13 +116,13 @@ public:
     FTDistribution1DTriangle(const std::vector<double> P);
     FTDistribution1DTriangle(double omega);
 
-    FTDistribution1DTriangle* clone() const final;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double q) const final;
+    FTDistribution1DTriangle* clone() const override;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double q) const override;
 
-    double qSecondDerivative() const final;
+    double qSecondDerivative() const override;
 #ifndef SWIG
-    std::unique_ptr<IDistribution1DSampler> createSampler() const final;
+    std::unique_ptr<IDistribution1DSampler> createSampler() const override;
 #endif
 };
 
@@ -136,13 +136,13 @@ public:
     FTDistribution1DCosine(const std::vector<double> P);
     FTDistribution1DCosine(double omega);
 
-    FTDistribution1DCosine* clone() const final;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double q) const final;
+    FTDistribution1DCosine* clone() const override;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double q) const override;
 
-    double qSecondDerivative() const final;
+    double qSecondDerivative() const override;
 #ifndef SWIG
-    std::unique_ptr<IDistribution1DSampler> createSampler() const final;
+    std::unique_ptr<IDistribution1DSampler> createSampler() const override;
 #endif
 };
 
@@ -156,14 +156,14 @@ public:
     FTDistribution1DVoigt(const std::vector<double> P);
     FTDistribution1DVoigt(double omega, double eta);
 
-    FTDistribution1DVoigt* clone() const final;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double q) const final;
+    FTDistribution1DVoigt* clone() const override;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double q) const override;
     double eta() const { return m_eta; }
 
-    double qSecondDerivative() const final;
+    double qSecondDerivative() const override;
 #ifndef SWIG
-    std::unique_ptr<IDistribution1DSampler> createSampler() const final;
+    std::unique_ptr<IDistribution1DSampler> createSampler() const override;
 #endif
 
 protected:
diff --git a/Sample/Correlations/FTDistributions2D.h b/Sample/Correlations/FTDistributions2D.h
index 69e685c1ec8..d4d2d1e2ff4 100644
--- a/Sample/Correlations/FTDistributions2D.h
+++ b/Sample/Correlations/FTDistributions2D.h
@@ -67,11 +67,11 @@ public:
     FTDistribution2DCauchy(const std::vector<double> P);
     FTDistribution2DCauchy(double omega_x, double omega_y, double gamma);
 
-    FTDistribution2DCauchy* clone() const final;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double qx, double qy) const final;
+    FTDistribution2DCauchy* clone() const override;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double qx, double qy) const override;
 #ifndef SWIG
-    std::unique_ptr<IDistribution2DSampler> createSampler() const final;
+    std::unique_ptr<IDistribution2DSampler> createSampler() const override;
 #endif
 };
 
@@ -85,11 +85,11 @@ public:
     FTDistribution2DGauss(const std::vector<double> P);
     FTDistribution2DGauss(double omega_x, double omega_y, double gamma);
 
-    FTDistribution2DGauss* clone() const final;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double qx, double qy) const final;
+    FTDistribution2DGauss* clone() const override;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double qx, double qy) const override;
 #ifndef SWIG
-    std::unique_ptr<IDistribution2DSampler> createSampler() const final;
+    std::unique_ptr<IDistribution2DSampler> createSampler() const override;
 #endif
 };
 
@@ -103,11 +103,11 @@ public:
     FTDistribution2DGate(const std::vector<double> P);
     FTDistribution2DGate(double omega_x, double omega_y, double gamma);
 
-    FTDistribution2DGate* clone() const final;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double qx, double qy) const final;
+    FTDistribution2DGate* clone() const override;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double qx, double qy) const override;
 #ifndef SWIG
-    std::unique_ptr<IDistribution2DSampler> createSampler() const final;
+    std::unique_ptr<IDistribution2DSampler> createSampler() const override;
 #endif
 };
 
@@ -121,11 +121,11 @@ public:
     FTDistribution2DCone(const std::vector<double> P);
     FTDistribution2DCone(double omega_x, double omega_y, double gamma);
 
-    FTDistribution2DCone* clone() const final;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double qx, double qy) const final;
+    FTDistribution2DCone* clone() const override;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double qx, double qy) const override;
 #ifndef SWIG
-    std::unique_ptr<IDistribution2DSampler> createSampler() const final;
+    std::unique_ptr<IDistribution2DSampler> createSampler() const override;
 #endif
 };
 
@@ -138,12 +138,12 @@ public:
     FTDistribution2DVoigt(const std::vector<double> P);
     FTDistribution2DVoigt(double omega_x, double omega_y, double gamma, double eta);
 
-    FTDistribution2DVoigt* clone() const final;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double qx, double qy) const final;
+    FTDistribution2DVoigt* clone() const override;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double qx, double qy) const override;
     double eta() const { return m_eta; }
 #ifndef SWIG
-    std::unique_ptr<IDistribution2DSampler> createSampler() const final;
+    std::unique_ptr<IDistribution2DSampler> createSampler() const override;
 #endif
 
 protected:
diff --git a/Sample/Correlations/IDistribution1DSampler.h b/Sample/Correlations/IDistribution1DSampler.h
index bf3674bd298..b3aac351d6e 100644
--- a/Sample/Correlations/IDistribution1DSampler.h
+++ b/Sample/Correlations/IDistribution1DSampler.h
@@ -31,7 +31,7 @@ public:
 class Distribution1DCauchySampler : public IDistribution1DSampler {
 public:
     Distribution1DCauchySampler(double lambda) : m_lambda(lambda) {}
-    double randomSample() const final;
+    double randomSample() const override;
 
 private:
     double m_lambda;
@@ -40,7 +40,7 @@ private:
 class Distribution1DGaussSampler : public IDistribution1DSampler {
 public:
     Distribution1DGaussSampler(double mean, double stddev) : m_mean(mean), m_stddev(stddev) {}
-    double randomSample() const final;
+    double randomSample() const override;
 
 private:
     double m_mean, m_stddev;
@@ -49,7 +49,7 @@ private:
 class Distribution1DGateSampler : public IDistribution1DSampler {
 public:
     Distribution1DGateSampler(double a, double b) : m_a(a), m_b(b) {}
-    double randomSample() const final;
+    double randomSample() const override;
 
 private:
     double m_a, m_b; // the left and right limits of the Gate (Uniform) distribution
@@ -58,7 +58,7 @@ private:
 class Distribution1DTriangleSampler : public IDistribution1DSampler {
 public:
     Distribution1DTriangleSampler(double omega) : m_omega(omega) {}
-    double randomSample() const final;
+    double randomSample() const override;
 
 private:
     double m_omega; // half the base of the symmetrical Triangle distribution
@@ -67,7 +67,7 @@ private:
 class Distribution1DCosineSampler : public IDistribution1DSampler {
 public:
     Distribution1DCosineSampler(double omega) : m_omega(omega) {}
-    double randomSample() const final;
+    double randomSample() const override;
 
 private:
     double m_omega;
diff --git a/Sample/Correlations/IDistribution2DSampler.h b/Sample/Correlations/IDistribution2DSampler.h
index 136debcf8ca..4a19d6def82 100644
--- a/Sample/Correlations/IDistribution2DSampler.h
+++ b/Sample/Correlations/IDistribution2DSampler.h
@@ -36,7 +36,7 @@ public:
         : m_omega_x(omega_x), m_omega_y(omega_y)
     {
     }
-    std::pair<double, double> randomSample() const final;
+    std::pair<double, double> randomSample() const override;
 
 private:
     double m_omega_x, m_omega_y;
@@ -48,7 +48,7 @@ public:
         : m_omega_x(omega_x), m_omega_y(omega_y)
     {
     }
-    std::pair<double, double> randomSample() const final;
+    std::pair<double, double> randomSample() const override;
 
 private:
     double m_omega_x, m_omega_y;
@@ -60,7 +60,7 @@ public:
         : m_omega_x(omega_x), m_omega_y(omega_y)
     {
     }
-    std::pair<double, double> randomSample() const final;
+    std::pair<double, double> randomSample() const override;
 
 private:
     double m_omega_x, m_omega_y;
@@ -72,7 +72,7 @@ public:
         : m_omega_x(omega_x), m_omega_y(omega_y)
     {
     }
-    std::pair<double, double> randomSample() const final;
+    std::pair<double, double> randomSample() const override;
 
 private:
     double m_omega_x, m_omega_y;
diff --git a/Sample/Fresnel/MatrixFresnelMap.h b/Sample/Fresnel/MatrixFresnelMap.h
index 26968eb4862..b1036324e0d 100644
--- a/Sample/Fresnel/MatrixFresnelMap.h
+++ b/Sample/Fresnel/MatrixFresnelMap.h
@@ -43,9 +43,9 @@ public:
     MatrixFresnelMap& operator=(const MatrixFresnelMap& other) = delete;
 
     std::unique_ptr<const ILayerRTCoefficients>
-    getOutCoefficients(const SimulationElement& sim_element, size_t layer_index) const final;
+    getOutCoefficients(const SimulationElement& sim_element, size_t layer_index) const override;
 
-    void setSlices(const std::vector<Slice>& slices) final;
+    void setSlices(const std::vector<Slice>& slices) override;
 
 private:
     //! Provides a hash function for a 3-vector of doubles, for use in MatrixFresnelMap.
diff --git a/Sample/HardParticle/FormFactorAnisoPyramid.h b/Sample/HardParticle/FormFactorAnisoPyramid.h
index 14d2e05d4ad..5979dfc196b 100644
--- a/Sample/HardParticle/FormFactorAnisoPyramid.h
+++ b/Sample/HardParticle/FormFactorAnisoPyramid.h
@@ -29,7 +29,7 @@ public:
     {
         return new FormFactorAnisoPyramid(m_length, m_width, m_height, m_alpha);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getLength() const { return m_length; }
     double getWidth() const { return m_width; }
@@ -38,9 +38,9 @@ public:
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     static const PolyhedralTopology topology;
diff --git a/Sample/HardParticle/FormFactorBar.h b/Sample/HardParticle/FormFactorBar.h
index 2f186b519d6..da6d0a293db 100644
--- a/Sample/HardParticle/FormFactorBar.h
+++ b/Sample/HardParticle/FormFactorBar.h
@@ -28,11 +28,11 @@ class FormFactorBarGauss : public IProfileRectangularRipple {
 public:
     FormFactorBarGauss(const std::vector<double> P);
     FormFactorBarGauss(double length, double width, double height);
-    FormFactorBarGauss* clone() const final;
-    void accept(INodeVisitor* visitor) const final;
+    FormFactorBarGauss* clone() const override;
+    void accept(INodeVisitor* visitor) const override;
 
 private:
-    complex_t factor_x(complex_t qx) const final;
+    complex_t factor_x(complex_t qx) const override;
 };
 
 //! The form factor of an elongated, with Lorentz form factor in elongation direction.
@@ -41,11 +41,11 @@ class FormFactorBarLorentz : public IProfileRectangularRipple {
 public:
     FormFactorBarLorentz(const std::vector<double> P);
     FormFactorBarLorentz(double length, double width, double height);
-    FormFactorBarLorentz* clone() const final;
-    void accept(INodeVisitor* visitor) const final;
+    FormFactorBarLorentz* clone() const override;
+    void accept(INodeVisitor* visitor) const override;
 
 private:
-    complex_t factor_x(complex_t qx) const final;
+    complex_t factor_x(complex_t qx) const override;
 };
 
 #endif // BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORBAR_H
diff --git a/Sample/HardParticle/FormFactorBox.h b/Sample/HardParticle/FormFactorBox.h
index 3371459f582..5152257095a 100644
--- a/Sample/HardParticle/FormFactorBox.h
+++ b/Sample/HardParticle/FormFactorBox.h
@@ -25,23 +25,23 @@ public:
     FormFactorBox(const std::vector<double> P);
     FormFactorBox(double length, double width, double height);
 
-    FormFactorBox* clone() const final { return new FormFactorBox(m_length, m_width, m_height); }
+    FormFactorBox* clone() const override { return new FormFactorBox(m_length, m_width, m_height); }
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getLength() const { return m_length; }
     double getWidth() const { return m_width; }
 
-    double volume() const final { return m_length * m_height * m_width; }
-    double radialExtension() const final { return m_length / 2.0; }
-    complex_t evaluate_for_q(cvector_t q) const final;
+    double volume() const override { return m_length * m_height * m_width; }
+    double radialExtension() const override { return m_length / 2.0; }
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
-    double height() const final { return m_height; }
+    void onChange() override;
+    double height() const override { return m_height; }
 
 private:
     const double& m_length;
diff --git a/Sample/HardParticle/FormFactorCantellatedCube.h b/Sample/HardParticle/FormFactorCantellatedCube.h
index 9b589a61483..7fec2e8f18b 100644
--- a/Sample/HardParticle/FormFactorCantellatedCube.h
+++ b/Sample/HardParticle/FormFactorCantellatedCube.h
@@ -29,13 +29,13 @@ public:
     {
         return new FormFactorCantellatedCube(m_length, m_removed_length);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getLength() const { return m_length; }
     double getRemovedLength() const { return m_removed_length; }
 
 protected:
-    void onChange() final;
+    void onChange() override;
 
 private:
     static const PolyhedralTopology topology;
diff --git a/Sample/HardParticle/FormFactorCone.h b/Sample/HardParticle/FormFactorCone.h
index e7f63af8ed7..c1a7effec99 100644
--- a/Sample/HardParticle/FormFactorCone.h
+++ b/Sample/HardParticle/FormFactorCone.h
@@ -25,22 +25,22 @@ public:
     FormFactorCone(const std::vector<double> P);
     FormFactorCone(double radius, double height, double alpha);
 
-    FormFactorCone* clone() const final { return new FormFactorCone(m_radius, m_height, m_alpha); }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    FormFactorCone* clone() const override { return new FormFactorCone(m_radius, m_height, m_alpha); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getHeight() const { return m_height; }
     double getAlpha() const { return m_alpha; }
     double getRadius() const { return m_radius; }
 
-    double radialExtension() const final { return m_radius; }
+    double radialExtension() const override { return m_radius; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     complex_t Integrand(double Z) const;
diff --git a/Sample/HardParticle/FormFactorCone6.h b/Sample/HardParticle/FormFactorCone6.h
index f61aa8f836d..dc0acb4ffd7 100644
--- a/Sample/HardParticle/FormFactorCone6.h
+++ b/Sample/HardParticle/FormFactorCone6.h
@@ -29,7 +29,7 @@ public:
     {
         return new FormFactorCone6(m_base_edge, m_height, m_alpha);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getBaseEdge() const { return m_base_edge; }
     double getHeight() const { return m_height; }
@@ -37,9 +37,9 @@ public:
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     static const PolyhedralTopology topology;
diff --git a/Sample/HardParticle/FormFactorCosineRipple.h b/Sample/HardParticle/FormFactorCosineRipple.h
index 205bff8a2a9..e4ede199c8e 100644
--- a/Sample/HardParticle/FormFactorCosineRipple.h
+++ b/Sample/HardParticle/FormFactorCosineRipple.h
@@ -23,11 +23,11 @@ class FormFactorCosineRippleBox : public ICosineRipple {
 public:
     FormFactorCosineRippleBox(const std::vector<double> P);
     FormFactorCosineRippleBox(double length, double width, double height);
-    FormFactorCosineRippleBox* clone() const final;
-    void accept(INodeVisitor* visitor) const final;
+    FormFactorCosineRippleBox* clone() const override;
+    void accept(INodeVisitor* visitor) const override;
 
 private:
-    complex_t factor_x(complex_t qx) const final;
+    complex_t factor_x(complex_t qx) const override;
 };
 
 //! The form factor for a cosine ripple, with Gaussian profile in elongation direction.
@@ -36,11 +36,11 @@ class FormFactorCosineRippleGauss : public ICosineRipple {
 public:
     FormFactorCosineRippleGauss(const std::vector<double> P);
     FormFactorCosineRippleGauss(double length, double width, double height);
-    FormFactorCosineRippleGauss* clone() const final;
-    void accept(INodeVisitor* visitor) const final;
+    FormFactorCosineRippleGauss* clone() const override;
+    void accept(INodeVisitor* visitor) const override;
 
 private:
-    complex_t factor_x(complex_t qx) const final;
+    complex_t factor_x(complex_t qx) const override;
 };
 
 //! The form factor for a cosine ripple, with Lorentz form factor in elongation direction.
@@ -49,11 +49,11 @@ class FormFactorCosineRippleLorentz : public ICosineRipple {
 public:
     FormFactorCosineRippleLorentz(const std::vector<double> P);
     FormFactorCosineRippleLorentz(double length, double width, double height);
-    FormFactorCosineRippleLorentz* clone() const final;
-    void accept(INodeVisitor* visitor) const final;
+    FormFactorCosineRippleLorentz* clone() const override;
+    void accept(INodeVisitor* visitor) const override;
 
 private:
-    complex_t factor_x(complex_t qx) const final;
+    complex_t factor_x(complex_t qx) const override;
 };
 
 #endif // BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORCOSINERIPPLE_H
diff --git a/Sample/HardParticle/FormFactorCuboctahedron.h b/Sample/HardParticle/FormFactorCuboctahedron.h
index c50cae16663..690ebf17047 100644
--- a/Sample/HardParticle/FormFactorCuboctahedron.h
+++ b/Sample/HardParticle/FormFactorCuboctahedron.h
@@ -29,7 +29,7 @@ public:
     {
         return new FormFactorCuboctahedron(m_length, m_height, m_height_ratio, m_alpha);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getLength() const { return m_length; }
     double getHeight() const { return m_height; }
@@ -38,9 +38,9 @@ public:
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     static const PolyhedralTopology topology;
diff --git a/Sample/HardParticle/FormFactorCylinder.h b/Sample/HardParticle/FormFactorCylinder.h
index 827a70f68e1..2ce0d5de923 100644
--- a/Sample/HardParticle/FormFactorCylinder.h
+++ b/Sample/HardParticle/FormFactorCylinder.h
@@ -25,21 +25,21 @@ public:
     FormFactorCylinder(const std::vector<double> P);
     FormFactorCylinder(double radius, double height);
 
-    FormFactorCylinder* clone() const final { return new FormFactorCylinder(m_radius, m_height); }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    FormFactorCylinder* clone() const override { return new FormFactorCylinder(m_radius, m_height); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getHeight() const { return m_height; }
     double getRadius() const { return m_radius; }
 
-    double radialExtension() const final { return m_radius; }
+    double radialExtension() const override { return m_radius; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     const double& m_radius;
diff --git a/Sample/HardParticle/FormFactorDodecahedron.h b/Sample/HardParticle/FormFactorDodecahedron.h
index 14957390458..92fcd03ef2d 100644
--- a/Sample/HardParticle/FormFactorDodecahedron.h
+++ b/Sample/HardParticle/FormFactorDodecahedron.h
@@ -25,13 +25,13 @@ public:
     FormFactorDodecahedron(const std::vector<double> P);
     FormFactorDodecahedron(double edge);
 
-    FormFactorDodecahedron* clone() const final { return new FormFactorDodecahedron(m_edge); }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    FormFactorDodecahedron* clone() const override { return new FormFactorDodecahedron(m_edge); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getEdge() const { return m_edge; }
 
 protected:
-    void onChange() final;
+    void onChange() override;
 
 private:
     static const PolyhedralTopology topology;
diff --git a/Sample/HardParticle/FormFactorDot.h b/Sample/HardParticle/FormFactorDot.h
index 1af3368efea..aab06cfa92d 100644
--- a/Sample/HardParticle/FormFactorDot.h
+++ b/Sample/HardParticle/FormFactorDot.h
@@ -25,20 +25,20 @@ public:
     FormFactorDot(const std::vector<double> P);
     FormFactorDot(double radius);
 
-    FormFactorDot* clone() const final { return new FormFactorDot(m_radius); }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    FormFactorDot* clone() const override { return new FormFactorDot(m_radius); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getRadius() const { return m_radius; }
 
-    double radialExtension() const final { return 0; }
+    double radialExtension() const override { return 0; }
 
-    double bottomZ(const IRotation&) const final { return 0; }
-    double topZ(const IRotation&) const final { return 0; }
+    double bottomZ(const IRotation&) const override { return 0; }
+    double topZ(const IRotation&) const override { return 0; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
-    bool canSliceAnalytically(const IRotation&) const final { return false; }
+    bool canSliceAnalytically(const IRotation&) const override { return false; }
 
 private:
     const double& m_radius;
diff --git a/Sample/HardParticle/FormFactorEllipsoidalCylinder.h b/Sample/HardParticle/FormFactorEllipsoidalCylinder.h
index 154415359aa..cfc89d02220 100644
--- a/Sample/HardParticle/FormFactorEllipsoidalCylinder.h
+++ b/Sample/HardParticle/FormFactorEllipsoidalCylinder.h
@@ -29,21 +29,21 @@ public:
     {
         return new FormFactorEllipsoidalCylinder(m_radius_x, m_radius_y, m_height);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getRadiusX() const { return m_radius_x; }
     double getRadiusY() const { return m_radius_y; }
     double getHeight() const { return m_height; }
 
-    double radialExtension() const final;
+    double radialExtension() const override;
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     const double& m_radius_x;
diff --git a/Sample/HardParticle/FormFactorFullSphere.h b/Sample/HardParticle/FormFactorFullSphere.h
index 2f22ea0523b..068b2faaa2c 100644
--- a/Sample/HardParticle/FormFactorFullSphere.h
+++ b/Sample/HardParticle/FormFactorFullSphere.h
@@ -29,25 +29,25 @@ public:
     {
         return new FormFactorFullSphere(m_radius, m_position_at_center);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getRadius() const { return m_radius; }
 
-    double radialExtension() const final { return m_radius; }
+    double radialExtension() const override { return m_radius; }
 
-    double bottomZ(const IRotation& rotation) const final;
+    double bottomZ(const IRotation& rotation) const override;
 
-    double topZ(const IRotation& rotation) const final;
+    double topZ(const IRotation& rotation) const override;
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
-    bool canSliceAnalytically(const IRotation&) const final { return true; }
+    bool canSliceAnalytically(const IRotation&) const override { return true; }
 
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     const double& m_radius;
diff --git a/Sample/HardParticle/FormFactorFullSpheroid.h b/Sample/HardParticle/FormFactorFullSpheroid.h
index 900497ac913..93d0f140da0 100644
--- a/Sample/HardParticle/FormFactorFullSpheroid.h
+++ b/Sample/HardParticle/FormFactorFullSpheroid.h
@@ -29,20 +29,20 @@ public:
     {
         return new FormFactorFullSpheroid(m_radius, m_height);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getHeight() const { return m_height; }
     double getRadius() const { return m_radius; }
 
-    double radialExtension() const final { return m_radius; }
+    double radialExtension() const override { return m_radius; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     const double& m_radius;
diff --git a/Sample/HardParticle/FormFactorHemiEllipsoid.h b/Sample/HardParticle/FormFactorHemiEllipsoid.h
index 903947311c9..a37ce1a7be1 100644
--- a/Sample/HardParticle/FormFactorHemiEllipsoid.h
+++ b/Sample/HardParticle/FormFactorHemiEllipsoid.h
@@ -31,18 +31,18 @@ public:
     {
         return new FormFactorHemiEllipsoid(m_radius_x, m_radius_y, m_height);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getHeight() const { return m_height; }
     double getRadiusX() const { return m_radius_x; }
     double getRadiusY() const { return m_radius_y; }
 
-    double radialExtension() const final;
+    double radialExtension() const override;
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
-    void onChange() final;
+    void onChange() override;
 
 private:
     complex_t Integrand(double Z) const;
diff --git a/Sample/HardParticle/FormFactorHollowSphere.h b/Sample/HardParticle/FormFactorHollowSphere.h
index fa6f3ff0b05..d04fee540c7 100644
--- a/Sample/HardParticle/FormFactorHollowSphere.h
+++ b/Sample/HardParticle/FormFactorHollowSphere.h
@@ -29,14 +29,14 @@ public:
     {
         return new FormFactorHollowSphere(m_mean, m_full_width);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    double radialExtension() const final { return m_mean; }
+    double radialExtension() const override { return m_mean; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
-    void onChange() final;
+    void onChange() override;
 
 private:
     bool checkParameters() const;
diff --git a/Sample/HardParticle/FormFactorIcosahedron.h b/Sample/HardParticle/FormFactorIcosahedron.h
index ef5ac6f6d34..76dcdd8a440 100644
--- a/Sample/HardParticle/FormFactorIcosahedron.h
+++ b/Sample/HardParticle/FormFactorIcosahedron.h
@@ -25,13 +25,13 @@ public:
     FormFactorIcosahedron(const std::vector<double> P);
     FormFactorIcosahedron(double edge);
 
-    FormFactorIcosahedron* clone() const final { return new FormFactorIcosahedron(m_edge); }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    FormFactorIcosahedron* clone() const override { return new FormFactorIcosahedron(m_edge); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getEdge() const { return m_edge; }
 
 protected:
-    void onChange() final;
+    void onChange() override;
 
 private:
     static const PolyhedralTopology topology;
diff --git a/Sample/HardParticle/FormFactorLongBoxGauss.h b/Sample/HardParticle/FormFactorLongBoxGauss.h
index c39b99c0dbd..c303c41962b 100644
--- a/Sample/HardParticle/FormFactorLongBoxGauss.h
+++ b/Sample/HardParticle/FormFactorLongBoxGauss.h
@@ -29,20 +29,20 @@ public:
     {
         return new FormFactorLongBoxGauss(m_length, m_width, m_height);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getLength() const { return m_length; }
     double getHeight() const { return m_height; }
     double getWidth() const { return m_width; }
-    double radialExtension() const final { return m_length / 2.0; }
+    double radialExtension() const override { return m_length / 2.0; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     const double& m_length;
diff --git a/Sample/HardParticle/FormFactorLongBoxLorentz.h b/Sample/HardParticle/FormFactorLongBoxLorentz.h
index 75633706986..ca83b73220a 100644
--- a/Sample/HardParticle/FormFactorLongBoxLorentz.h
+++ b/Sample/HardParticle/FormFactorLongBoxLorentz.h
@@ -29,21 +29,21 @@ public:
     {
         return new FormFactorLongBoxLorentz(m_length, m_width, m_height);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getLength() const { return m_length; }
     double getHeight() const { return m_height; }
     double getWidth() const { return m_width; }
 
-    double radialExtension() const final { return m_length / 2.0; }
+    double radialExtension() const override { return m_length / 2.0; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     const double& m_length;
diff --git a/Sample/HardParticle/FormFactorPrism3.h b/Sample/HardParticle/FormFactorPrism3.h
index 24b00b9777b..0fe5b69897e 100644
--- a/Sample/HardParticle/FormFactorPrism3.h
+++ b/Sample/HardParticle/FormFactorPrism3.h
@@ -25,17 +25,17 @@ public:
     FormFactorPrism3(const std::vector<double> P);
     FormFactorPrism3(double base_edge, double height);
 
-    FormFactorPrism3* clone() const final { return new FormFactorPrism3(m_base_edge, m_height); }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    FormFactorPrism3* clone() const override { return new FormFactorPrism3(m_base_edge, m_height); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getBaseEdge() const { return m_base_edge; }
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
-    double height() const final { return m_height; }
+    void onChange() override;
+    double height() const override { return m_height; }
 
 private:
     const double& m_base_edge;
diff --git a/Sample/HardParticle/FormFactorPrism6.h b/Sample/HardParticle/FormFactorPrism6.h
index 3c145695358..b5cfa9a44ca 100644
--- a/Sample/HardParticle/FormFactorPrism6.h
+++ b/Sample/HardParticle/FormFactorPrism6.h
@@ -25,17 +25,17 @@ public:
     FormFactorPrism6(const std::vector<double> P);
     FormFactorPrism6(double base_edge, double height);
 
-    FormFactorPrism6* clone() const final { return new FormFactorPrism6(m_base_edge, m_height); }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    FormFactorPrism6* clone() const override { return new FormFactorPrism6(m_base_edge, m_height); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getBaseEdge() const { return m_base_edge; }
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
-    double height() const final { return m_height; }
+    void onChange() override;
+    double height() const override { return m_height; }
 
 private:
     const double& m_base_edge;
diff --git a/Sample/HardParticle/FormFactorPyramid.h b/Sample/HardParticle/FormFactorPyramid.h
index 56ca2d16fe9..6962d633cc0 100644
--- a/Sample/HardParticle/FormFactorPyramid.h
+++ b/Sample/HardParticle/FormFactorPyramid.h
@@ -29,7 +29,7 @@ public:
     {
         return new FormFactorPyramid(m_base_edge, m_height, m_alpha);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getHeight() const { return m_height; }
     double getBaseEdge() const { return m_base_edge; }
@@ -37,9 +37,9 @@ public:
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     static const PolyhedralTopology topology;
diff --git a/Sample/HardParticle/FormFactorSawtoothRipple.h b/Sample/HardParticle/FormFactorSawtoothRipple.h
index 44a39c8a811..32ad80a5f41 100644
--- a/Sample/HardParticle/FormFactorSawtoothRipple.h
+++ b/Sample/HardParticle/FormFactorSawtoothRipple.h
@@ -23,11 +23,11 @@ class FormFactorSawtoothRippleBox : public ISawtoothRipple {
 public:
     FormFactorSawtoothRippleBox(const std::vector<double> P);
     FormFactorSawtoothRippleBox(double length, double width, double height, double asymmetry);
-    FormFactorSawtoothRippleBox* clone() const final;
-    void accept(INodeVisitor* visitor) const final;
+    FormFactorSawtoothRippleBox* clone() const override;
+    void accept(INodeVisitor* visitor) const override;
 
 private:
-    complex_t factor_x(complex_t qx) const final;
+    complex_t factor_x(complex_t qx) const override;
 };
 
 //! The form factor for a cosine ripple, with Gaussian profile in elongation direction.
@@ -36,11 +36,11 @@ class FormFactorSawtoothRippleGauss : public ISawtoothRipple {
 public:
     FormFactorSawtoothRippleGauss(const std::vector<double> P);
     FormFactorSawtoothRippleGauss(double length, double width, double height, double asymmetry);
-    FormFactorSawtoothRippleGauss* clone() const final;
-    void accept(INodeVisitor* visitor) const final;
+    FormFactorSawtoothRippleGauss* clone() const override;
+    void accept(INodeVisitor* visitor) const override;
 
 private:
-    complex_t factor_x(complex_t qx) const final;
+    complex_t factor_x(complex_t qx) const override;
 };
 
 //! The form factor for a cosine ripple, with Lorentz form factor in elongation direction.
@@ -49,11 +49,11 @@ class FormFactorSawtoothRippleLorentz : public ISawtoothRipple {
 public:
     FormFactorSawtoothRippleLorentz(const std::vector<double> P);
     FormFactorSawtoothRippleLorentz(double length, double width, double height, double asymmetry);
-    FormFactorSawtoothRippleLorentz* clone() const final;
-    void accept(INodeVisitor* visitor) const final;
+    FormFactorSawtoothRippleLorentz* clone() const override;
+    void accept(INodeVisitor* visitor) const override;
 
 private:
-    complex_t factor_x(complex_t qx) const final;
+    complex_t factor_x(complex_t qx) const override;
 };
 
 #endif // BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORSAWTOOTHRIPPLE_H
diff --git a/Sample/HardParticle/FormFactorTetrahedron.h b/Sample/HardParticle/FormFactorTetrahedron.h
index e7b774b4e53..967b13e60bb 100644
--- a/Sample/HardParticle/FormFactorTetrahedron.h
+++ b/Sample/HardParticle/FormFactorTetrahedron.h
@@ -29,7 +29,7 @@ public:
     {
         return new FormFactorTetrahedron(m_base_edge, m_height, m_alpha);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getBaseEdge() const { return m_base_edge; }
     double getHeight() const { return m_height; }
@@ -37,9 +37,9 @@ public:
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     static const PolyhedralTopology topology;
diff --git a/Sample/HardParticle/FormFactorTruncatedCube.h b/Sample/HardParticle/FormFactorTruncatedCube.h
index 5bac041d20d..dc32159ba98 100644
--- a/Sample/HardParticle/FormFactorTruncatedCube.h
+++ b/Sample/HardParticle/FormFactorTruncatedCube.h
@@ -29,13 +29,13 @@ public:
     {
         return new FormFactorTruncatedCube(m_length, m_removed_length);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getLength() const { return m_length; }
     double getRemovedLength() const { return m_removed_length; }
 
 protected:
-    void onChange() final;
+    void onChange() override;
 
 private:
     static const PolyhedralTopology topology;
diff --git a/Sample/HardParticle/FormFactorTruncatedSphere.h b/Sample/HardParticle/FormFactorTruncatedSphere.h
index a8cf3ca102e..cd5570e75b6 100644
--- a/Sample/HardParticle/FormFactorTruncatedSphere.h
+++ b/Sample/HardParticle/FormFactorTruncatedSphere.h
@@ -29,21 +29,21 @@ public:
     {
         return new FormFactorTruncatedSphere(m_radius, m_height, m_dh);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getHeight() const { return m_height; }
     double getRadius() const { return m_radius; }
     double getRemovedTop() const { return m_dh; }
 
-    double radialExtension() const final { return m_radius; }
+    double radialExtension() const override { return m_radius; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     bool check_initialization() const;
diff --git a/Sample/HardParticle/FormFactorTruncatedSpheroid.h b/Sample/HardParticle/FormFactorTruncatedSpheroid.h
index bda53e5225e..b31818a9606 100644
--- a/Sample/HardParticle/FormFactorTruncatedSpheroid.h
+++ b/Sample/HardParticle/FormFactorTruncatedSpheroid.h
@@ -30,22 +30,22 @@ public:
     {
         return new FormFactorTruncatedSpheroid(m_radius, m_height, m_height_flattening, m_dh);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getRadius() const { return m_radius; }
     double getHeight() const { return m_height; }
     double getHeightFlattening() const { return m_height_flattening; }
     double getRemovedTop() const { return m_dh; }
 
-    double radialExtension() const final { return m_radius; }
+    double radialExtension() const override { return m_radius; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     bool check_initialization() const;
diff --git a/Sample/HardParticle/IFormFactorPolyhedron.h b/Sample/HardParticle/IFormFactorPolyhedron.h
index 39f58abd8ea..0c00fb9fecd 100644
--- a/Sample/HardParticle/IFormFactorPolyhedron.h
+++ b/Sample/HardParticle/IFormFactorPolyhedron.h
@@ -34,14 +34,14 @@ public:
     IFormFactorPolyhedron(const NodeMeta& meta, const std::vector<double>& PValues);
     ~IFormFactorPolyhedron();
 
-    double bottomZ(const IRotation& rotation) const final;
-    double topZ(const IRotation& rotation) const final;
+    double bottomZ(const IRotation& rotation) const override;
+    double topZ(const IRotation& rotation) const override;
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
     complex_t evaluate_centered(cvector_t q) const;
 
-    double volume() const final;
-    double radialExtension() const final;
+    double volume() const override;
+    double radialExtension() const override;
     void assert_platonic() const;
 
 protected:
diff --git a/Sample/HardParticle/IFormFactorPrism.h b/Sample/HardParticle/IFormFactorPrism.h
index 5156501e7ea..e8bebfb6e37 100644
--- a/Sample/HardParticle/IFormFactorPrism.h
+++ b/Sample/HardParticle/IFormFactorPrism.h
@@ -28,8 +28,8 @@ public:
     IFormFactorPrism(const NodeMeta& meta, const std::vector<double>& PValues);
     ~IFormFactorPrism();
 
-    double bottomZ(const IRotation& rotation) const final;
-    double topZ(const IRotation& rotation) const final;
+    double bottomZ(const IRotation& rotation) const override;
+    double topZ(const IRotation& rotation) const override;
 
     complex_t evaluate_for_q(cvector_t q) const override;
     double volume() const override;
diff --git a/Sample/HardParticle/IProfileRipple.h b/Sample/HardParticle/IProfileRipple.h
index 1755717e3b8..55000f359b2 100644
--- a/Sample/HardParticle/IProfileRipple.h
+++ b/Sample/HardParticle/IProfileRipple.h
@@ -28,9 +28,9 @@ public:
     double getHeight() const { return m_height; }
     double getWidth() const { return m_width; }
 
-    double radialExtension() const final;
+    double radialExtension() const override;
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
     const double& m_length;
@@ -49,8 +49,8 @@ public:
     IProfileRectangularRipple(const NodeMeta& meta, const std::vector<double>& PValues);
 
 private:
-    virtual void onChange() final;
-    complex_t factor_yz(complex_t qy, complex_t qz) const final;
+    virtual void onChange() override;
+    complex_t factor_yz(complex_t qy, complex_t qz) const override;
 };
 
 //! Base class for form factors with a cosine ripple profile in the yz plane.
@@ -60,8 +60,8 @@ public:
     ICosineRipple(const NodeMeta& meta, const std::vector<double>& PValues);
 
 private:
-    virtual void onChange() final;
-    complex_t factor_yz(complex_t qy, complex_t qz) const final;
+    virtual void onChange() override;
+    complex_t factor_yz(complex_t qy, complex_t qz) const override;
 };
 
 //! Base class for form factors with a triangular ripple profile in the yz plane.
@@ -76,8 +76,8 @@ protected:
     const double& m_asymmetry;
 
 private:
-    virtual void onChange() final;
-    complex_t factor_yz(complex_t qy, complex_t qz) const final;
+    virtual void onChange() override;
+    complex_t factor_yz(complex_t qy, complex_t qz) const override;
 };
 
 #endif // BORNAGAIN_SAMPLE_HARDPARTICLE_IPROFILERIPPLE_H
diff --git a/Sample/Lattice/Lattice2D.h b/Sample/Lattice/Lattice2D.h
index af0695a787a..7ef30a3d310 100644
--- a/Sample/Lattice/Lattice2D.h
+++ b/Sample/Lattice/Lattice2D.h
@@ -44,7 +44,7 @@ public:
     void setRotationEnabled(bool enabled);
 
 protected:
-    virtual void onChange();
+    virtual void onChange() override;
     double m_xi;
 };
 
@@ -56,12 +56,12 @@ public:
 
     BasicLattice2D* clone() const;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    virtual double length1() const { return m_length1; }
-    virtual double length2() const { return m_length2; }
-    virtual double latticeAngle() const { return m_angle; }
-    virtual double unitCellArea() const;
+    double length1() const override { return m_length1; }
+    double length2() const override { return m_length2; }
+    double latticeAngle() const override { return m_angle; }
+    double unitCellArea() const override;
 
 private:
     double m_length1, m_length2;
@@ -76,12 +76,12 @@ public:
 
     SquareLattice2D* clone() const;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    virtual double length1() const { return m_length; }
-    virtual double length2() const { return m_length; }
-    virtual double latticeAngle() const;
-    virtual double unitCellArea() const;
+    double length1() const override { return m_length; }
+    double length2() const override { return m_length; }
+    double latticeAngle() const override ;
+    double unitCellArea() const override ;
 
 private:
     double m_length;
@@ -95,12 +95,12 @@ public:
 
     HexagonalLattice2D* clone() const;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    virtual double length1() const { return m_length; }
-    virtual double length2() const { return m_length; }
-    virtual double latticeAngle() const;
-    virtual double unitCellArea() const;
+    double length1() const override { return m_length; }
+    double length2() const override { return m_length; }
+    double latticeAngle() const override;
+    double unitCellArea() const override;
 
 private:
     double m_length;
diff --git a/Sample/Material/MagneticMaterialImpl.h b/Sample/Material/MagneticMaterialImpl.h
index 566b68cd1cf..c34d515fb00 100644
--- a/Sample/Material/MagneticMaterialImpl.h
+++ b/Sample/Material/MagneticMaterialImpl.h
@@ -41,21 +41,21 @@ public:
     MagneticMaterialImpl* clone() const override = 0;
 
     //! Constructs a material with inverted magnetization
-    MagneticMaterialImpl* inverted() const final;
+    MagneticMaterialImpl* inverted() const override;
 
     //! Indicates whether the interaction with the material is scalar.
     //! This means that different polarization states will be diffracted equally
-    bool isScalarMaterial() const final;
+    bool isScalarMaterial() const override;
 
-    bool isMagneticMaterial() const final;
+    bool isMagneticMaterial() const override;
 
     //! Returns the magnetization (in A/m)
-    kvector_t magnetization() const final;
+    kvector_t magnetization() const override;
 
     //! Returns (\f$ \pi/\lambda^2 \f$ - sld) matrix with magnetization corrections
-    Eigen::Matrix2cd polarizedSubtrSLD(const WavevectorInfo& wavevectors) const final;
+    Eigen::Matrix2cd polarizedSubtrSLD(const WavevectorInfo& wavevectors) const override;
 
-    MagneticMaterialImpl* rotatedMaterial(const Transform3D& transform) const final;
+    MagneticMaterialImpl* rotatedMaterial(const Transform3D& transform) const override;
 
 private:
     void setMagnetization(kvector_t magnetization) { m_magnetization = magnetization; }
diff --git a/Sample/Multilayer/Layer.h b/Sample/Multilayer/Layer.h
index eb03d7f226c..b06ce65286c 100644
--- a/Sample/Multilayer/Layer.h
+++ b/Sample/Multilayer/Layer.h
@@ -31,19 +31,19 @@ public:
 
     ~Layer() override;
 
-    Layer* clone() const final;
+    Layer* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double thickness() const { return m_thickness; }
 
-    const Material* material() const final { return &m_material; }
+    const Material* material() const override { return &m_material; }
 
     void addLayout(const ParticleLayout& decoration);
     size_t numberOfLayouts() const { return m_layouts.size(); }
     std::vector<const ParticleLayout*> layouts() const;
 
-    std::vector<const INode*> getChildren() const final;
+    std::vector<const INode*> getChildren() const override;
 
     void registerThickness(bool make_registered = true);
 
diff --git a/Sample/Multilayer/MultiLayer.h b/Sample/Multilayer/MultiLayer.h
index fb7b3629c83..c2c9b1ccfe2 100644
--- a/Sample/Multilayer/MultiLayer.h
+++ b/Sample/Multilayer/MultiLayer.h
@@ -43,9 +43,9 @@ public:
     MultiLayer();
     ~MultiLayer() override;
 
-    MultiLayer* clone() const final;
+    MultiLayer* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     size_t numberOfLayers() const { return m_layers.size(); }
 
@@ -69,7 +69,7 @@ public:
     //! Returns the external field applied to the multilayer (units: A/m)
     kvector_t externalField() const { return m_ext_field; }
 
-    std::vector<const INode*> getChildren() const final;
+    std::vector<const INode*> getChildren() const override;
 
 private:
     //! Adds the layer with simultaneous registration in parent class
diff --git a/Sample/Particle/Crystal.h b/Sample/Particle/Crystal.h
index 2ec80195507..083ff5eb522 100644
--- a/Sample/Particle/Crystal.h
+++ b/Sample/Particle/Crystal.h
@@ -37,9 +37,9 @@ public:
     Crystal(const IParticle& basis, const Lattice3D& lattice, double position_variance = 0);
     ~Crystal();
 
-    Crystal* clone() const final;
+    Crystal* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     IFormFactor* createTotalFormFactor(const IFormFactor& meso_crystal_form_factor,
                                        const IRotation* p_rotation,
@@ -49,7 +49,7 @@ public:
 
     Lattice3D transformedLattice(const IRotation* p_rotation = nullptr) const;
 
-    std::vector<const INode*> getChildren() const final;
+    std::vector<const INode*> getChildren() const override;
 
 private:
     Crystal(IParticle* p_basis, const Lattice3D& lattice, double position_variance = 0);
diff --git a/Sample/Particle/IParticle.h b/Sample/Particle/IParticle.h
index 49b1264aad4..bb7e7a935aa 100644
--- a/Sample/Particle/IParticle.h
+++ b/Sample/Particle/IParticle.h
@@ -57,7 +57,7 @@ public:
     void setPosition(double x, double y, double z) { m_position = kvector_t(x, y, z); }
 
     //! Translates the particle
-    void translate(kvector_t translation) final;
+    void translate(kvector_t translation) override;
 
     //! Returns rotation object
     const IRotation* rotation() const;
@@ -66,7 +66,7 @@ public:
     void setRotation(const IRotation& rotation);
 
     //! Rotates the particle
-    void rotate(const IRotation& rotation) final;
+    void rotate(const IRotation& rotation) override;
 
     std::vector<const INode*> getChildren() const override;
 
diff --git a/Sample/Particle/MesoCrystal.h b/Sample/Particle/MesoCrystal.h
index d54a01c9192..bb40e5b540f 100644
--- a/Sample/Particle/MesoCrystal.h
+++ b/Sample/Particle/MesoCrystal.h
@@ -27,13 +27,13 @@ public:
     MesoCrystal(const Crystal& particle_structure, const IFormFactor& form_factor);
 
     ~MesoCrystal();
-    MesoCrystal* clone() const final;
+    MesoCrystal* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final;
+    void accept(INodeVisitor* visitor) const override;
 
-    SlicedParticle createSlicedParticle(ZLimits limits) const final;
+    SlicedParticle createSlicedParticle(ZLimits limits) const override;
 
-    std::vector<const INode*> getChildren() const final;
+    std::vector<const INode*> getChildren() const override;
 
 private:
     MesoCrystal(Crystal* p_particle_structure, IFormFactor* p_form_factor);
diff --git a/Sample/Particle/Particle.h b/Sample/Particle/Particle.h
index beb7d24ddff..0179596fb55 100644
--- a/Sample/Particle/Particle.h
+++ b/Sample/Particle/Particle.h
@@ -29,16 +29,16 @@ public:
     Particle(Material material, const IFormFactor& form_factor);
     Particle(Material material, const IFormFactor& form_factor, const IRotation& rotation);
 
-    Particle* clone() const final;
+    Particle* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    SlicedParticle createSlicedParticle(ZLimits limits) const final;
+    SlicedParticle createSlicedParticle(ZLimits limits) const override;
 
     void setMaterial(Material material);
-    const Material* material() const final { return &m_material; }
+    const Material* material() const override { return &m_material; }
 
-    std::vector<const INode*> getChildren() const final;
+    std::vector<const INode*> getChildren() const override;
 
 protected:
     Material m_material;
diff --git a/Sample/Particle/ParticleComposition.h b/Sample/Particle/ParticleComposition.h
index cc99897eb73..b8664a491d4 100644
--- a/Sample/Particle/ParticleComposition.h
+++ b/Sample/Particle/ParticleComposition.h
@@ -27,11 +27,11 @@ public:
     ParticleComposition(const IParticle& particle, std::vector<kvector_t> positions);
 
     ~ParticleComposition();
-    ParticleComposition* clone() const final;
+    ParticleComposition* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    IFormFactor* createFormFactor() const final;
+    IFormFactor* createFormFactor() const override;
 
     void addParticle(const IParticle& particle);
     void addParticle(const IParticle& particle, kvector_t position);
@@ -40,11 +40,11 @@ public:
     //! Returns number of different particles
     size_t nbrParticles() const { return m_particles.size(); }
 
-    std::vector<const INode*> getChildren() const final;
+    std::vector<const INode*> getChildren() const override;
 
-    SafePointerVector<IParticle> decompose() const final;
+    SafePointerVector<IParticle> decompose() const override;
 
-    ParticleLimits bottomTopZ() const final;
+    ParticleLimits bottomTopZ() const override;
 
 private:
     size_t check_index(size_t index) const;
diff --git a/Sample/Particle/ParticleCoreShell.h b/Sample/Particle/ParticleCoreShell.h
index c131da440e8..3ee41a4f6d9 100644
--- a/Sample/Particle/ParticleCoreShell.h
+++ b/Sample/Particle/ParticleCoreShell.h
@@ -28,17 +28,17 @@ public:
                       kvector_t relative_core_position = kvector_t(0.0, 0.0, 0.0));
     ~ParticleCoreShell();
 
-    ParticleCoreShell* clone() const final;
+    ParticleCoreShell* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    SlicedParticle createSlicedParticle(ZLimits limits) const final;
+    SlicedParticle createSlicedParticle(ZLimits limits) const override;
 
     const Particle* coreParticle() const;
 
     const Particle* shellParticle() const;
 
-    std::vector<const INode*> getChildren() const final;
+    std::vector<const INode*> getChildren() const override;
 
 protected:
     void addAndRegisterCore(const Particle& core, kvector_t relative_core_position);
diff --git a/Sample/Particle/ParticleDistribution.h b/Sample/Particle/ParticleDistribution.h
index 32639969f48..23428f70b95 100644
--- a/Sample/Particle/ParticleDistribution.h
+++ b/Sample/Particle/ParticleDistribution.h
@@ -28,13 +28,13 @@ class ParticleDistribution : public IAbstractParticle {
 public:
     ParticleDistribution(const IParticle& prototype, const ParameterDistribution& par_distr);
 
-    ParticleDistribution* clone() const final;
+    ParticleDistribution* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    void translate(kvector_t translation) final;
+    void translate(kvector_t translation) override;
 
-    void rotate(const IRotation& rotation) final;
+    void rotate(const IRotation& rotation) override;
 
     //! Returns list of new particles generated according to a distribution.
     SafePointerVector<IParticle> generateParticles() const;
@@ -45,7 +45,7 @@ public:
     //! Returns the distributed parameter data
     ParameterDistribution parameterDistribution() const { return m_par_distribution; }
 
-    std::vector<const INode*> getChildren() const final;
+    std::vector<const INode*> getChildren() const override;
 
     std::string mainUnits() const;
 
diff --git a/Sample/SampleBuilderEngine/SampleBuilderNode.h b/Sample/SampleBuilderEngine/SampleBuilderNode.h
index b16205e89a6..514959d9e03 100644
--- a/Sample/SampleBuilderEngine/SampleBuilderNode.h
+++ b/Sample/SampleBuilderEngine/SampleBuilderNode.h
@@ -39,7 +39,7 @@ public:
 
     void reset();
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     std::unique_ptr<MultiLayer> createMultiLayer();
 
diff --git a/Sample/SampleBuilderEngine/SampleProvider.h b/Sample/SampleBuilderEngine/SampleProvider.h
index 128bcb09fe4..6c871c7b5d9 100644
--- a/Sample/SampleBuilderEngine/SampleProvider.h
+++ b/Sample/SampleBuilderEngine/SampleProvider.h
@@ -46,7 +46,7 @@ public:
 
     std::vector<const INode*> getChildren() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     void setParent(const INode* newParent) override;
 
diff --git a/Sample/Scattering/FormFactorDecoratorPositionFactor.h b/Sample/Scattering/FormFactorDecoratorPositionFactor.h
index 2eae23159d1..268e73f0d8c 100644
--- a/Sample/Scattering/FormFactorDecoratorPositionFactor.h
+++ b/Sample/Scattering/FormFactorDecoratorPositionFactor.h
@@ -34,15 +34,15 @@ public:
         return new FormFactorDecoratorPositionFactor(*m_ff, m_position);
     }
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    double bottomZ(const IRotation& rotation) const final;
+    double bottomZ(const IRotation& rotation) const override;
 
-    double topZ(const IRotation& rotation) const final;
+    double topZ(const IRotation& rotation) const override;
 
-    complex_t evaluate(const WavevectorInfo& wavevectors) const final;
+    complex_t evaluate(const WavevectorInfo& wavevectors) const override;
 #ifndef SWIG
-    Eigen::Matrix2cd evaluatePol(const WavevectorInfo& wavevectors) const final;
+    Eigen::Matrix2cd evaluatePol(const WavevectorInfo& wavevectors) const override;
 #endif
 
 private:
diff --git a/Sample/Scattering/FormFactorDecoratorRotation.h b/Sample/Scattering/FormFactorDecoratorRotation.h
index bd7d8c85ee0..63eeda16330 100644
--- a/Sample/Scattering/FormFactorDecoratorRotation.h
+++ b/Sample/Scattering/FormFactorDecoratorRotation.h
@@ -33,17 +33,17 @@ public:
     //! Constructor, setting form factor and rotation.
     FormFactorDecoratorRotation(const IFormFactor& ff, const IRotation& rotation);
 
-    FormFactorDecoratorRotation* clone() const final;
+    FormFactorDecoratorRotation* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    double bottomZ(const IRotation& rotation) const final;
+    double bottomZ(const IRotation& rotation) const override;
 
-    double topZ(const IRotation& rotation) const final;
+    double topZ(const IRotation& rotation) const override;
 
-    complex_t evaluate(const WavevectorInfo& wavevectors) const final;
+    complex_t evaluate(const WavevectorInfo& wavevectors) const override;
 #ifndef SWIG
-    Eigen::Matrix2cd evaluatePol(const WavevectorInfo& wavevectors) const final;
+    Eigen::Matrix2cd evaluatePol(const WavevectorInfo& wavevectors) const override;
 #endif
 
 private:
diff --git a/Sample/SoftParticle/FormFactorGauss.h b/Sample/SoftParticle/FormFactorGauss.h
index b0783daa01f..b05215c23fb 100644
--- a/Sample/SoftParticle/FormFactorGauss.h
+++ b/Sample/SoftParticle/FormFactorGauss.h
@@ -25,14 +25,14 @@ public:
     FormFactorGaussSphere(const std::vector<double> P);
     FormFactorGaussSphere(double mean_radius);
 
-    FormFactorGaussSphere* clone() const final { return new FormFactorGaussSphere(m_mean_radius); }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    FormFactorGaussSphere* clone() const override { return new FormFactorGaussSphere(m_mean_radius); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getMeanRadius() const { return m_mean_radius; }
 
-    double radialExtension() const final { return m_mean_radius; }
+    double radialExtension() const override { return m_mean_radius; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
     void onChange() final{};
diff --git a/Sample/SoftParticle/FormFactorSphereGaussianRadius.h b/Sample/SoftParticle/FormFactorSphereGaussianRadius.h
index f418a11b923..d7430d31b98 100644
--- a/Sample/SoftParticle/FormFactorSphereGaussianRadius.h
+++ b/Sample/SoftParticle/FormFactorSphereGaussianRadius.h
@@ -31,14 +31,14 @@ public:
         return new FormFactorSphereGaussianRadius(m_mean, m_sigma);
     }
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    double radialExtension() const final { return m_mean; }
+    double radialExtension() const override { return m_mean; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
-    void onChange() final;
+    void onChange() override;
 
 private:
     double calculateMeanR3() const;
diff --git a/Sample/SoftParticle/FormFactorSphereLogNormalRadius.h b/Sample/SoftParticle/FormFactorSphereLogNormalRadius.h
index 3dad5806cdc..02e8c3dc056 100644
--- a/Sample/SoftParticle/FormFactorSphereLogNormalRadius.h
+++ b/Sample/SoftParticle/FormFactorSphereLogNormalRadius.h
@@ -26,16 +26,16 @@ public:
     FormFactorSphereLogNormalRadius(const std::vector<double> P, size_t n_samples = 0);
     FormFactorSphereLogNormalRadius(double mean, double scale_param, size_t n_samples);
 
-    FormFactorSphereLogNormalRadius* clone() const final;
+    FormFactorSphereLogNormalRadius* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    double radialExtension() const final { return m_mean; }
+    double radialExtension() const override { return m_mean; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
-    void onChange() final;
+    void onChange() override;
 
 private:
     const double& m_mean;
diff --git a/Tests/UnitTests/Core/Sample/INodeTest.cpp b/Tests/UnitTests/Core/Sample/INodeTest.cpp
index 7f99940d170..75444167977 100644
--- a/Tests/UnitTests/Core/Sample/INodeTest.cpp
+++ b/Tests/UnitTests/Core/Sample/INodeTest.cpp
@@ -27,7 +27,7 @@ public:
             for (auto child : m_nodes)
                 delete child;
         }
-        void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+        void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
         void appendChild(INode* node)
         {
diff --git a/Tests/UnitTests/Core/Sample/Lattice2DTest.cpp b/Tests/UnitTests/Core/Sample/Lattice2DTest.cpp
index 10ddf098b34..d5099d6968a 100644
--- a/Tests/UnitTests/Core/Sample/Lattice2DTest.cpp
+++ b/Tests/UnitTests/Core/Sample/Lattice2DTest.cpp
@@ -82,7 +82,7 @@ TEST_F(Lattice2DTest, onChange)
     class Parent : public INode {
     public:
         Parent() : m_changed(false) {}
-        void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+        void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
         virtual void onChange() { m_changed = true; }
         bool m_changed;
     };
diff --git a/Tests/UnitTests/Core/Sample/SampleProviderTest.cpp b/Tests/UnitTests/Core/Sample/SampleProviderTest.cpp
index 6d49d533650..5bb76eaeb77 100644
--- a/Tests/UnitTests/Core/Sample/SampleProviderTest.cpp
+++ b/Tests/UnitTests/Core/Sample/SampleProviderTest.cpp
@@ -31,7 +31,7 @@ public:
             registerChild(&m_provider);
         }
 
-        void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+        void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
         std::vector<const INode*> getChildren() const { return m_provider.getChildren(); }
 
diff --git a/auto/Wrap/doxygenCore.i b/auto/Wrap/doxygenCore.i
index 0e12ad149c8..3e41d5e3c2e 100644
--- a/auto/Wrap/doxygenCore.i
+++ b/auto/Wrap/doxygenCore.i
@@ -301,7 +301,7 @@ C++ includes: ConstantBackground.h
 %feature("docstring")  ConstantBackground::ConstantBackground "ConstantBackground::ConstantBackground(double background_value)
 ";
 
-%feature("docstring")  ConstantBackground::clone "ConstantBackground * ConstantBackground::clone() const final
+%feature("docstring")  ConstantBackground::clone "ConstantBackground * ConstantBackground::clone() const override
 ";
 
 %feature("docstring")  ConstantBackground::backgroundValue "double ConstantBackground::backgroundValue() const
@@ -310,7 +310,7 @@ C++ includes: ConstantBackground.h
 %feature("docstring")  ConstantBackground::accept "void ConstantBackground::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  ConstantBackground::addBackground "double ConstantBackground::addBackground(double intensity) const final
+%feature("docstring")  ConstantBackground::addBackground "double ConstantBackground::addBackground(double intensity) const override
 ";
 
 
@@ -407,7 +407,7 @@ Set calculation flag (if it's false, zero intensity is assigned to the element)
 %feature("docstring")  DepthProbeSimulation::clone "DepthProbeSimulation * DepthProbeSimulation::clone() const override
 ";
 
-%feature("docstring")  DepthProbeSimulation::accept "void DepthProbeSimulation::accept(INodeVisitor *visitor) const final
+%feature("docstring")  DepthProbeSimulation::accept "void DepthProbeSimulation::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  DepthProbeSimulation::result "SimulationResult DepthProbeSimulation::result() const override
@@ -1636,13 +1636,13 @@ C++ includes: PoissonNoiseBackground.h
 %feature("docstring")  PoissonNoiseBackground::PoissonNoiseBackground "PoissonNoiseBackground::PoissonNoiseBackground()
 ";
 
-%feature("docstring")  PoissonNoiseBackground::clone "PoissonNoiseBackground * PoissonNoiseBackground::clone() const final
+%feature("docstring")  PoissonNoiseBackground::clone "PoissonNoiseBackground * PoissonNoiseBackground::clone() const override
 ";
 
 %feature("docstring")  PoissonNoiseBackground::accept "void PoissonNoiseBackground::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  PoissonNoiseBackground::addBackground "double PoissonNoiseBackground::addBackground(double intensity) const final
+%feature("docstring")  PoissonNoiseBackground::addBackground "double PoissonNoiseBackground::addBackground(double intensity) const override
 ";
 
 
@@ -2105,7 +2105,7 @@ C++ includes: SpecularSimulation.h
 Put into a clean state for running a simulation. 
 ";
 
-%feature("docstring")  SpecularSimulation::accept "void SpecularSimulation::accept(INodeVisitor *visitor) const final
+%feature("docstring")  SpecularSimulation::accept "void SpecularSimulation::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  SpecularSimulation::result "SimulationResult SpecularSimulation::result() const override
@@ -2198,7 +2198,7 @@ C++ includes: UnitConverter1D.h
 %feature("docstring")  UnitConverter1D::clone "UnitConverter1D* UnitConverter1D::clone() const override=0
 ";
 
-%feature("docstring")  UnitConverter1D::dimension "size_t UnitConverter1D::dimension() const final
+%feature("docstring")  UnitConverter1D::dimension "size_t UnitConverter1D::dimension() const override
 
 Returns dimensionality of converted canvas. 
 ";
diff --git a/auto/Wrap/doxygenDevice.i b/auto/Wrap/doxygenDevice.i
index 0581d585e0e..ff54d9ec613 100644
--- a/auto/Wrap/doxygenDevice.i
+++ b/auto/Wrap/doxygenDevice.i
@@ -136,7 +136,7 @@ Convolve given intensities with the encapsulated resolution.
 %feature("docstring")  ConvolutionDetectorResolution::clone "ConvolutionDetectorResolution * ConvolutionDetectorResolution::clone() const
 ";
 
-%feature("docstring")  ConvolutionDetectorResolution::accept "void ConvolutionDetectorResolution::accept(INodeVisitor *visitor) const final
+%feature("docstring")  ConvolutionDetectorResolution::accept "void ConvolutionDetectorResolution::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  ConvolutionDetectorResolution::getResolutionFunction2D "const IResolutionFunction2D * ConvolutionDetectorResolution::getResolutionFunction2D() const
@@ -288,7 +288,7 @@ will always return positive value
 %feature("docstring")  DetectionProperties::analyzerTotalTransmission "double DetectionProperties::analyzerTotalTransmission() const
 ";
 
-%feature("docstring")  DetectionProperties::accept "void DetectionProperties::accept(INodeVisitor *visitor) const final
+%feature("docstring")  DetectionProperties::accept "void DetectionProperties::accept(INodeVisitor *visitor) const override
 ";
 
 
@@ -1323,7 +1323,7 @@ C++ includes: Instrument.h
 %feature("docstring")  Instrument::~Instrument "Instrument::~Instrument()
 ";
 
-%feature("docstring")  Instrument::accept "void Instrument::accept(INodeVisitor *visitor) const final
+%feature("docstring")  Instrument::accept "void Instrument::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  Instrument::beam "Beam& Instrument::beam()
@@ -1421,7 +1421,7 @@ C++ includes: IsGISAXSDetector.h
 %feature("docstring")  IsGISAXSDetector::clone "IsGISAXSDetector * IsGISAXSDetector::clone() const override
 ";
 
-%feature("docstring")  IsGISAXSDetector::accept "void IsGISAXSDetector::accept(INodeVisitor *visitor) const final
+%feature("docstring")  IsGISAXSDetector::accept "void IsGISAXSDetector::accept(INodeVisitor *visitor) const override
 ";
 
 
@@ -2198,7 +2198,7 @@ Height of the detector in mm along y-direction
 %feature("docstring")  RectangularDetector::clone "RectangularDetector * RectangularDetector::clone() const override
 ";
 
-%feature("docstring")  RectangularDetector::accept "void RectangularDetector::accept(INodeVisitor *visitor) const final
+%feature("docstring")  RectangularDetector::accept "void RectangularDetector::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  RectangularDetector::~RectangularDetector "RectangularDetector::~RectangularDetector()
@@ -2260,7 +2260,7 @@ Inits detector with the beam settings.
 %feature("docstring")  RectangularDetector::getDetectorArrangment "RectangularDetector::EDetectorArrangement RectangularDetector::getDetectorArrangment() const
 ";
 
-%feature("docstring")  RectangularDetector::defaultAxesUnits "virtual Axes::Units RectangularDetector::defaultAxesUnits() const final
+%feature("docstring")  RectangularDetector::defaultAxesUnits "virtual Axes::Units RectangularDetector::defaultAxesUnits() const override
 
 return default axes units 
 ";
@@ -2342,7 +2342,7 @@ C++ includes: ResolutionFunction2DGaussian.h
 %feature("docstring")  ResolutionFunction2DGaussian::clone "ResolutionFunction2DGaussian* ResolutionFunction2DGaussian::clone() const
 ";
 
-%feature("docstring")  ResolutionFunction2DGaussian::accept "void ResolutionFunction2DGaussian::accept(INodeVisitor *visitor) const final
+%feature("docstring")  ResolutionFunction2DGaussian::accept "void ResolutionFunction2DGaussian::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  ResolutionFunction2DGaussian::getSigmaX "double ResolutionFunction2DGaussian::getSigmaX() const
@@ -2574,7 +2574,7 @@ Resets region of interest making whole detector plane available for the simulati
 %feature("docstring")  SpecularDetector1D::setAxis "void SpecularDetector1D::setAxis(const IAxis &axis)
 ";
 
-%feature("docstring")  SpecularDetector1D::defaultAxesUnits "virtual Axes::Units SpecularDetector1D::defaultAxesUnits() const final
+%feature("docstring")  SpecularDetector1D::defaultAxesUnits "virtual Axes::Units SpecularDetector1D::defaultAxesUnits() const override
 
 Return default axes units. 
 ";
@@ -2675,7 +2675,7 @@ central alpha angle
 %feature("docstring")  SphericalDetector::~SphericalDetector "SphericalDetector::~SphericalDetector() override
 ";
 
-%feature("docstring")  SphericalDetector::defaultAxesUnits "virtual Axes::Units SphericalDetector::defaultAxesUnits() const final
+%feature("docstring")  SphericalDetector::defaultAxesUnits "virtual Axes::Units SphericalDetector::defaultAxesUnits() const override
 
 return default axes units 
 ";
diff --git a/auto/Wrap/doxygenFit.i b/auto/Wrap/doxygenFit.i
index 834fee9adbd..b2c9c192ed7 100644
--- a/auto/Wrap/doxygenFit.i
+++ b/auto/Wrap/doxygenFit.i
@@ -6714,12 +6714,12 @@ run minimization
 %feature("docstring")  MinimizerAdapter::minimize_residual "MinimizerResult MinimizerAdapter::minimize_residual(fcn_residual_t fcn, mumufit::Parameters parameters) override
 ";
 
-%feature("docstring")  MinimizerAdapter::minimizerName "std::string MinimizerAdapter::minimizerName() const final
+%feature("docstring")  MinimizerAdapter::minimizerName "std::string MinimizerAdapter::minimizerName() const override
 
 Returns name of the minimizer. 
 ";
 
-%feature("docstring")  MinimizerAdapter::algorithmName "std::string MinimizerAdapter::algorithmName() const final
+%feature("docstring")  MinimizerAdapter::algorithmName "std::string MinimizerAdapter::algorithmName() const override
 
 Returns name of the minimization algorithm. 
 ";
@@ -6727,7 +6727,7 @@ Returns name of the minimization algorithm.
 %feature("docstring")  MinimizerAdapter::setParameters "void MinimizerAdapter::setParameters(const mumufit::Parameters &parameters)
 ";
 
-%feature("docstring")  MinimizerAdapter::minValue "double MinimizerAdapter::minValue() const final
+%feature("docstring")  MinimizerAdapter::minValue "double MinimizerAdapter::minValue() const override
 
 Returns minimum function value. 
 ";
@@ -6753,7 +6753,7 @@ Returns true if minimizer provides error and error matrix.
 Returns map of string representing different minimizer statuses. 
 ";
 
-%feature("docstring")  MinimizerAdapter::setOptions "void MinimizerAdapter::setOptions(const std::string &optionString) final
+%feature("docstring")  MinimizerAdapter::setOptions "void MinimizerAdapter::setOptions(const std::string &optionString) override
 
 Sets option string to the minimizer. 
 ";
@@ -11967,12 +11967,12 @@ C++ includes: TestMinimizer.h
 %feature("docstring")  TestMinimizer::~TestMinimizer "TestMinimizer::~TestMinimizer() override
 ";
 
-%feature("docstring")  TestMinimizer::minimizerName "std::string TestMinimizer::minimizerName() const final
+%feature("docstring")  TestMinimizer::minimizerName "std::string TestMinimizer::minimizerName() const override
 
 return name of the minimizer 
 ";
 
-%feature("docstring")  TestMinimizer::algorithmName "std::string TestMinimizer::algorithmName() const final
+%feature("docstring")  TestMinimizer::algorithmName "std::string TestMinimizer::algorithmName() const override
 
 return name of the minimization algorithm 
 ";
diff --git a/auto/Wrap/doxygenParam.i b/auto/Wrap/doxygenParam.i
index 87e44c33fa5..f5afff15150 100644
--- a/auto/Wrap/doxygenParam.i
+++ b/auto/Wrap/doxygenParam.i
@@ -18,15 +18,15 @@ C++ includes: Distributions.h
 %feature("docstring")  DistributionCosine::DistributionCosine "DistributionCosine::DistributionCosine()
 ";
 
-%feature("docstring")  DistributionCosine::clone "DistributionCosine* DistributionCosine::clone() const final
+%feature("docstring")  DistributionCosine::clone "DistributionCosine* DistributionCosine::clone() const override
 ";
 
-%feature("docstring")  DistributionCosine::probabilityDensity "double DistributionCosine::probabilityDensity(double x) const final
+%feature("docstring")  DistributionCosine::probabilityDensity "double DistributionCosine::probabilityDensity(double x) const override
 
 Returns the distribution-specific probability density for value x. 
 ";
 
-%feature("docstring")  DistributionCosine::getMean "double DistributionCosine::getMean() const final
+%feature("docstring")  DistributionCosine::getMean "double DistributionCosine::getMean() const override
 
 Returns the distribution-specific mean. 
 ";
@@ -34,17 +34,17 @@ Returns the distribution-specific mean.
 %feature("docstring")  DistributionCosine::getSigma "double DistributionCosine::getSigma() const
 ";
 
-%feature("docstring")  DistributionCosine::equidistantPoints "std::vector< double > DistributionCosine::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+%feature("docstring")  DistributionCosine::equidistantPoints "std::vector< double > DistributionCosine::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
 generate list of sample values 
 ";
 
-%feature("docstring")  DistributionCosine::isDelta "bool DistributionCosine::isDelta() const final
+%feature("docstring")  DistributionCosine::isDelta "bool DistributionCosine::isDelta() const override
 
 Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 ";
 
-%feature("docstring")  DistributionCosine::accept "void DistributionCosine::accept(INodeVisitor *visitor) const final
+%feature("docstring")  DistributionCosine::accept "void DistributionCosine::accept(INodeVisitor *visitor) const override
 
 Calls the  INodeVisitor's visit method. 
 ";
@@ -67,15 +67,15 @@ C++ includes: Distributions.h
 %feature("docstring")  DistributionGate::DistributionGate "DistributionGate::DistributionGate()
 ";
 
-%feature("docstring")  DistributionGate::clone "DistributionGate* DistributionGate::clone() const final
+%feature("docstring")  DistributionGate::clone "DistributionGate* DistributionGate::clone() const override
 ";
 
-%feature("docstring")  DistributionGate::probabilityDensity "double DistributionGate::probabilityDensity(double x) const final
+%feature("docstring")  DistributionGate::probabilityDensity "double DistributionGate::probabilityDensity(double x) const override
 
 Returns the distribution-specific probability density for value x. 
 ";
 
-%feature("docstring")  DistributionGate::getMean "double DistributionGate::getMean() const final
+%feature("docstring")  DistributionGate::getMean "double DistributionGate::getMean() const override
 
 Returns the distribution-specific mean. 
 ";
@@ -86,17 +86,17 @@ Returns the distribution-specific mean.
 %feature("docstring")  DistributionGate::upperBound "double DistributionGate::upperBound() const
 ";
 
-%feature("docstring")  DistributionGate::equidistantPoints "std::vector< double > DistributionGate::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+%feature("docstring")  DistributionGate::equidistantPoints "std::vector< double > DistributionGate::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
 Returns list of sample values. 
 ";
 
-%feature("docstring")  DistributionGate::isDelta "bool DistributionGate::isDelta() const final
+%feature("docstring")  DistributionGate::isDelta "bool DistributionGate::isDelta() const override
 
 Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 ";
 
-%feature("docstring")  DistributionGate::accept "void DistributionGate::accept(INodeVisitor *visitor) const final
+%feature("docstring")  DistributionGate::accept "void DistributionGate::accept(INodeVisitor *visitor) const override
 
 Calls the  INodeVisitor's visit method. 
 ";
@@ -122,12 +122,12 @@ C++ includes: Distributions.h
 %feature("docstring")  DistributionGaussian::clone "DistributionGaussian* DistributionGaussian::clone() const final
 ";
 
-%feature("docstring")  DistributionGaussian::probabilityDensity "double DistributionGaussian::probabilityDensity(double x) const final
+%feature("docstring")  DistributionGaussian::probabilityDensity "double DistributionGaussian::probabilityDensity(double x) const override
 
 Returns the distribution-specific probability density for value x. 
 ";
 
-%feature("docstring")  DistributionGaussian::getMean "double DistributionGaussian::getMean() const final
+%feature("docstring")  DistributionGaussian::getMean "double DistributionGaussian::getMean() const override
 
 Returns the distribution-specific mean. 
 ";
@@ -135,17 +135,17 @@ Returns the distribution-specific mean.
 %feature("docstring")  DistributionGaussian::getStdDev "double DistributionGaussian::getStdDev() const
 ";
 
-%feature("docstring")  DistributionGaussian::equidistantPoints "std::vector< double > DistributionGaussian::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+%feature("docstring")  DistributionGaussian::equidistantPoints "std::vector< double > DistributionGaussian::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
 generate list of sample values 
 ";
 
-%feature("docstring")  DistributionGaussian::isDelta "bool DistributionGaussian::isDelta() const final
+%feature("docstring")  DistributionGaussian::isDelta "bool DistributionGaussian::isDelta() const override
 
 Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 ";
 
-%feature("docstring")  DistributionGaussian::accept "void DistributionGaussian::accept(INodeVisitor *visitor) const final
+%feature("docstring")  DistributionGaussian::accept "void DistributionGaussian::accept(INodeVisitor *visitor) const override
 
 Calls the  INodeVisitor's visit method. 
 ";
@@ -212,12 +212,12 @@ C++ includes: Distributions.h
 %feature("docstring")  DistributionLogNormal::clone "DistributionLogNormal* DistributionLogNormal::clone() const final
 ";
 
-%feature("docstring")  DistributionLogNormal::probabilityDensity "double DistributionLogNormal::probabilityDensity(double x) const final
+%feature("docstring")  DistributionLogNormal::probabilityDensity "double DistributionLogNormal::probabilityDensity(double x) const override
 
 Returns the distribution-specific probability density for value x. 
 ";
 
-%feature("docstring")  DistributionLogNormal::getMean "double DistributionLogNormal::getMean() const final
+%feature("docstring")  DistributionLogNormal::getMean "double DistributionLogNormal::getMean() const override
 
 Returns the distribution-specific mean. 
 ";
@@ -228,22 +228,22 @@ Returns the distribution-specific mean.
 %feature("docstring")  DistributionLogNormal::getScalePar "double DistributionLogNormal::getScalePar() const
 ";
 
-%feature("docstring")  DistributionLogNormal::equidistantPoints "std::vector< double > DistributionLogNormal::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+%feature("docstring")  DistributionLogNormal::equidistantPoints "std::vector< double > DistributionLogNormal::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
 generate list of sample values 
 ";
 
-%feature("docstring")  DistributionLogNormal::isDelta "bool DistributionLogNormal::isDelta() const final
+%feature("docstring")  DistributionLogNormal::isDelta "bool DistributionLogNormal::isDelta() const override
 
 Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 ";
 
-%feature("docstring")  DistributionLogNormal::accept "void DistributionLogNormal::accept(INodeVisitor *visitor) const final
+%feature("docstring")  DistributionLogNormal::accept "void DistributionLogNormal::accept(INodeVisitor *visitor) const override
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  DistributionLogNormal::setUnits "void DistributionLogNormal::setUnits(const std::string &units)
+%feature("docstring")  DistributionLogNormal::setUnits "void DistributionLogNormal::setUnits(const std::string &units) override
 
 Sets distribution units. 
 ";
@@ -266,15 +266,15 @@ C++ includes: Distributions.h
 %feature("docstring")  DistributionLorentz::DistributionLorentz "DistributionLorentz::DistributionLorentz()
 ";
 
-%feature("docstring")  DistributionLorentz::clone "DistributionLorentz* DistributionLorentz::clone() const final
+%feature("docstring")  DistributionLorentz::clone "DistributionLorentz* DistributionLorentz::clone() const override
 ";
 
-%feature("docstring")  DistributionLorentz::probabilityDensity "double DistributionLorentz::probabilityDensity(double x) const final
+%feature("docstring")  DistributionLorentz::probabilityDensity "double DistributionLorentz::probabilityDensity(double x) const override
 
 Returns the distribution-specific probability density for value x. 
 ";
 
-%feature("docstring")  DistributionLorentz::getMean "double DistributionLorentz::getMean() const final
+%feature("docstring")  DistributionLorentz::getMean "double DistributionLorentz::getMean() const override
 
 Returns the distribution-specific mean. 
 ";
@@ -282,17 +282,17 @@ Returns the distribution-specific mean.
 %feature("docstring")  DistributionLorentz::getHWHM "double DistributionLorentz::getHWHM() const
 ";
 
-%feature("docstring")  DistributionLorentz::equidistantPoints "std::vector< double > DistributionLorentz::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+%feature("docstring")  DistributionLorentz::equidistantPoints "std::vector< double > DistributionLorentz::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
 generate list of sample values 
 ";
 
-%feature("docstring")  DistributionLorentz::isDelta "bool DistributionLorentz::isDelta() const final
+%feature("docstring")  DistributionLorentz::isDelta "bool DistributionLorentz::isDelta() const override
 
 Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 ";
 
-%feature("docstring")  DistributionLorentz::accept "void DistributionLorentz::accept(INodeVisitor *visitor) const final
+%feature("docstring")  DistributionLorentz::accept "void DistributionLorentz::accept(INodeVisitor *visitor) const override
 
 Calls the  INodeVisitor's visit method. 
 ";
@@ -318,12 +318,12 @@ C++ includes: Distributions.h
 %feature("docstring")  DistributionTrapezoid::clone "DistributionTrapezoid* DistributionTrapezoid::clone() const final
 ";
 
-%feature("docstring")  DistributionTrapezoid::probabilityDensity "double DistributionTrapezoid::probabilityDensity(double x) const final
+%feature("docstring")  DistributionTrapezoid::probabilityDensity "double DistributionTrapezoid::probabilityDensity(double x) const override
 
 Returns the distribution-specific probability density for value x. 
 ";
 
-%feature("docstring")  DistributionTrapezoid::getMean "double DistributionTrapezoid::getMean() const final
+%feature("docstring")  DistributionTrapezoid::getMean "double DistributionTrapezoid::getMean() const override
 
 Returns the distribution-specific mean. 
 ";
@@ -337,17 +337,17 @@ Returns the distribution-specific mean.
 %feature("docstring")  DistributionTrapezoid::getRightWidth "double DistributionTrapezoid::getRightWidth() const
 ";
 
-%feature("docstring")  DistributionTrapezoid::equidistantPoints "std::vector< double > DistributionTrapezoid::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+%feature("docstring")  DistributionTrapezoid::equidistantPoints "std::vector< double > DistributionTrapezoid::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
 generate list of sample values 
 ";
 
-%feature("docstring")  DistributionTrapezoid::isDelta "bool DistributionTrapezoid::isDelta() const final
+%feature("docstring")  DistributionTrapezoid::isDelta "bool DistributionTrapezoid::isDelta() const override
 
 Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 ";
 
-%feature("docstring")  DistributionTrapezoid::accept "void DistributionTrapezoid::accept(INodeVisitor *visitor) const final
+%feature("docstring")  DistributionTrapezoid::accept "void DistributionTrapezoid::accept(INodeVisitor *visitor) const override
 
 Calls the  INodeVisitor's visit method. 
 ";
diff --git a/auto/Wrap/doxygenSample.i b/auto/Wrap/doxygenSample.i
index 8bb0b7d8fb9..04633f6fd54 100644
--- a/auto/Wrap/doxygenSample.i
+++ b/auto/Wrap/doxygenSample.i
@@ -153,19 +153,19 @@ C++ includes: Lattice2D.h
 %feature("docstring")  BasicLattice2D::clone "BasicLattice2D * BasicLattice2D::clone() const
 ";
 
-%feature("docstring")  BasicLattice2D::accept "void BasicLattice2D::accept(INodeVisitor *visitor) const final
+%feature("docstring")  BasicLattice2D::accept "void BasicLattice2D::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  BasicLattice2D::length1 "virtual double BasicLattice2D::length1() const
+%feature("docstring")  BasicLattice2D::length1 "double BasicLattice2D::length1() const override
 ";
 
-%feature("docstring")  BasicLattice2D::length2 "virtual double BasicLattice2D::length2() const
+%feature("docstring")  BasicLattice2D::length2 "double BasicLattice2D::length2() const override
 ";
 
-%feature("docstring")  BasicLattice2D::latticeAngle "virtual double BasicLattice2D::latticeAngle() const
+%feature("docstring")  BasicLattice2D::latticeAngle "double BasicLattice2D::latticeAngle() const override
 ";
 
-%feature("docstring")  BasicLattice2D::unitCellArea "double BasicLattice2D::unitCellArea() const
+%feature("docstring")  BasicLattice2D::unitCellArea "double BasicLattice2D::unitCellArea() const override
 ";
 
 
@@ -446,12 +446,12 @@ C++ includes: Crystal.h
 %feature("docstring")  Crystal::~Crystal "Crystal::~Crystal()
 ";
 
-%feature("docstring")  Crystal::clone "Crystal * Crystal::clone() const final
+%feature("docstring")  Crystal::clone "Crystal * Crystal::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  Crystal::accept "void Crystal::accept(INodeVisitor *visitor) const final
+%feature("docstring")  Crystal::accept "void Crystal::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  Crystal::createTotalFormFactor "IFormFactor * Crystal::createTotalFormFactor(const IFormFactor &meso_crystal_form_factor, const IRotation *p_rotation, const kvector_t &translation) const
@@ -463,7 +463,7 @@ Returns a clone of this  ISampleNode object.
 %feature("docstring")  Crystal::transformedLattice "Lattice3D Crystal::transformedLattice(const IRotation *p_rotation=nullptr) const
 ";
 
-%feature("docstring")  Crystal::getChildren "std::vector< const INode * > Crystal::getChildren() const final
+%feature("docstring")  Crystal::getChildren "std::vector< const INode * > Crystal::getChildren() const override
 ";
 
 
@@ -563,7 +563,7 @@ C++ includes: DecouplingApproximationStrategy.h
 %feature("docstring")  Distribution1DCauchySampler::Distribution1DCauchySampler "Distribution1DCauchySampler::Distribution1DCauchySampler(double lambda)
 ";
 
-%feature("docstring")  Distribution1DCauchySampler::randomSample "double Distribution1DCauchySampler::randomSample() const final
+%feature("docstring")  Distribution1DCauchySampler::randomSample "double Distribution1DCauchySampler::randomSample() const override
 ";
 
 
@@ -573,7 +573,7 @@ C++ includes: DecouplingApproximationStrategy.h
 %feature("docstring")  Distribution1DCosineSampler::Distribution1DCosineSampler "Distribution1DCosineSampler::Distribution1DCosineSampler(double omega)
 ";
 
-%feature("docstring")  Distribution1DCosineSampler::randomSample "double Distribution1DCosineSampler::randomSample() const final
+%feature("docstring")  Distribution1DCosineSampler::randomSample "double Distribution1DCosineSampler::randomSample() const override
 ";
 
 
@@ -583,7 +583,7 @@ C++ includes: DecouplingApproximationStrategy.h
 %feature("docstring")  Distribution1DGateSampler::Distribution1DGateSampler "Distribution1DGateSampler::Distribution1DGateSampler(double a, double b)
 ";
 
-%feature("docstring")  Distribution1DGateSampler::randomSample "double Distribution1DGateSampler::randomSample() const final
+%feature("docstring")  Distribution1DGateSampler::randomSample "double Distribution1DGateSampler::randomSample() const override
 ";
 
 
@@ -593,7 +593,7 @@ C++ includes: DecouplingApproximationStrategy.h
 %feature("docstring")  Distribution1DGaussSampler::Distribution1DGaussSampler "Distribution1DGaussSampler::Distribution1DGaussSampler(double mean, double stddev)
 ";
 
-%feature("docstring")  Distribution1DGaussSampler::randomSample "double Distribution1DGaussSampler::randomSample() const final
+%feature("docstring")  Distribution1DGaussSampler::randomSample "double Distribution1DGaussSampler::randomSample() const override
 ";
 
 
@@ -603,7 +603,7 @@ C++ includes: DecouplingApproximationStrategy.h
 %feature("docstring")  Distribution1DTriangleSampler::Distribution1DTriangleSampler "Distribution1DTriangleSampler::Distribution1DTriangleSampler(double omega)
 ";
 
-%feature("docstring")  Distribution1DTriangleSampler::randomSample "double Distribution1DTriangleSampler::randomSample() const final
+%feature("docstring")  Distribution1DTriangleSampler::randomSample "double Distribution1DTriangleSampler::randomSample() const override
 ";
 
 
@@ -613,7 +613,7 @@ C++ includes: DecouplingApproximationStrategy.h
 %feature("docstring")  Distribution2DCauchySampler::Distribution2DCauchySampler "Distribution2DCauchySampler::Distribution2DCauchySampler(double omega_x, double omega_y)
 ";
 
-%feature("docstring")  Distribution2DCauchySampler::randomSample "std::pair< double, double > Distribution2DCauchySampler::randomSample() const final
+%feature("docstring")  Distribution2DCauchySampler::randomSample "std::pair< double, double > Distribution2DCauchySampler::randomSample() const override
 ";
 
 
@@ -623,7 +623,7 @@ C++ includes: DecouplingApproximationStrategy.h
 %feature("docstring")  Distribution2DConeSampler::Distribution2DConeSampler "Distribution2DConeSampler::Distribution2DConeSampler(double omega_x, double omega_y)
 ";
 
-%feature("docstring")  Distribution2DConeSampler::randomSample "std::pair< double, double > Distribution2DConeSampler::randomSample() const final
+%feature("docstring")  Distribution2DConeSampler::randomSample "std::pair< double, double > Distribution2DConeSampler::randomSample() const override
 ";
 
 
@@ -633,7 +633,7 @@ C++ includes: DecouplingApproximationStrategy.h
 %feature("docstring")  Distribution2DGateSampler::Distribution2DGateSampler "Distribution2DGateSampler::Distribution2DGateSampler(double omega_x, double omega_y)
 ";
 
-%feature("docstring")  Distribution2DGateSampler::randomSample "std::pair< double, double > Distribution2DGateSampler::randomSample() const final
+%feature("docstring")  Distribution2DGateSampler::randomSample "std::pair< double, double > Distribution2DGateSampler::randomSample() const override
 ";
 
 
@@ -643,7 +643,7 @@ C++ includes: DecouplingApproximationStrategy.h
 %feature("docstring")  Distribution2DGaussSampler::Distribution2DGaussSampler "Distribution2DGaussSampler::Distribution2DGaussSampler(double omega_x, double omega_y)
 ";
 
-%feature("docstring")  Distribution2DGaussSampler::randomSample "std::pair< double, double > Distribution2DGaussSampler::randomSample() const final
+%feature("docstring")  Distribution2DGaussSampler::randomSample "std::pair< double, double > Distribution2DGaussSampler::randomSample() const override
 ";
 
 
@@ -748,7 +748,7 @@ C++ includes: FormFactorAnisoPyramid.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorAnisoPyramid::accept "void FormFactorAnisoPyramid::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorAnisoPyramid::accept "void FormFactorAnisoPyramid::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorAnisoPyramid::getLength "double FormFactorAnisoPyramid::getLength() const
@@ -778,12 +778,12 @@ C++ includes: FormFactorBar.h
 %feature("docstring")  FormFactorBarGauss::FormFactorBarGauss "FormFactorBarGauss::FormFactorBarGauss(double length, double width, double height)
 ";
 
-%feature("docstring")  FormFactorBarGauss::clone "FormFactorBarGauss * FormFactorBarGauss::clone() const final
+%feature("docstring")  FormFactorBarGauss::clone "FormFactorBarGauss * FormFactorBarGauss::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorBarGauss::accept "void FormFactorBarGauss::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorBarGauss::accept "void FormFactorBarGauss::accept(INodeVisitor *visitor) const override
 ";
 
 
@@ -801,12 +801,12 @@ C++ includes: FormFactorBar.h
 %feature("docstring")  FormFactorBarLorentz::FormFactorBarLorentz "FormFactorBarLorentz::FormFactorBarLorentz(double length, double width, double height)
 ";
 
-%feature("docstring")  FormFactorBarLorentz::clone "FormFactorBarLorentz * FormFactorBarLorentz::clone() const final
+%feature("docstring")  FormFactorBarLorentz::clone "FormFactorBarLorentz * FormFactorBarLorentz::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorBarLorentz::accept "void FormFactorBarLorentz::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorBarLorentz::accept "void FormFactorBarLorentz::accept(INodeVisitor *visitor) const override
 ";
 
 
@@ -824,12 +824,12 @@ C++ includes: FormFactorBox.h
 %feature("docstring")  FormFactorBox::FormFactorBox "FormFactorBox::FormFactorBox(double length, double width, double height)
 ";
 
-%feature("docstring")  FormFactorBox::clone "FormFactorBox* FormFactorBox::clone() const final
+%feature("docstring")  FormFactorBox::clone "FormFactorBox* FormFactorBox::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorBox::accept "void FormFactorBox::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorBox::accept "void FormFactorBox::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorBox::getLength "double FormFactorBox::getLength() const
@@ -838,17 +838,17 @@ Returns a clone of this  ISampleNode object.
 %feature("docstring")  FormFactorBox::getWidth "double FormFactorBox::getWidth() const
 ";
 
-%feature("docstring")  FormFactorBox::volume "double FormFactorBox::volume() const final
+%feature("docstring")  FormFactorBox::volume "double FormFactorBox::volume() const override
 
 Returns the total volume of the particle of this form factor's shape. 
 ";
 
-%feature("docstring")  FormFactorBox::radialExtension "double FormFactorBox::radialExtension() const final
+%feature("docstring")  FormFactorBox::radialExtension "double FormFactorBox::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorBox::evaluate_for_q "complex_t FormFactorBox::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorBox::evaluate_for_q "complex_t FormFactorBox::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -873,7 +873,7 @@ C++ includes: FormFactorCantellatedCube.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorCantellatedCube::accept "void FormFactorCantellatedCube::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorCantellatedCube::accept "void FormFactorCantellatedCube::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorCantellatedCube::getLength "double FormFactorCantellatedCube::getLength() const
@@ -972,12 +972,12 @@ C++ includes: FormFactorCone.h
 %feature("docstring")  FormFactorCone::FormFactorCone "FormFactorCone::FormFactorCone(double radius, double height, double alpha)
 ";
 
-%feature("docstring")  FormFactorCone::clone "FormFactorCone* FormFactorCone::clone() const final
+%feature("docstring")  FormFactorCone::clone "FormFactorCone* FormFactorCone::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorCone::accept "void FormFactorCone::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorCone::accept "void FormFactorCone::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorCone::getHeight "double FormFactorCone::getHeight() const
@@ -989,12 +989,12 @@ Returns a clone of this  ISampleNode object.
 %feature("docstring")  FormFactorCone::getRadius "double FormFactorCone::getRadius() const
 ";
 
-%feature("docstring")  FormFactorCone::radialExtension "double FormFactorCone::radialExtension() const final
+%feature("docstring")  FormFactorCone::radialExtension "double FormFactorCone::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorCone::evaluate_for_q "complex_t FormFactorCone::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorCone::evaluate_for_q "complex_t FormFactorCone::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -1019,7 +1019,7 @@ C++ includes: FormFactorCone6.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorCone6::accept "void FormFactorCone6::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorCone6::accept "void FormFactorCone6::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorCone6::getBaseEdge "double FormFactorCone6::getBaseEdge() const
@@ -1101,12 +1101,12 @@ C++ includes: FormFactorCosineRipple.h
 %feature("docstring")  FormFactorCosineRippleBox::FormFactorCosineRippleBox "FormFactorCosineRippleBox::FormFactorCosineRippleBox(double length, double width, double height)
 ";
 
-%feature("docstring")  FormFactorCosineRippleBox::clone "FormFactorCosineRippleBox * FormFactorCosineRippleBox::clone() const final
+%feature("docstring")  FormFactorCosineRippleBox::clone "FormFactorCosineRippleBox * FormFactorCosineRippleBox::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorCosineRippleBox::accept "void FormFactorCosineRippleBox::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorCosineRippleBox::accept "void FormFactorCosineRippleBox::accept(INodeVisitor *visitor) const override
 ";
 
 
@@ -1124,12 +1124,12 @@ C++ includes: FormFactorCosineRipple.h
 %feature("docstring")  FormFactorCosineRippleGauss::FormFactorCosineRippleGauss "FormFactorCosineRippleGauss::FormFactorCosineRippleGauss(double length, double width, double height)
 ";
 
-%feature("docstring")  FormFactorCosineRippleGauss::clone "FormFactorCosineRippleGauss * FormFactorCosineRippleGauss::clone() const final
+%feature("docstring")  FormFactorCosineRippleGauss::clone "FormFactorCosineRippleGauss * FormFactorCosineRippleGauss::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorCosineRippleGauss::accept "void FormFactorCosineRippleGauss::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorCosineRippleGauss::accept "void FormFactorCosineRippleGauss::accept(INodeVisitor *visitor) const override
 ";
 
 
@@ -1147,12 +1147,12 @@ C++ includes: FormFactorCosineRipple.h
 %feature("docstring")  FormFactorCosineRippleLorentz::FormFactorCosineRippleLorentz "FormFactorCosineRippleLorentz::FormFactorCosineRippleLorentz(double length, double width, double height)
 ";
 
-%feature("docstring")  FormFactorCosineRippleLorentz::clone "FormFactorCosineRippleLorentz * FormFactorCosineRippleLorentz::clone() const final
+%feature("docstring")  FormFactorCosineRippleLorentz::clone "FormFactorCosineRippleLorentz * FormFactorCosineRippleLorentz::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorCosineRippleLorentz::accept "void FormFactorCosineRippleLorentz::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorCosineRippleLorentz::accept "void FormFactorCosineRippleLorentz::accept(INodeVisitor *visitor) const override
 ";
 
 
@@ -1233,7 +1233,7 @@ C++ includes: FormFactorCuboctahedron.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorCuboctahedron::accept "void FormFactorCuboctahedron::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorCuboctahedron::accept "void FormFactorCuboctahedron::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorCuboctahedron::getLength "double FormFactorCuboctahedron::getLength() const
@@ -1263,12 +1263,12 @@ C++ includes: FormFactorCylinder.h
 %feature("docstring")  FormFactorCylinder::FormFactorCylinder "FormFactorCylinder::FormFactorCylinder(double radius, double height)
 ";
 
-%feature("docstring")  FormFactorCylinder::clone "FormFactorCylinder* FormFactorCylinder::clone() const final
+%feature("docstring")  FormFactorCylinder::clone "FormFactorCylinder* FormFactorCylinder::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorCylinder::accept "void FormFactorCylinder::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorCylinder::accept "void FormFactorCylinder::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorCylinder::getHeight "double FormFactorCylinder::getHeight() const
@@ -1277,12 +1277,12 @@ Returns a clone of this  ISampleNode object.
 %feature("docstring")  FormFactorCylinder::getRadius "double FormFactorCylinder::getRadius() const
 ";
 
-%feature("docstring")  FormFactorCylinder::radialExtension "double FormFactorCylinder::radialExtension() const final
+%feature("docstring")  FormFactorCylinder::radialExtension "double FormFactorCylinder::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorCylinder::evaluate_for_q "complex_t FormFactorCylinder::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorCylinder::evaluate_for_q "complex_t FormFactorCylinder::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -1347,25 +1347,25 @@ C++ includes: FormFactorDecoratorPositionFactor.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorDecoratorPositionFactor::accept "void FormFactorDecoratorPositionFactor::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorDecoratorPositionFactor::accept "void FormFactorDecoratorPositionFactor::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FormFactorDecoratorPositionFactor::bottomZ "double FormFactorDecoratorPositionFactor::bottomZ(const IRotation &rotation) const final
+%feature("docstring")  FormFactorDecoratorPositionFactor::bottomZ "double FormFactorDecoratorPositionFactor::bottomZ(const IRotation &rotation) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorDecoratorPositionFactor::topZ "double FormFactorDecoratorPositionFactor::topZ(const IRotation &rotation) const final
+%feature("docstring")  FormFactorDecoratorPositionFactor::topZ "double FormFactorDecoratorPositionFactor::topZ(const IRotation &rotation) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorDecoratorPositionFactor::evaluate "complex_t FormFactorDecoratorPositionFactor::evaluate(const WavevectorInfo &wavevectors) const final
+%feature("docstring")  FormFactorDecoratorPositionFactor::evaluate "complex_t FormFactorDecoratorPositionFactor::evaluate(const WavevectorInfo &wavevectors) const override
 
 Returns scattering amplitude for complex wavevectors ki, kf. 
 ";
 
-%feature("docstring")  FormFactorDecoratorPositionFactor::evaluatePol "Eigen::Matrix2cd FormFactorDecoratorPositionFactor::evaluatePol(const WavevectorInfo &wavevectors) const final
+%feature("docstring")  FormFactorDecoratorPositionFactor::evaluatePol "Eigen::Matrix2cd FormFactorDecoratorPositionFactor::evaluatePol(const WavevectorInfo &wavevectors) const override
 
 Returns scattering amplitude for matrix interactions. 
 ";
@@ -1384,30 +1384,30 @@ C++ includes: FormFactorDecoratorRotation.h
 Constructor, setting form factor and rotation. 
 ";
 
-%feature("docstring")  FormFactorDecoratorRotation::clone "FormFactorDecoratorRotation * FormFactorDecoratorRotation::clone() const final
+%feature("docstring")  FormFactorDecoratorRotation::clone "FormFactorDecoratorRotation * FormFactorDecoratorRotation::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorDecoratorRotation::accept "void FormFactorDecoratorRotation::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorDecoratorRotation::accept "void FormFactorDecoratorRotation::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FormFactorDecoratorRotation::bottomZ "double FormFactorDecoratorRotation::bottomZ(const IRotation &rotation) const final
+%feature("docstring")  FormFactorDecoratorRotation::bottomZ "double FormFactorDecoratorRotation::bottomZ(const IRotation &rotation) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorDecoratorRotation::topZ "double FormFactorDecoratorRotation::topZ(const IRotation &rotation) const final
+%feature("docstring")  FormFactorDecoratorRotation::topZ "double FormFactorDecoratorRotation::topZ(const IRotation &rotation) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorDecoratorRotation::evaluate "complex_t FormFactorDecoratorRotation::evaluate(const WavevectorInfo &wavevectors) const final
+%feature("docstring")  FormFactorDecoratorRotation::evaluate "complex_t FormFactorDecoratorRotation::evaluate(const WavevectorInfo &wavevectors) const override
 
 Returns scattering amplitude for complex wavevectors ki, kf. 
 ";
 
-%feature("docstring")  FormFactorDecoratorRotation::evaluatePol "Eigen::Matrix2cd FormFactorDecoratorRotation::evaluatePol(const WavevectorInfo &wavevectors) const final
+%feature("docstring")  FormFactorDecoratorRotation::evaluatePol "Eigen::Matrix2cd FormFactorDecoratorRotation::evaluatePol(const WavevectorInfo &wavevectors) const override
 
 Returns scattering amplitude for matrix interactions. 
 ";
@@ -1427,12 +1427,12 @@ C++ includes: FormFactorDodecahedron.h
 %feature("docstring")  FormFactorDodecahedron::FormFactorDodecahedron "FormFactorDodecahedron::FormFactorDodecahedron(double edge)
 ";
 
-%feature("docstring")  FormFactorDodecahedron::clone "FormFactorDodecahedron* FormFactorDodecahedron::clone() const final
+%feature("docstring")  FormFactorDodecahedron::clone "FormFactorDodecahedron* FormFactorDodecahedron::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorDodecahedron::accept "void FormFactorDodecahedron::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorDodecahedron::accept "void FormFactorDodecahedron::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorDodecahedron::getEdge "double FormFactorDodecahedron::getEdge() const
@@ -1453,33 +1453,33 @@ C++ includes: FormFactorDot.h
 %feature("docstring")  FormFactorDot::FormFactorDot "FormFactorDot::FormFactorDot(double radius)
 ";
 
-%feature("docstring")  FormFactorDot::clone "FormFactorDot* FormFactorDot::clone() const final
+%feature("docstring")  FormFactorDot::clone "FormFactorDot* FormFactorDot::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorDot::accept "void FormFactorDot::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorDot::accept "void FormFactorDot::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorDot::getRadius "double FormFactorDot::getRadius() const
 ";
 
-%feature("docstring")  FormFactorDot::radialExtension "double FormFactorDot::radialExtension() const final
+%feature("docstring")  FormFactorDot::radialExtension "double FormFactorDot::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorDot::bottomZ "double FormFactorDot::bottomZ(const IRotation &) const final
+%feature("docstring")  FormFactorDot::bottomZ "double FormFactorDot::bottomZ(const IRotation &) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorDot::topZ "double FormFactorDot::topZ(const IRotation &) const final
+%feature("docstring")  FormFactorDot::topZ "double FormFactorDot::topZ(const IRotation &) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorDot::evaluate_for_q "complex_t FormFactorDot::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorDot::evaluate_for_q "complex_t FormFactorDot::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -1504,7 +1504,7 @@ C++ includes: FormFactorEllipsoidalCylinder.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorEllipsoidalCylinder::accept "void FormFactorEllipsoidalCylinder::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorEllipsoidalCylinder::accept "void FormFactorEllipsoidalCylinder::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorEllipsoidalCylinder::getRadiusX "double FormFactorEllipsoidalCylinder::getRadiusX() const
@@ -1516,12 +1516,12 @@ Returns a clone of this  ISampleNode object.
 %feature("docstring")  FormFactorEllipsoidalCylinder::getHeight "double FormFactorEllipsoidalCylinder::getHeight() const
 ";
 
-%feature("docstring")  FormFactorEllipsoidalCylinder::radialExtension "double FormFactorEllipsoidalCylinder::radialExtension() const final
+%feature("docstring")  FormFactorEllipsoidalCylinder::radialExtension "double FormFactorEllipsoidalCylinder::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorEllipsoidalCylinder::evaluate_for_q "complex_t FormFactorEllipsoidalCylinder::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorEllipsoidalCylinder::evaluate_for_q "complex_t FormFactorEllipsoidalCylinder::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -1546,28 +1546,28 @@ C++ includes: FormFactorFullSphere.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorFullSphere::accept "void FormFactorFullSphere::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorFullSphere::accept "void FormFactorFullSphere::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorFullSphere::getRadius "double FormFactorFullSphere::getRadius() const
 ";
 
-%feature("docstring")  FormFactorFullSphere::radialExtension "double FormFactorFullSphere::radialExtension() const final
+%feature("docstring")  FormFactorFullSphere::radialExtension "double FormFactorFullSphere::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorFullSphere::bottomZ "double FormFactorFullSphere::bottomZ(const IRotation &rotation) const final
+%feature("docstring")  FormFactorFullSphere::bottomZ "double FormFactorFullSphere::bottomZ(const IRotation &rotation) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorFullSphere::topZ "double FormFactorFullSphere::topZ(const IRotation &rotation) const final
+%feature("docstring")  FormFactorFullSphere::topZ "double FormFactorFullSphere::topZ(const IRotation &rotation) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorFullSphere::evaluate_for_q "complex_t FormFactorFullSphere::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorFullSphere::evaluate_for_q "complex_t FormFactorFullSphere::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -1592,7 +1592,7 @@ C++ includes: FormFactorFullSpheroid.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorFullSpheroid::accept "void FormFactorFullSpheroid::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorFullSpheroid::accept "void FormFactorFullSpheroid::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorFullSpheroid::getHeight "double FormFactorFullSpheroid::getHeight() const
@@ -1601,12 +1601,12 @@ Returns a clone of this  ISampleNode object.
 %feature("docstring")  FormFactorFullSpheroid::getRadius "double FormFactorFullSpheroid::getRadius() const
 ";
 
-%feature("docstring")  FormFactorFullSpheroid::radialExtension "double FormFactorFullSpheroid::radialExtension() const final
+%feature("docstring")  FormFactorFullSpheroid::radialExtension "double FormFactorFullSpheroid::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorFullSpheroid::evaluate_for_q "complex_t FormFactorFullSpheroid::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorFullSpheroid::evaluate_for_q "complex_t FormFactorFullSpheroid::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -1626,23 +1626,23 @@ C++ includes: FormFactorGauss.h
 %feature("docstring")  FormFactorGaussSphere::FormFactorGaussSphere "FormFactorGaussSphere::FormFactorGaussSphere(double mean_radius)
 ";
 
-%feature("docstring")  FormFactorGaussSphere::clone "FormFactorGaussSphere* FormFactorGaussSphere::clone() const final
+%feature("docstring")  FormFactorGaussSphere::clone "FormFactorGaussSphere* FormFactorGaussSphere::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorGaussSphere::accept "void FormFactorGaussSphere::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorGaussSphere::accept "void FormFactorGaussSphere::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorGaussSphere::getMeanRadius "double FormFactorGaussSphere::getMeanRadius() const
 ";
 
-%feature("docstring")  FormFactorGaussSphere::radialExtension "double FormFactorGaussSphere::radialExtension() const final
+%feature("docstring")  FormFactorGaussSphere::radialExtension "double FormFactorGaussSphere::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorGaussSphere::evaluate_for_q "complex_t FormFactorGaussSphere::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorGaussSphere::evaluate_for_q "complex_t FormFactorGaussSphere::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -1670,7 +1670,7 @@ C++ includes: FormFactorHemiEllipsoid.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorHemiEllipsoid::accept "void FormFactorHemiEllipsoid::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorHemiEllipsoid::accept "void FormFactorHemiEllipsoid::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorHemiEllipsoid::getHeight "double FormFactorHemiEllipsoid::getHeight() const
@@ -1682,12 +1682,12 @@ Returns a clone of this  ISampleNode object.
 %feature("docstring")  FormFactorHemiEllipsoid::getRadiusY "double FormFactorHemiEllipsoid::getRadiusY() const
 ";
 
-%feature("docstring")  FormFactorHemiEllipsoid::radialExtension "double FormFactorHemiEllipsoid::radialExtension() const final
+%feature("docstring")  FormFactorHemiEllipsoid::radialExtension "double FormFactorHemiEllipsoid::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorHemiEllipsoid::evaluate_for_q "complex_t FormFactorHemiEllipsoid::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorHemiEllipsoid::evaluate_for_q "complex_t FormFactorHemiEllipsoid::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -1712,15 +1712,15 @@ C++ includes: FormFactorHollowSphere.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorHollowSphere::accept "void FormFactorHollowSphere::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorHollowSphere::accept "void FormFactorHollowSphere::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FormFactorHollowSphere::radialExtension "double FormFactorHollowSphere::radialExtension() const final
+%feature("docstring")  FormFactorHollowSphere::radialExtension "double FormFactorHollowSphere::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorHollowSphere::evaluate_for_q "complex_t FormFactorHollowSphere::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorHollowSphere::evaluate_for_q "complex_t FormFactorHollowSphere::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -1740,12 +1740,12 @@ C++ includes: FormFactorIcosahedron.h
 %feature("docstring")  FormFactorIcosahedron::FormFactorIcosahedron "FormFactorIcosahedron::FormFactorIcosahedron(double edge)
 ";
 
-%feature("docstring")  FormFactorIcosahedron::clone "FormFactorIcosahedron* FormFactorIcosahedron::clone() const final
+%feature("docstring")  FormFactorIcosahedron::clone "FormFactorIcosahedron* FormFactorIcosahedron::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorIcosahedron::accept "void FormFactorIcosahedron::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorIcosahedron::accept "void FormFactorIcosahedron::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorIcosahedron::getEdge "double FormFactorIcosahedron::getEdge() const
@@ -1771,7 +1771,7 @@ C++ includes: FormFactorLongBoxGauss.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorLongBoxGauss::accept "void FormFactorLongBoxGauss::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorLongBoxGauss::accept "void FormFactorLongBoxGauss::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorLongBoxGauss::getLength "double FormFactorLongBoxGauss::getLength() const
@@ -1783,12 +1783,12 @@ Returns a clone of this  ISampleNode object.
 %feature("docstring")  FormFactorLongBoxGauss::getWidth "double FormFactorLongBoxGauss::getWidth() const
 ";
 
-%feature("docstring")  FormFactorLongBoxGauss::radialExtension "double FormFactorLongBoxGauss::radialExtension() const final
+%feature("docstring")  FormFactorLongBoxGauss::radialExtension "double FormFactorLongBoxGauss::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorLongBoxGauss::evaluate_for_q "complex_t FormFactorLongBoxGauss::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorLongBoxGauss::evaluate_for_q "complex_t FormFactorLongBoxGauss::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -1813,7 +1813,7 @@ C++ includes: FormFactorLongBoxLorentz.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorLongBoxLorentz::accept "void FormFactorLongBoxLorentz::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorLongBoxLorentz::accept "void FormFactorLongBoxLorentz::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorLongBoxLorentz::getLength "double FormFactorLongBoxLorentz::getLength() const
@@ -1825,12 +1825,12 @@ Returns a clone of this  ISampleNode object.
 %feature("docstring")  FormFactorLongBoxLorentz::getWidth "double FormFactorLongBoxLorentz::getWidth() const
 ";
 
-%feature("docstring")  FormFactorLongBoxLorentz::radialExtension "double FormFactorLongBoxLorentz::radialExtension() const final
+%feature("docstring")  FormFactorLongBoxLorentz::radialExtension "double FormFactorLongBoxLorentz::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorLongBoxLorentz::evaluate_for_q "complex_t FormFactorLongBoxLorentz::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorLongBoxLorentz::evaluate_for_q "complex_t FormFactorLongBoxLorentz::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -1850,12 +1850,12 @@ C++ includes: FormFactorPrism3.h
 %feature("docstring")  FormFactorPrism3::FormFactorPrism3 "FormFactorPrism3::FormFactorPrism3(double base_edge, double height)
 ";
 
-%feature("docstring")  FormFactorPrism3::clone "FormFactorPrism3* FormFactorPrism3::clone() const final
+%feature("docstring")  FormFactorPrism3::clone "FormFactorPrism3* FormFactorPrism3::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorPrism3::accept "void FormFactorPrism3::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorPrism3::accept "void FormFactorPrism3::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorPrism3::getBaseEdge "double FormFactorPrism3::getBaseEdge() const
@@ -1876,12 +1876,12 @@ C++ includes: FormFactorPrism6.h
 %feature("docstring")  FormFactorPrism6::FormFactorPrism6 "FormFactorPrism6::FormFactorPrism6(double base_edge, double height)
 ";
 
-%feature("docstring")  FormFactorPrism6::clone "FormFactorPrism6* FormFactorPrism6::clone() const final
+%feature("docstring")  FormFactorPrism6::clone "FormFactorPrism6* FormFactorPrism6::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorPrism6::accept "void FormFactorPrism6::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorPrism6::accept "void FormFactorPrism6::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorPrism6::getBaseEdge "double FormFactorPrism6::getBaseEdge() const
@@ -1907,7 +1907,7 @@ C++ includes: FormFactorPyramid.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorPyramid::accept "void FormFactorPyramid::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorPyramid::accept "void FormFactorPyramid::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorPyramid::getHeight "double FormFactorPyramid::getHeight() const
@@ -1934,12 +1934,12 @@ C++ includes: FormFactorSawtoothRipple.h
 %feature("docstring")  FormFactorSawtoothRippleBox::FormFactorSawtoothRippleBox "FormFactorSawtoothRippleBox::FormFactorSawtoothRippleBox(double length, double width, double height, double asymmetry)
 ";
 
-%feature("docstring")  FormFactorSawtoothRippleBox::clone "FormFactorSawtoothRippleBox * FormFactorSawtoothRippleBox::clone() const final
+%feature("docstring")  FormFactorSawtoothRippleBox::clone "FormFactorSawtoothRippleBox * FormFactorSawtoothRippleBox::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorSawtoothRippleBox::accept "void FormFactorSawtoothRippleBox::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorSawtoothRippleBox::accept "void FormFactorSawtoothRippleBox::accept(INodeVisitor *visitor) const override
 ";
 
 
@@ -1957,12 +1957,12 @@ C++ includes: FormFactorSawtoothRipple.h
 %feature("docstring")  FormFactorSawtoothRippleGauss::FormFactorSawtoothRippleGauss "FormFactorSawtoothRippleGauss::FormFactorSawtoothRippleGauss(double length, double width, double height, double asymmetry)
 ";
 
-%feature("docstring")  FormFactorSawtoothRippleGauss::clone "FormFactorSawtoothRippleGauss * FormFactorSawtoothRippleGauss::clone() const final
+%feature("docstring")  FormFactorSawtoothRippleGauss::clone "FormFactorSawtoothRippleGauss * FormFactorSawtoothRippleGauss::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorSawtoothRippleGauss::accept "void FormFactorSawtoothRippleGauss::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorSawtoothRippleGauss::accept "void FormFactorSawtoothRippleGauss::accept(INodeVisitor *visitor) const override
 ";
 
 
@@ -1980,12 +1980,12 @@ C++ includes: FormFactorSawtoothRipple.h
 %feature("docstring")  FormFactorSawtoothRippleLorentz::FormFactorSawtoothRippleLorentz "FormFactorSawtoothRippleLorentz::FormFactorSawtoothRippleLorentz(double length, double width, double height, double asymmetry)
 ";
 
-%feature("docstring")  FormFactorSawtoothRippleLorentz::clone "FormFactorSawtoothRippleLorentz * FormFactorSawtoothRippleLorentz::clone() const final
+%feature("docstring")  FormFactorSawtoothRippleLorentz::clone "FormFactorSawtoothRippleLorentz * FormFactorSawtoothRippleLorentz::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorSawtoothRippleLorentz::accept "void FormFactorSawtoothRippleLorentz::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorSawtoothRippleLorentz::accept "void FormFactorSawtoothRippleLorentz::accept(INodeVisitor *visitor) const override
 ";
 
 
@@ -2008,15 +2008,15 @@ C++ includes: FormFactorSphereGaussianRadius.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorSphereGaussianRadius::accept "void FormFactorSphereGaussianRadius::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorSphereGaussianRadius::accept "void FormFactorSphereGaussianRadius::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FormFactorSphereGaussianRadius::radialExtension "double FormFactorSphereGaussianRadius::radialExtension() const final
+%feature("docstring")  FormFactorSphereGaussianRadius::radialExtension "double FormFactorSphereGaussianRadius::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorSphereGaussianRadius::evaluate_for_q "complex_t FormFactorSphereGaussianRadius::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorSphereGaussianRadius::evaluate_for_q "complex_t FormFactorSphereGaussianRadius::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -2036,20 +2036,20 @@ C++ includes: FormFactorSphereLogNormalRadius.h
 %feature("docstring")  FormFactorSphereLogNormalRadius::FormFactorSphereLogNormalRadius "FormFactorSphereLogNormalRadius::FormFactorSphereLogNormalRadius(double mean, double scale_param, size_t n_samples)
 ";
 
-%feature("docstring")  FormFactorSphereLogNormalRadius::clone "FormFactorSphereLogNormalRadius * FormFactorSphereLogNormalRadius::clone() const final
+%feature("docstring")  FormFactorSphereLogNormalRadius::clone "FormFactorSphereLogNormalRadius * FormFactorSphereLogNormalRadius::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorSphereLogNormalRadius::accept "void FormFactorSphereLogNormalRadius::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorSphereLogNormalRadius::accept "void FormFactorSphereLogNormalRadius::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FormFactorSphereLogNormalRadius::radialExtension "double FormFactorSphereLogNormalRadius::radialExtension() const final
+%feature("docstring")  FormFactorSphereLogNormalRadius::radialExtension "double FormFactorSphereLogNormalRadius::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorSphereLogNormalRadius::evaluate_for_q "complex_t FormFactorSphereLogNormalRadius::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorSphereLogNormalRadius::evaluate_for_q "complex_t FormFactorSphereLogNormalRadius::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -2074,7 +2074,7 @@ C++ includes: FormFactorTetrahedron.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorTetrahedron::accept "void FormFactorTetrahedron::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorTetrahedron::accept "void FormFactorTetrahedron::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorTetrahedron::getBaseEdge "double FormFactorTetrahedron::getBaseEdge() const
@@ -2106,7 +2106,7 @@ C++ includes: FormFactorTruncatedCube.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorTruncatedCube::accept "void FormFactorTruncatedCube::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorTruncatedCube::accept "void FormFactorTruncatedCube::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorTruncatedCube::getLength "double FormFactorTruncatedCube::getLength() const
@@ -2135,7 +2135,7 @@ C++ includes: FormFactorTruncatedSphere.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorTruncatedSphere::accept "void FormFactorTruncatedSphere::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorTruncatedSphere::accept "void FormFactorTruncatedSphere::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorTruncatedSphere::getHeight "double FormFactorTruncatedSphere::getHeight() const
@@ -2147,12 +2147,12 @@ Returns a clone of this  ISampleNode object.
 %feature("docstring")  FormFactorTruncatedSphere::getRemovedTop "double FormFactorTruncatedSphere::getRemovedTop() const
 ";
 
-%feature("docstring")  FormFactorTruncatedSphere::radialExtension "double FormFactorTruncatedSphere::radialExtension() const final
+%feature("docstring")  FormFactorTruncatedSphere::radialExtension "double FormFactorTruncatedSphere::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorTruncatedSphere::evaluate_for_q "complex_t FormFactorTruncatedSphere::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorTruncatedSphere::evaluate_for_q "complex_t FormFactorTruncatedSphere::evaluate_for_q(cvector_t q) const override
 
 Complex form factor. 
 ";
@@ -2177,7 +2177,7 @@ C++ includes: FormFactorTruncatedSpheroid.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorTruncatedSpheroid::accept "void FormFactorTruncatedSpheroid::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorTruncatedSpheroid::accept "void FormFactorTruncatedSpheroid::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorTruncatedSpheroid::getRadius "double FormFactorTruncatedSpheroid::getRadius() const
@@ -2192,12 +2192,12 @@ Returns a clone of this  ISampleNode object.
 %feature("docstring")  FormFactorTruncatedSpheroid::getRemovedTop "double FormFactorTruncatedSpheroid::getRemovedTop() const
 ";
 
-%feature("docstring")  FormFactorTruncatedSpheroid::radialExtension "double FormFactorTruncatedSpheroid::radialExtension() const final
+%feature("docstring")  FormFactorTruncatedSpheroid::radialExtension "double FormFactorTruncatedSpheroid::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorTruncatedSpheroid::evaluate_for_q "complex_t FormFactorTruncatedSpheroid::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorTruncatedSpheroid::evaluate_for_q "complex_t FormFactorTruncatedSpheroid::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -2278,10 +2278,10 @@ C++ includes: FTDecay1D.h
 %feature("docstring")  FTDecayFunction1DCauchy::clone "FTDecayFunction1DCauchy * FTDecayFunction1DCauchy::clone() const
 ";
 
-%feature("docstring")  FTDecayFunction1DCauchy::accept "void FTDecayFunction1DCauchy::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDecayFunction1DCauchy::accept "void FTDecayFunction1DCauchy::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDecayFunction1DCauchy::evaluate "double FTDecayFunction1DCauchy::evaluate(double q) const final
+%feature("docstring")  FTDecayFunction1DCauchy::evaluate "double FTDecayFunction1DCauchy::evaluate(double q) const override
 ";
 
 
@@ -2302,10 +2302,10 @@ C++ includes: FTDecay1D.h
 %feature("docstring")  FTDecayFunction1DGauss::clone "FTDecayFunction1DGauss * FTDecayFunction1DGauss::clone() const
 ";
 
-%feature("docstring")  FTDecayFunction1DGauss::accept "void FTDecayFunction1DGauss::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDecayFunction1DGauss::accept "void FTDecayFunction1DGauss::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDecayFunction1DGauss::evaluate "double FTDecayFunction1DGauss::evaluate(double q) const final
+%feature("docstring")  FTDecayFunction1DGauss::evaluate "double FTDecayFunction1DGauss::evaluate(double q) const override
 ";
 
 
@@ -2326,10 +2326,10 @@ C++ includes: FTDecay1D.h
 %feature("docstring")  FTDecayFunction1DTriangle::clone "FTDecayFunction1DTriangle * FTDecayFunction1DTriangle::clone() const
 ";
 
-%feature("docstring")  FTDecayFunction1DTriangle::accept "void FTDecayFunction1DTriangle::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDecayFunction1DTriangle::accept "void FTDecayFunction1DTriangle::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDecayFunction1DTriangle::evaluate "double FTDecayFunction1DTriangle::evaluate(double q) const final
+%feature("docstring")  FTDecayFunction1DTriangle::evaluate "double FTDecayFunction1DTriangle::evaluate(double q) const override
 ";
 
 
@@ -2350,10 +2350,10 @@ C++ includes: FTDecay1D.h
 %feature("docstring")  FTDecayFunction1DVoigt::clone "FTDecayFunction1DVoigt * FTDecayFunction1DVoigt::clone() const
 ";
 
-%feature("docstring")  FTDecayFunction1DVoigt::accept "void FTDecayFunction1DVoigt::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDecayFunction1DVoigt::accept "void FTDecayFunction1DVoigt::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDecayFunction1DVoigt::evaluate "double FTDecayFunction1DVoigt::evaluate(double q) const final
+%feature("docstring")  FTDecayFunction1DVoigt::evaluate "double FTDecayFunction1DVoigt::evaluate(double q) const override
 ";
 
 %feature("docstring")  FTDecayFunction1DVoigt::eEta "double FTDecayFunction1DVoigt::eEta() const
@@ -2377,10 +2377,10 @@ C++ includes: FTDecay2D.h
 %feature("docstring")  FTDecayFunction2DCauchy::clone "FTDecayFunction2DCauchy * FTDecayFunction2DCauchy::clone() const
 ";
 
-%feature("docstring")  FTDecayFunction2DCauchy::accept "void FTDecayFunction2DCauchy::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDecayFunction2DCauchy::accept "void FTDecayFunction2DCauchy::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDecayFunction2DCauchy::evaluate "double FTDecayFunction2DCauchy::evaluate(double qx, double qy) const final
+%feature("docstring")  FTDecayFunction2DCauchy::evaluate "double FTDecayFunction2DCauchy::evaluate(double qx, double qy) const override
 
 evaluate Fourier transformed decay function for q in X,Y coordinates 
 ";
@@ -2403,10 +2403,10 @@ C++ includes: FTDecay2D.h
 %feature("docstring")  FTDecayFunction2DGauss::clone "FTDecayFunction2DGauss * FTDecayFunction2DGauss::clone() const
 ";
 
-%feature("docstring")  FTDecayFunction2DGauss::accept "void FTDecayFunction2DGauss::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDecayFunction2DGauss::accept "void FTDecayFunction2DGauss::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDecayFunction2DGauss::evaluate "double FTDecayFunction2DGauss::evaluate(double qx, double qy) const final
+%feature("docstring")  FTDecayFunction2DGauss::evaluate "double FTDecayFunction2DGauss::evaluate(double qx, double qy) const override
 
 evaluate Fourier transformed decay function for q in X,Y coordinates 
 ";
@@ -2429,10 +2429,10 @@ C++ includes: FTDecay2D.h
 %feature("docstring")  FTDecayFunction2DVoigt::clone "FTDecayFunction2DVoigt * FTDecayFunction2DVoigt::clone() const
 ";
 
-%feature("docstring")  FTDecayFunction2DVoigt::accept "void FTDecayFunction2DVoigt::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDecayFunction2DVoigt::accept "void FTDecayFunction2DVoigt::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDecayFunction2DVoigt::evaluate "double FTDecayFunction2DVoigt::evaluate(double qx, double qy) const final
+%feature("docstring")  FTDecayFunction2DVoigt::evaluate "double FTDecayFunction2DVoigt::evaluate(double qx, double qy) const override
 
 evaluate Fourier transformed decay function for q in X,Y coordinates 
 ";
@@ -2455,23 +2455,23 @@ C++ includes: FTDistributions1D.h
 %feature("docstring")  FTDistribution1DCauchy::FTDistribution1DCauchy "FTDistribution1DCauchy::FTDistribution1DCauchy(double omega)
 ";
 
-%feature("docstring")  FTDistribution1DCauchy::clone "FTDistribution1DCauchy * FTDistribution1DCauchy::clone() const final
+%feature("docstring")  FTDistribution1DCauchy::clone "FTDistribution1DCauchy * FTDistribution1DCauchy::clone() const override
 ";
 
-%feature("docstring")  FTDistribution1DCauchy::accept "void FTDistribution1DCauchy::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDistribution1DCauchy::accept "void FTDistribution1DCauchy::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDistribution1DCauchy::evaluate "double FTDistribution1DCauchy::evaluate(double q) const final
+%feature("docstring")  FTDistribution1DCauchy::evaluate "double FTDistribution1DCauchy::evaluate(double q) const override
 
 Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 ";
 
-%feature("docstring")  FTDistribution1DCauchy::qSecondDerivative "double FTDistribution1DCauchy::qSecondDerivative() const final
+%feature("docstring")  FTDistribution1DCauchy::qSecondDerivative "double FTDistribution1DCauchy::qSecondDerivative() const override
 
 Returns the negative of the second order derivative in q space around q=0. 
 ";
 
-%feature("docstring")  FTDistribution1DCauchy::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DCauchy::createSampler() const final
+%feature("docstring")  FTDistribution1DCauchy::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DCauchy::createSampler() const override
 ";
 
 
@@ -2489,23 +2489,23 @@ C++ includes: FTDistributions1D.h
 %feature("docstring")  FTDistribution1DCosine::FTDistribution1DCosine "FTDistribution1DCosine::FTDistribution1DCosine(double omega)
 ";
 
-%feature("docstring")  FTDistribution1DCosine::clone "FTDistribution1DCosine * FTDistribution1DCosine::clone() const final
+%feature("docstring")  FTDistribution1DCosine::clone "FTDistribution1DCosine * FTDistribution1DCosine::clone() const override
 ";
 
-%feature("docstring")  FTDistribution1DCosine::accept "void FTDistribution1DCosine::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDistribution1DCosine::accept "void FTDistribution1DCosine::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDistribution1DCosine::evaluate "double FTDistribution1DCosine::evaluate(double q) const final
+%feature("docstring")  FTDistribution1DCosine::evaluate "double FTDistribution1DCosine::evaluate(double q) const override
 
 Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 ";
 
-%feature("docstring")  FTDistribution1DCosine::qSecondDerivative "double FTDistribution1DCosine::qSecondDerivative() const final
+%feature("docstring")  FTDistribution1DCosine::qSecondDerivative "double FTDistribution1DCosine::qSecondDerivative() const override
 
 Returns the negative of the second order derivative in q space around q=0. 
 ";
 
-%feature("docstring")  FTDistribution1DCosine::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DCosine::createSampler() const final
+%feature("docstring")  FTDistribution1DCosine::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DCosine::createSampler() const override
 ";
 
 
@@ -2523,23 +2523,23 @@ C++ includes: FTDistributions1D.h
 %feature("docstring")  FTDistribution1DGate::FTDistribution1DGate "FTDistribution1DGate::FTDistribution1DGate(double omega)
 ";
 
-%feature("docstring")  FTDistribution1DGate::clone "FTDistribution1DGate * FTDistribution1DGate::clone() const final
+%feature("docstring")  FTDistribution1DGate::clone "FTDistribution1DGate * FTDistribution1DGate::clone() const override
 ";
 
-%feature("docstring")  FTDistribution1DGate::accept "void FTDistribution1DGate::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDistribution1DGate::accept "void FTDistribution1DGate::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDistribution1DGate::evaluate "double FTDistribution1DGate::evaluate(double q) const final
+%feature("docstring")  FTDistribution1DGate::evaluate "double FTDistribution1DGate::evaluate(double q) const override
 
 Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 ";
 
-%feature("docstring")  FTDistribution1DGate::qSecondDerivative "double FTDistribution1DGate::qSecondDerivative() const final
+%feature("docstring")  FTDistribution1DGate::qSecondDerivative "double FTDistribution1DGate::qSecondDerivative() const override
 
 Returns the negative of the second order derivative in q space around q=0. 
 ";
 
-%feature("docstring")  FTDistribution1DGate::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DGate::createSampler() const final
+%feature("docstring")  FTDistribution1DGate::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DGate::createSampler() const override
 ";
 
 
@@ -2557,23 +2557,23 @@ C++ includes: FTDistributions1D.h
 %feature("docstring")  FTDistribution1DGauss::FTDistribution1DGauss "FTDistribution1DGauss::FTDistribution1DGauss(double omega)
 ";
 
-%feature("docstring")  FTDistribution1DGauss::clone "FTDistribution1DGauss * FTDistribution1DGauss::clone() const final
+%feature("docstring")  FTDistribution1DGauss::clone "FTDistribution1DGauss * FTDistribution1DGauss::clone() const override
 ";
 
-%feature("docstring")  FTDistribution1DGauss::accept "void FTDistribution1DGauss::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDistribution1DGauss::accept "void FTDistribution1DGauss::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDistribution1DGauss::evaluate "double FTDistribution1DGauss::evaluate(double q) const final
+%feature("docstring")  FTDistribution1DGauss::evaluate "double FTDistribution1DGauss::evaluate(double q) const override
 
 Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 ";
 
-%feature("docstring")  FTDistribution1DGauss::qSecondDerivative "double FTDistribution1DGauss::qSecondDerivative() const final
+%feature("docstring")  FTDistribution1DGauss::qSecondDerivative "double FTDistribution1DGauss::qSecondDerivative() const override
 
 Returns the negative of the second order derivative in q space around q=0. 
 ";
 
-%feature("docstring")  FTDistribution1DGauss::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DGauss::createSampler() const final
+%feature("docstring")  FTDistribution1DGauss::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DGauss::createSampler() const override
 ";
 
 
@@ -2591,23 +2591,23 @@ C++ includes: FTDistributions1D.h
 %feature("docstring")  FTDistribution1DTriangle::FTDistribution1DTriangle "FTDistribution1DTriangle::FTDistribution1DTriangle(double omega)
 ";
 
-%feature("docstring")  FTDistribution1DTriangle::clone "FTDistribution1DTriangle * FTDistribution1DTriangle::clone() const final
+%feature("docstring")  FTDistribution1DTriangle::clone "FTDistribution1DTriangle * FTDistribution1DTriangle::clone() const override
 ";
 
-%feature("docstring")  FTDistribution1DTriangle::accept "void FTDistribution1DTriangle::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDistribution1DTriangle::accept "void FTDistribution1DTriangle::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDistribution1DTriangle::evaluate "double FTDistribution1DTriangle::evaluate(double q) const final
+%feature("docstring")  FTDistribution1DTriangle::evaluate "double FTDistribution1DTriangle::evaluate(double q) const override
 
 Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 ";
 
-%feature("docstring")  FTDistribution1DTriangle::qSecondDerivative "double FTDistribution1DTriangle::qSecondDerivative() const final
+%feature("docstring")  FTDistribution1DTriangle::qSecondDerivative "double FTDistribution1DTriangle::qSecondDerivative() const override
 
 Returns the negative of the second order derivative in q space around q=0. 
 ";
 
-%feature("docstring")  FTDistribution1DTriangle::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DTriangle::createSampler() const final
+%feature("docstring")  FTDistribution1DTriangle::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DTriangle::createSampler() const override
 ";
 
 
@@ -2625,13 +2625,13 @@ C++ includes: FTDistributions1D.h
 %feature("docstring")  FTDistribution1DVoigt::FTDistribution1DVoigt "FTDistribution1DVoigt::FTDistribution1DVoigt(double omega, double eta)
 ";
 
-%feature("docstring")  FTDistribution1DVoigt::clone "FTDistribution1DVoigt * FTDistribution1DVoigt::clone() const final
+%feature("docstring")  FTDistribution1DVoigt::clone "FTDistribution1DVoigt * FTDistribution1DVoigt::clone() const override
 ";
 
-%feature("docstring")  FTDistribution1DVoigt::accept "void FTDistribution1DVoigt::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDistribution1DVoigt::accept "void FTDistribution1DVoigt::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDistribution1DVoigt::evaluate "double FTDistribution1DVoigt::evaluate(double q) const final
+%feature("docstring")  FTDistribution1DVoigt::evaluate "double FTDistribution1DVoigt::evaluate(double q) const override
 
 Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 ";
@@ -2639,12 +2639,12 @@ Returns Fourier transform of this distribution; is a decay function starting at
 %feature("docstring")  FTDistribution1DVoigt::eta "double FTDistribution1DVoigt::eta() const
 ";
 
-%feature("docstring")  FTDistribution1DVoigt::qSecondDerivative "double FTDistribution1DVoigt::qSecondDerivative() const final
+%feature("docstring")  FTDistribution1DVoigt::qSecondDerivative "double FTDistribution1DVoigt::qSecondDerivative() const override
 
 Returns the negative of the second order derivative in q space around q=0. 
 ";
 
-%feature("docstring")  FTDistribution1DVoigt::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DVoigt::createSampler() const final
+%feature("docstring")  FTDistribution1DVoigt::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DVoigt::createSampler() const override
 ";
 
 
@@ -2662,18 +2662,18 @@ C++ includes: FTDistributions2D.h
 %feature("docstring")  FTDistribution2DCauchy::FTDistribution2DCauchy "FTDistribution2DCauchy::FTDistribution2DCauchy(double omega_x, double omega_y, double gamma)
 ";
 
-%feature("docstring")  FTDistribution2DCauchy::clone "FTDistribution2DCauchy * FTDistribution2DCauchy::clone() const final
+%feature("docstring")  FTDistribution2DCauchy::clone "FTDistribution2DCauchy * FTDistribution2DCauchy::clone() const override
 ";
 
-%feature("docstring")  FTDistribution2DCauchy::accept "void FTDistribution2DCauchy::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDistribution2DCauchy::accept "void FTDistribution2DCauchy::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDistribution2DCauchy::evaluate "double FTDistribution2DCauchy::evaluate(double qx, double qy) const final
+%feature("docstring")  FTDistribution2DCauchy::evaluate "double FTDistribution2DCauchy::evaluate(double qx, double qy) const override
 
 evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 
 ";
 
-%feature("docstring")  FTDistribution2DCauchy::createSampler "std::unique_ptr< IDistribution2DSampler > FTDistribution2DCauchy::createSampler() const final
+%feature("docstring")  FTDistribution2DCauchy::createSampler "std::unique_ptr< IDistribution2DSampler > FTDistribution2DCauchy::createSampler() const override
 ";
 
 
@@ -2703,18 +2703,18 @@ C++ includes: FTDistributions2D.h
 %feature("docstring")  FTDistribution2DCone::FTDistribution2DCone "FTDistribution2DCone::FTDistribution2DCone(double omega_x, double omega_y, double gamma)
 ";
 
-%feature("docstring")  FTDistribution2DCone::clone "FTDistribution2DCone * FTDistribution2DCone::clone() const final
+%feature("docstring")  FTDistribution2DCone::clone "FTDistribution2DCone * FTDistribution2DCone::clone() const override
 ";
 
-%feature("docstring")  FTDistribution2DCone::accept "void FTDistribution2DCone::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDistribution2DCone::accept "void FTDistribution2DCone::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDistribution2DCone::evaluate "double FTDistribution2DCone::evaluate(double qx, double qy) const final
+%feature("docstring")  FTDistribution2DCone::evaluate "double FTDistribution2DCone::evaluate(double qx, double qy) const override
 
 evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 
 ";
 
-%feature("docstring")  FTDistribution2DCone::createSampler "std::unique_ptr< IDistribution2DSampler > FTDistribution2DCone::createSampler() const final
+%feature("docstring")  FTDistribution2DCone::createSampler "std::unique_ptr< IDistribution2DSampler > FTDistribution2DCone::createSampler() const override
 ";
 
 
@@ -2732,18 +2732,18 @@ C++ includes: FTDistributions2D.h
 %feature("docstring")  FTDistribution2DGate::FTDistribution2DGate "FTDistribution2DGate::FTDistribution2DGate(double omega_x, double omega_y, double gamma)
 ";
 
-%feature("docstring")  FTDistribution2DGate::clone "FTDistribution2DGate * FTDistribution2DGate::clone() const final
+%feature("docstring")  FTDistribution2DGate::clone "FTDistribution2DGate * FTDistribution2DGate::clone() const override
 ";
 
-%feature("docstring")  FTDistribution2DGate::accept "void FTDistribution2DGate::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDistribution2DGate::accept "void FTDistribution2DGate::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDistribution2DGate::evaluate "double FTDistribution2DGate::evaluate(double qx, double qy) const final
+%feature("docstring")  FTDistribution2DGate::evaluate "double FTDistribution2DGate::evaluate(double qx, double qy) const override
 
 evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 
 ";
 
-%feature("docstring")  FTDistribution2DGate::createSampler "std::unique_ptr< IDistribution2DSampler > FTDistribution2DGate::createSampler() const final
+%feature("docstring")  FTDistribution2DGate::createSampler "std::unique_ptr< IDistribution2DSampler > FTDistribution2DGate::createSampler() const override
 ";
 
 
@@ -2761,18 +2761,18 @@ C++ includes: FTDistributions2D.h
 %feature("docstring")  FTDistribution2DGauss::FTDistribution2DGauss "FTDistribution2DGauss::FTDistribution2DGauss(double omega_x, double omega_y, double gamma)
 ";
 
-%feature("docstring")  FTDistribution2DGauss::clone "FTDistribution2DGauss * FTDistribution2DGauss::clone() const final
+%feature("docstring")  FTDistribution2DGauss::clone "FTDistribution2DGauss * FTDistribution2DGauss::clone() const override
 ";
 
-%feature("docstring")  FTDistribution2DGauss::accept "void FTDistribution2DGauss::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDistribution2DGauss::accept "void FTDistribution2DGauss::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDistribution2DGauss::evaluate "double FTDistribution2DGauss::evaluate(double qx, double qy) const final
+%feature("docstring")  FTDistribution2DGauss::evaluate "double FTDistribution2DGauss::evaluate(double qx, double qy) const override
 
 evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 
 ";
 
-%feature("docstring")  FTDistribution2DGauss::createSampler "std::unique_ptr< IDistribution2DSampler > FTDistribution2DGauss::createSampler() const final
+%feature("docstring")  FTDistribution2DGauss::createSampler "std::unique_ptr< IDistribution2DSampler > FTDistribution2DGauss::createSampler() const override
 ";
 
 
@@ -2790,13 +2790,13 @@ C++ includes: FTDistributions2D.h
 %feature("docstring")  FTDistribution2DVoigt::FTDistribution2DVoigt "FTDistribution2DVoigt::FTDistribution2DVoigt(double omega_x, double omega_y, double gamma, double eta)
 ";
 
-%feature("docstring")  FTDistribution2DVoigt::clone "FTDistribution2DVoigt * FTDistribution2DVoigt::clone() const final
+%feature("docstring")  FTDistribution2DVoigt::clone "FTDistribution2DVoigt * FTDistribution2DVoigt::clone() const override
 ";
 
-%feature("docstring")  FTDistribution2DVoigt::accept "void FTDistribution2DVoigt::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDistribution2DVoigt::accept "void FTDistribution2DVoigt::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDistribution2DVoigt::evaluate "double FTDistribution2DVoigt::evaluate(double qx, double qy) const final
+%feature("docstring")  FTDistribution2DVoigt::evaluate "double FTDistribution2DVoigt::evaluate(double qx, double qy) const override
 
 evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 
 ";
@@ -2804,7 +2804,7 @@ evaluate Fourier transformed distribution for q in X,Y coordinates the original
 %feature("docstring")  FTDistribution2DVoigt::eta "double FTDistribution2DVoigt::eta() const
 ";
 
-%feature("docstring")  FTDistribution2DVoigt::createSampler "std::unique_ptr< IDistribution2DSampler > FTDistribution2DVoigt::createSampler() const final
+%feature("docstring")  FTDistribution2DVoigt::createSampler "std::unique_ptr< IDistribution2DSampler > FTDistribution2DVoigt::createSampler() const override
 ";
 
 
@@ -2873,19 +2873,19 @@ C++ includes: Lattice2D.h
 %feature("docstring")  HexagonalLattice2D::clone "HexagonalLattice2D * HexagonalLattice2D::clone() const
 ";
 
-%feature("docstring")  HexagonalLattice2D::accept "void HexagonalLattice2D::accept(INodeVisitor *visitor) const final
+%feature("docstring")  HexagonalLattice2D::accept "void HexagonalLattice2D::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  HexagonalLattice2D::length1 "virtual double HexagonalLattice2D::length1() const
+%feature("docstring")  HexagonalLattice2D::length1 "double HexagonalLattice2D::length1() const override
 ";
 
-%feature("docstring")  HexagonalLattice2D::length2 "virtual double HexagonalLattice2D::length2() const
+%feature("docstring")  HexagonalLattice2D::length2 "double HexagonalLattice2D::length2() const override
 ";
 
-%feature("docstring")  HexagonalLattice2D::latticeAngle "double HexagonalLattice2D::latticeAngle() const
+%feature("docstring")  HexagonalLattice2D::latticeAngle "double HexagonalLattice2D::latticeAngle() const override
 ";
 
-%feature("docstring")  HexagonalLattice2D::unitCellArea "double HexagonalLattice2D::unitCellArea() const
+%feature("docstring")  HexagonalLattice2D::unitCellArea "double HexagonalLattice2D::unitCellArea() const override
 ";
 
 
@@ -3287,17 +3287,17 @@ The mathematics implemented here is described in full detail in a paper by Joach
 %feature("docstring")  IFormFactorPolyhedron::~IFormFactorPolyhedron "IFormFactorPolyhedron::~IFormFactorPolyhedron()
 ";
 
-%feature("docstring")  IFormFactorPolyhedron::bottomZ "double IFormFactorPolyhedron::bottomZ(const IRotation &rotation) const final
+%feature("docstring")  IFormFactorPolyhedron::bottomZ "double IFormFactorPolyhedron::bottomZ(const IRotation &rotation) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  IFormFactorPolyhedron::topZ "double IFormFactorPolyhedron::topZ(const IRotation &rotation) const final
+%feature("docstring")  IFormFactorPolyhedron::topZ "double IFormFactorPolyhedron::topZ(const IRotation &rotation) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  IFormFactorPolyhedron::evaluate_for_q "complex_t IFormFactorPolyhedron::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  IFormFactorPolyhedron::evaluate_for_q "complex_t IFormFactorPolyhedron::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -3305,12 +3305,12 @@ Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This m
 %feature("docstring")  IFormFactorPolyhedron::evaluate_centered "complex_t IFormFactorPolyhedron::evaluate_centered(cvector_t q) const
 ";
 
-%feature("docstring")  IFormFactorPolyhedron::volume "double IFormFactorPolyhedron::volume() const final
+%feature("docstring")  IFormFactorPolyhedron::volume "double IFormFactorPolyhedron::volume() const override
 
 Returns the total volume of the particle of this form factor's shape. 
 ";
 
-%feature("docstring")  IFormFactorPolyhedron::radialExtension "double IFormFactorPolyhedron::radialExtension() const final
+%feature("docstring")  IFormFactorPolyhedron::radialExtension "double IFormFactorPolyhedron::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
@@ -3335,12 +3335,12 @@ C++ includes: IFormFactorPrism.h
 %feature("docstring")  IFormFactorPrism::~IFormFactorPrism "IFormFactorPrism::~IFormFactorPrism()
 ";
 
-%feature("docstring")  IFormFactorPrism::bottomZ "double IFormFactorPrism::bottomZ(const IRotation &rotation) const final
+%feature("docstring")  IFormFactorPrism::bottomZ "double IFormFactorPrism::bottomZ(const IRotation &rotation) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  IFormFactorPrism::topZ "double IFormFactorPrism::topZ(const IRotation &rotation) const final
+%feature("docstring")  IFormFactorPrism::topZ "double IFormFactorPrism::topZ(const IRotation &rotation) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
@@ -4142,12 +4142,12 @@ C++ includes: InterferenceFunctionNone.h
 %feature("docstring")  InterferenceFunctionNone::InterferenceFunctionNone "InterferenceFunctionNone::InterferenceFunctionNone()
 ";
 
-%feature("docstring")  InterferenceFunctionNone::clone "InterferenceFunctionNone * InterferenceFunctionNone::clone() const final
+%feature("docstring")  InterferenceFunctionNone::clone "InterferenceFunctionNone * InterferenceFunctionNone::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  InterferenceFunctionNone::accept "void InterferenceFunctionNone::accept(INodeVisitor *visitor) const final
+%feature("docstring")  InterferenceFunctionNone::accept "void InterferenceFunctionNone::accept(INodeVisitor *visitor) const override
 ";
 
 
@@ -4173,12 +4173,12 @@ damping_length:
 the damping (coherence) length of the paracrystal in nanometers 
 ";
 
-%feature("docstring")  InterferenceFunctionRadialParaCrystal::clone "InterferenceFunctionRadialParaCrystal * InterferenceFunctionRadialParaCrystal::clone() const final
+%feature("docstring")  InterferenceFunctionRadialParaCrystal::clone "InterferenceFunctionRadialParaCrystal * InterferenceFunctionRadialParaCrystal::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  InterferenceFunctionRadialParaCrystal::accept "void InterferenceFunctionRadialParaCrystal::accept(INodeVisitor *visitor) const final
+%feature("docstring")  InterferenceFunctionRadialParaCrystal::accept "void InterferenceFunctionRadialParaCrystal::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  InterferenceFunctionRadialParaCrystal::setKappa "void InterferenceFunctionRadialParaCrystal::setKappa(double kappa)
@@ -4223,7 +4223,7 @@ probability distribution (Fourier transform of probability density)
 %feature("docstring")  InterferenceFunctionRadialParaCrystal::dampingLength "double InterferenceFunctionRadialParaCrystal::dampingLength() const
 ";
 
-%feature("docstring")  InterferenceFunctionRadialParaCrystal::getChildren "std::vector< const INode * > InterferenceFunctionRadialParaCrystal::getChildren() const final
+%feature("docstring")  InterferenceFunctionRadialParaCrystal::getChildren "std::vector< const INode * > InterferenceFunctionRadialParaCrystal::getChildren() const override
 ";
 
 %feature("docstring")  InterferenceFunctionRadialParaCrystal::randomSample "double InterferenceFunctionRadialParaCrystal::randomSample() const
@@ -4241,12 +4241,12 @@ C++ includes: InterferenceFunctionTwin.h
 %feature("docstring")  InterferenceFunctionTwin::InterferenceFunctionTwin "InterferenceFunctionTwin::InterferenceFunctionTwin(const kvector_t &direction, double mean_distance, double std_dev)
 ";
 
-%feature("docstring")  InterferenceFunctionTwin::clone "InterferenceFunctionTwin * InterferenceFunctionTwin::clone() const final
+%feature("docstring")  InterferenceFunctionTwin::clone "InterferenceFunctionTwin * InterferenceFunctionTwin::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  InterferenceFunctionTwin::accept "void InterferenceFunctionTwin::accept(INodeVisitor *visitor) const final
+%feature("docstring")  InterferenceFunctionTwin::accept "void InterferenceFunctionTwin::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  InterferenceFunctionTwin::direction "kvector_t InterferenceFunctionTwin::direction() const
@@ -4318,7 +4318,7 @@ z:
 z-coordinate in nanometers 
 ";
 
-%feature("docstring")  IParticle::translate "void IParticle::translate(kvector_t translation) final
+%feature("docstring")  IParticle::translate "void IParticle::translate(kvector_t translation) override
 
 Translates the particle. 
 ";
@@ -4333,7 +4333,7 @@ Returns rotation object.
 Sets transformation. 
 ";
 
-%feature("docstring")  IParticle::rotate "void IParticle::rotate(const IRotation &rotation) final
+%feature("docstring")  IParticle::rotate "void IParticle::rotate(const IRotation &rotation) override
 
 Rotates the particle. 
 ";
@@ -4425,12 +4425,12 @@ C++ includes: IProfileRipple.h
 %feature("docstring")  IProfileRipple::getWidth "double IProfileRipple::getWidth() const
 ";
 
-%feature("docstring")  IProfileRipple::radialExtension "double IProfileRipple::radialExtension() const final
+%feature("docstring")  IProfileRipple::radialExtension "double IProfileRipple::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  IProfileRipple::evaluate_for_q "complex_t IProfileRipple::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  IProfileRipple::evaluate_for_q "complex_t IProfileRipple::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -4866,18 +4866,18 @@ thickness of a layer in nanometers
 %feature("docstring")  Layer::~Layer "Layer::~Layer() override
 ";
 
-%feature("docstring")  Layer::clone "Layer * Layer::clone() const final
+%feature("docstring")  Layer::clone "Layer * Layer::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  Layer::accept "void Layer::accept(INodeVisitor *visitor) const final
+%feature("docstring")  Layer::accept "void Layer::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  Layer::thickness "double Layer::thickness() const
 ";
 
-%feature("docstring")  Layer::material "const Material* Layer::material() const final
+%feature("docstring")  Layer::material "const Material* Layer::material() const override
 
 Returns nullptr, unless overwritten to return a specific material. 
 ";
@@ -4891,7 +4891,7 @@ Returns nullptr, unless overwritten to return a specific material.
 %feature("docstring")  Layer::layouts "std::vector< const ParticleLayout * > Layer::layouts() const
 ";
 
-%feature("docstring")  Layer::getChildren "std::vector< const INode * > Layer::getChildren() const final
+%feature("docstring")  Layer::getChildren "std::vector< const INode * > Layer::getChildren() const override
 ";
 
 %feature("docstring")  Layer::registerThickness "void Layer::registerThickness(bool make_registered=true)
@@ -5181,30 +5181,30 @@ Constructs basic material with name and magnetization.
 Returns pointer to a copy of material. 
 ";
 
-%feature("docstring")  MagneticMaterialImpl::inverted "MagneticMaterialImpl * MagneticMaterialImpl::inverted() const final
+%feature("docstring")  MagneticMaterialImpl::inverted "MagneticMaterialImpl * MagneticMaterialImpl::inverted() const override
 
 Constructs a material with inverted magnetization. 
 ";
 
-%feature("docstring")  MagneticMaterialImpl::isScalarMaterial "bool MagneticMaterialImpl::isScalarMaterial() const final
+%feature("docstring")  MagneticMaterialImpl::isScalarMaterial "bool MagneticMaterialImpl::isScalarMaterial() const override
 
 Indicates whether the interaction with the material is scalar. This means that different polarization states will be diffracted equally 
 ";
 
-%feature("docstring")  MagneticMaterialImpl::isMagneticMaterial "bool MagneticMaterialImpl::isMagneticMaterial() const final
+%feature("docstring")  MagneticMaterialImpl::isMagneticMaterial "bool MagneticMaterialImpl::isMagneticMaterial() const override
 ";
 
-%feature("docstring")  MagneticMaterialImpl::magnetization "kvector_t MagneticMaterialImpl::magnetization() const final
+%feature("docstring")  MagneticMaterialImpl::magnetization "kvector_t MagneticMaterialImpl::magnetization() const override
 
 Returns the magnetization (in A/m) 
 ";
 
-%feature("docstring")  MagneticMaterialImpl::polarizedSubtrSLD "Eigen::Matrix2cd MagneticMaterialImpl::polarizedSubtrSLD(const WavevectorInfo &wavevectors) const final
+%feature("docstring")  MagneticMaterialImpl::polarizedSubtrSLD "Eigen::Matrix2cd MagneticMaterialImpl::polarizedSubtrSLD(const WavevectorInfo &wavevectors) const override
 
 Returns (  $ \\\\pi/\\\\lambda^2 $ - sld) matrix with magnetization corrections. 
 ";
 
-%feature("docstring")  MagneticMaterialImpl::rotatedMaterial "MagneticMaterialImpl * MagneticMaterialImpl::rotatedMaterial(const Transform3D &transform) const final
+%feature("docstring")  MagneticMaterialImpl::rotatedMaterial "MagneticMaterialImpl * MagneticMaterialImpl::rotatedMaterial(const Transform3D &transform) const override
 ";
 
 
@@ -5409,12 +5409,12 @@ C++ includes: MatrixFresnelMap.h
 %feature("docstring")  MatrixFresnelMap::MatrixFresnelMap "MatrixFresnelMap::MatrixFresnelMap(const MatrixFresnelMap &other)=delete
 ";
 
-%feature("docstring")  MatrixFresnelMap::getOutCoefficients "std::unique_ptr< const ILayerRTCoefficients > MatrixFresnelMap::getOutCoefficients(const SimulationElement &sim_element, size_t layer_index) const final
+%feature("docstring")  MatrixFresnelMap::getOutCoefficients "std::unique_ptr< const ILayerRTCoefficients > MatrixFresnelMap::getOutCoefficients(const SimulationElement &sim_element, size_t layer_index) const override
 
 Retrieves the amplitude coefficients for a (time-reversed) outgoing wavevector. 
 ";
 
-%feature("docstring")  MatrixFresnelMap::setSlices "void MatrixFresnelMap::setSlices(const std::vector< Slice > &slices) final
+%feature("docstring")  MatrixFresnelMap::setSlices "void MatrixFresnelMap::setSlices(const std::vector< Slice > &slices) override
 ";
 
 
@@ -5499,20 +5499,20 @@ C++ includes: MesoCrystal.h
 %feature("docstring")  MesoCrystal::~MesoCrystal "MesoCrystal::~MesoCrystal()
 ";
 
-%feature("docstring")  MesoCrystal::clone "MesoCrystal * MesoCrystal::clone() const final
+%feature("docstring")  MesoCrystal::clone "MesoCrystal * MesoCrystal::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  MesoCrystal::accept "void MesoCrystal::accept(INodeVisitor *visitor) const final
+%feature("docstring")  MesoCrystal::accept "void MesoCrystal::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  MesoCrystal::createSlicedParticle "SlicedParticle MesoCrystal::createSlicedParticle(ZLimits limits) const final
+%feature("docstring")  MesoCrystal::createSlicedParticle "SlicedParticle MesoCrystal::createSlicedParticle(ZLimits limits) const override
 
 Creates a sliced form factor for this particle. 
 ";
 
-%feature("docstring")  MesoCrystal::getChildren "std::vector< const INode * > MesoCrystal::getChildren() const final
+%feature("docstring")  MesoCrystal::getChildren "std::vector< const INode * > MesoCrystal::getChildren() const override
 ";
 
 
@@ -5610,12 +5610,12 @@ C++ includes: MultiLayer.h
 %feature("docstring")  MultiLayer::~MultiLayer "MultiLayer::~MultiLayer() override
 ";
 
-%feature("docstring")  MultiLayer::clone "MultiLayer * MultiLayer::clone() const final
+%feature("docstring")  MultiLayer::clone "MultiLayer * MultiLayer::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  MultiLayer::accept "void MultiLayer::accept(INodeVisitor *visitor) const final
+%feature("docstring")  MultiLayer::accept "void MultiLayer::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  MultiLayer::numberOfLayers "size_t MultiLayer::numberOfLayers() const
@@ -5667,7 +5667,7 @@ Returns cross correlation length of roughnesses between interfaces.
 Returns the external field applied to the multilayer (units: A/m) 
 ";
 
-%feature("docstring")  MultiLayer::getChildren "std::vector< const INode * > MultiLayer::getChildren() const final
+%feature("docstring")  MultiLayer::getChildren "std::vector< const INode * > MultiLayer::getChildren() const override
 ";
 
 
@@ -5739,15 +5739,15 @@ C++ includes: Particle.h
 %feature("docstring")  Particle::Particle "Particle::Particle(Material material, const IFormFactor &form_factor, const IRotation &rotation)
 ";
 
-%feature("docstring")  Particle::clone "Particle * Particle::clone() const final
+%feature("docstring")  Particle::clone "Particle * Particle::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  Particle::accept "void Particle::accept(INodeVisitor *visitor) const final
+%feature("docstring")  Particle::accept "void Particle::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  Particle::createSlicedParticle "SlicedParticle Particle::createSlicedParticle(ZLimits limits) const final
+%feature("docstring")  Particle::createSlicedParticle "SlicedParticle Particle::createSlicedParticle(ZLimits limits) const override
 
 Creates a sliced form factor for this particle. 
 ";
@@ -5755,12 +5755,12 @@ Creates a sliced form factor for this particle.
 %feature("docstring")  Particle::setMaterial "void Particle::setMaterial(Material material)
 ";
 
-%feature("docstring")  Particle::material "const Material* Particle::material() const final
+%feature("docstring")  Particle::material "const Material* Particle::material() const override
 
 Returns nullptr, unless overwritten to return a specific material. 
 ";
 
-%feature("docstring")  Particle::getChildren "std::vector< const INode * > Particle::getChildren() const final
+%feature("docstring")  Particle::getChildren "std::vector< const INode * > Particle::getChildren() const override
 ";
 
 
@@ -5781,15 +5781,15 @@ C++ includes: ParticleComposition.h
 %feature("docstring")  ParticleComposition::~ParticleComposition "ParticleComposition::~ParticleComposition()
 ";
 
-%feature("docstring")  ParticleComposition::clone "ParticleComposition * ParticleComposition::clone() const final
+%feature("docstring")  ParticleComposition::clone "ParticleComposition * ParticleComposition::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  ParticleComposition::accept "void ParticleComposition::accept(INodeVisitor *visitor) const final
+%feature("docstring")  ParticleComposition::accept "void ParticleComposition::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  ParticleComposition::createFormFactor "IFormFactor * ParticleComposition::createFormFactor() const final
+%feature("docstring")  ParticleComposition::createFormFactor "IFormFactor * ParticleComposition::createFormFactor() const override
 
 Creates a form factor for this particle. 
 ";
@@ -5808,15 +5808,15 @@ Creates a form factor for this particle.
 Returns number of different particles. 
 ";
 
-%feature("docstring")  ParticleComposition::getChildren "std::vector< const INode * > ParticleComposition::getChildren() const final
+%feature("docstring")  ParticleComposition::getChildren "std::vector< const INode * > ParticleComposition::getChildren() const override
 ";
 
-%feature("docstring")  ParticleComposition::decompose "SafePointerVector< IParticle > ParticleComposition::decompose() const final
+%feature("docstring")  ParticleComposition::decompose "SafePointerVector< IParticle > ParticleComposition::decompose() const override
 
 Decompose in constituent  IParticle objects. 
 ";
 
-%feature("docstring")  ParticleComposition::bottomTopZ "ParticleLimits ParticleComposition::bottomTopZ() const final
+%feature("docstring")  ParticleComposition::bottomTopZ "ParticleLimits ParticleComposition::bottomTopZ() const override
 
 Top and bottom z-coordinate. 
 ";
@@ -5848,15 +5848,15 @@ C++ includes: ParticleCoreShell.h
 %feature("docstring")  ParticleCoreShell::~ParticleCoreShell "ParticleCoreShell::~ParticleCoreShell()
 ";
 
-%feature("docstring")  ParticleCoreShell::clone "ParticleCoreShell * ParticleCoreShell::clone() const final
+%feature("docstring")  ParticleCoreShell::clone "ParticleCoreShell * ParticleCoreShell::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  ParticleCoreShell::accept "void ParticleCoreShell::accept(INodeVisitor *visitor) const final
+%feature("docstring")  ParticleCoreShell::accept "void ParticleCoreShell::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  ParticleCoreShell::createSlicedParticle "SlicedParticle ParticleCoreShell::createSlicedParticle(ZLimits limits) const final
+%feature("docstring")  ParticleCoreShell::createSlicedParticle "SlicedParticle ParticleCoreShell::createSlicedParticle(ZLimits limits) const override
 
 Creates a sliced form factor for this particle. 
 ";
@@ -5867,7 +5867,7 @@ Creates a sliced form factor for this particle.
 %feature("docstring")  ParticleCoreShell::shellParticle "const Particle * ParticleCoreShell::shellParticle() const
 ";
 
-%feature("docstring")  ParticleCoreShell::getChildren "std::vector< const INode * > ParticleCoreShell::getChildren() const final
+%feature("docstring")  ParticleCoreShell::getChildren "std::vector< const INode * > ParticleCoreShell::getChildren() const override
 ";
 
 
@@ -5882,20 +5882,20 @@ C++ includes: ParticleDistribution.h
 %feature("docstring")  ParticleDistribution::ParticleDistribution "ParticleDistribution::ParticleDistribution(const IParticle &prototype, const ParameterDistribution &par_distr)
 ";
 
-%feature("docstring")  ParticleDistribution::clone "ParticleDistribution * ParticleDistribution::clone() const final
+%feature("docstring")  ParticleDistribution::clone "ParticleDistribution * ParticleDistribution::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  ParticleDistribution::accept "void ParticleDistribution::accept(INodeVisitor *visitor) const final
+%feature("docstring")  ParticleDistribution::accept "void ParticleDistribution::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  ParticleDistribution::translate "void ParticleDistribution::translate(kvector_t translation) final
+%feature("docstring")  ParticleDistribution::translate "void ParticleDistribution::translate(kvector_t translation) override
 
 Translates the particle with the given vector. 
 ";
 
-%feature("docstring")  ParticleDistribution::rotate "void ParticleDistribution::rotate(const IRotation &rotation) final
+%feature("docstring")  ParticleDistribution::rotate "void ParticleDistribution::rotate(const IRotation &rotation) override
 
 Applies the given rotation to the particle. 
 ";
@@ -5917,7 +5917,7 @@ Returns the prototype particle, used for generating multiple ones.
 Returns the distributed parameter data. 
 ";
 
-%feature("docstring")  ParticleDistribution::getChildren "std::vector< const INode * > ParticleDistribution::getChildren() const final
+%feature("docstring")  ParticleDistribution::getChildren "std::vector< const INode * > ParticleDistribution::getChildren() const override
 ";
 
 %feature("docstring")  ParticleDistribution::mainUnits "std::string ParticleDistribution::mainUnits() const
@@ -6716,7 +6716,7 @@ Sets sample builder and borrows its parameters.
 Resets to initial state by removing builder and its borrowed parameters. 
 ";
 
-%feature("docstring")  SampleBuilderNode::accept "void SampleBuilderNode::accept(INodeVisitor *visitor) const final
+%feature("docstring")  SampleBuilderNode::accept "void SampleBuilderNode::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  SampleBuilderNode::createMultiLayer "std::unique_ptr< MultiLayer > SampleBuilderNode::createMultiLayer()
@@ -6766,7 +6766,7 @@ Generates new sample if sample builder defined.
 %feature("docstring")  SampleProvider::getChildren "std::vector< const INode * > SampleProvider::getChildren() const override
 ";
 
-%feature("docstring")  SampleProvider::accept "void SampleProvider::accept(INodeVisitor *visitor) const final
+%feature("docstring")  SampleProvider::accept "void SampleProvider::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  SampleProvider::setParent "void SampleProvider::setParent(const INode *newParent) override
@@ -7280,19 +7280,19 @@ C++ includes: Lattice2D.h
 %feature("docstring")  SquareLattice2D::clone "SquareLattice2D * SquareLattice2D::clone() const
 ";
 
-%feature("docstring")  SquareLattice2D::accept "void SquareLattice2D::accept(INodeVisitor *visitor) const final
+%feature("docstring")  SquareLattice2D::accept "void SquareLattice2D::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  SquareLattice2D::length1 "virtual double SquareLattice2D::length1() const
+%feature("docstring")  SquareLattice2D::length1 "double SquareLattice2D::length1() const override
 ";
 
-%feature("docstring")  SquareLattice2D::length2 "virtual double SquareLattice2D::length2() const
+%feature("docstring")  SquareLattice2D::length2 "double SquareLattice2D::length2() const override
 ";
 
-%feature("docstring")  SquareLattice2D::latticeAngle "double SquareLattice2D::latticeAngle() const
+%feature("docstring")  SquareLattice2D::latticeAngle "double SquareLattice2D::latticeAngle() const override
 ";
 
-%feature("docstring")  SquareLattice2D::unitCellArea "double SquareLattice2D::unitCellArea() const
+%feature("docstring")  SquareLattice2D::unitCellArea "double SquareLattice2D::unitCellArea() const override
 ";
 
 
diff --git a/auto/Wrap/libBornAgainCore.py b/auto/Wrap/libBornAgainCore.py
index 97b1cb3d9a3..d6a94cf23da 100644
--- a/auto/Wrap/libBornAgainCore.py
+++ b/auto/Wrap/libBornAgainCore.py
@@ -3908,7 +3908,7 @@ class DepthProbeSimulation(ISimulation):
     def accept(self, visitor):
         r"""
         accept(DepthProbeSimulation self, INodeVisitor * visitor)
-        void DepthProbeSimulation::accept(INodeVisitor *visitor) const final
+        void DepthProbeSimulation::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainCore.DepthProbeSimulation_accept(self, visitor)
@@ -4019,7 +4019,7 @@ class SpecularSimulation(ISimulation):
     def accept(self, visitor):
         r"""
         accept(SpecularSimulation self, INodeVisitor * visitor)
-        void SpecularSimulation::accept(INodeVisitor *visitor) const final
+        void SpecularSimulation::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainCore.SpecularSimulation_accept(self, visitor)
@@ -4235,7 +4235,7 @@ class ConstantBackground(IBackground):
     def clone(self):
         r"""
         clone(ConstantBackground self) -> ConstantBackground
-        ConstantBackground * ConstantBackground::clone() const final
+        ConstantBackground * ConstantBackground::clone() const override
 
         """
         return _libBornAgainCore.ConstantBackground_clone(self)
@@ -4259,7 +4259,7 @@ class ConstantBackground(IBackground):
     def addBackground(self, intensity):
         r"""
         addBackground(ConstantBackground self, double intensity) -> double
-        double ConstantBackground::addBackground(double intensity) const final
+        double ConstantBackground::addBackground(double intensity) const override
 
         """
         return _libBornAgainCore.ConstantBackground_addBackground(self, intensity)
@@ -4292,7 +4292,7 @@ class PoissonNoiseBackground(IBackground):
     def clone(self):
         r"""
         clone(PoissonNoiseBackground self) -> PoissonNoiseBackground
-        PoissonNoiseBackground * PoissonNoiseBackground::clone() const final
+        PoissonNoiseBackground * PoissonNoiseBackground::clone() const override
 
         """
         return _libBornAgainCore.PoissonNoiseBackground_clone(self)
@@ -4308,7 +4308,7 @@ class PoissonNoiseBackground(IBackground):
     def addBackground(self, intensity):
         r"""
         addBackground(PoissonNoiseBackground self, double intensity) -> double
-        double PoissonNoiseBackground::addBackground(double intensity) const final
+        double PoissonNoiseBackground::addBackground(double intensity) const override
 
         """
         return _libBornAgainCore.PoissonNoiseBackground_addBackground(self, intensity)
diff --git a/auto/Wrap/libBornAgainCore_wrap.cpp b/auto/Wrap/libBornAgainCore_wrap.cpp
index a90e0175fe7..1a651690a09 100644
--- a/auto/Wrap/libBornAgainCore_wrap.cpp
+++ b/auto/Wrap/libBornAgainCore_wrap.cpp
@@ -44740,7 +44740,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DepthProbeSimulation_accept", _wrap_DepthProbeSimulation_accept, METH_VARARGS, "\n"
 		"DepthProbeSimulation_accept(DepthProbeSimulation self, INodeVisitor * visitor)\n"
-		"void DepthProbeSimulation::accept(INodeVisitor *visitor) const final\n"
+		"void DepthProbeSimulation::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "DepthProbeSimulation_result", _wrap_DepthProbeSimulation_result, METH_O, "\n"
@@ -44811,7 +44811,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "SpecularSimulation_accept", _wrap_SpecularSimulation_accept, METH_VARARGS, "\n"
 		"SpecularSimulation_accept(SpecularSimulation self, INodeVisitor * visitor)\n"
-		"void SpecularSimulation::accept(INodeVisitor *visitor) const final\n"
+		"void SpecularSimulation::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "SpecularSimulation_result", _wrap_SpecularSimulation_result, METH_O, "\n"
@@ -44933,7 +44933,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "ConstantBackground_clone", _wrap_ConstantBackground_clone, METH_O, "\n"
 		"ConstantBackground_clone(ConstantBackground self) -> ConstantBackground\n"
-		"ConstantBackground * ConstantBackground::clone() const final\n"
+		"ConstantBackground * ConstantBackground::clone() const override\n"
 		"\n"
 		""},
 	 { "ConstantBackground_backgroundValue", _wrap_ConstantBackground_backgroundValue, METH_O, "\n"
@@ -44948,7 +44948,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "ConstantBackground_addBackground", _wrap_ConstantBackground_addBackground, METH_VARARGS, "\n"
 		"ConstantBackground_addBackground(ConstantBackground self, double intensity) -> double\n"
-		"double ConstantBackground::addBackground(double intensity) const final\n"
+		"double ConstantBackground::addBackground(double intensity) const override\n"
 		"\n"
 		""},
 	 { "delete_ConstantBackground", _wrap_delete_ConstantBackground, METH_O, "delete_ConstantBackground(ConstantBackground self)"},
@@ -44961,7 +44961,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "PoissonNoiseBackground_clone", _wrap_PoissonNoiseBackground_clone, METH_O, "\n"
 		"PoissonNoiseBackground_clone(PoissonNoiseBackground self) -> PoissonNoiseBackground\n"
-		"PoissonNoiseBackground * PoissonNoiseBackground::clone() const final\n"
+		"PoissonNoiseBackground * PoissonNoiseBackground::clone() const override\n"
 		"\n"
 		""},
 	 { "PoissonNoiseBackground_accept", _wrap_PoissonNoiseBackground_accept, METH_VARARGS, "\n"
@@ -44971,7 +44971,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "PoissonNoiseBackground_addBackground", _wrap_PoissonNoiseBackground_addBackground, METH_VARARGS, "\n"
 		"PoissonNoiseBackground_addBackground(PoissonNoiseBackground self, double intensity) -> double\n"
-		"double PoissonNoiseBackground::addBackground(double intensity) const final\n"
+		"double PoissonNoiseBackground::addBackground(double intensity) const override\n"
 		"\n"
 		""},
 	 { "delete_PoissonNoiseBackground", _wrap_delete_PoissonNoiseBackground, METH_O, "delete_PoissonNoiseBackground(PoissonNoiseBackground self)"},
diff --git a/auto/Wrap/libBornAgainDevice.py b/auto/Wrap/libBornAgainDevice.py
index c1607ab3b50..2005f659088 100644
--- a/auto/Wrap/libBornAgainDevice.py
+++ b/auto/Wrap/libBornAgainDevice.py
@@ -3608,7 +3608,7 @@ class ResolutionFunction2DGaussian(IResolutionFunction2D):
     def accept(self, visitor):
         r"""
         accept(ResolutionFunction2DGaussian self, INodeVisitor * visitor)
-        void ResolutionFunction2DGaussian::accept(INodeVisitor *visitor) const final
+        void ResolutionFunction2DGaussian::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainDevice.ResolutionFunction2DGaussian_accept(self, visitor)
@@ -4247,7 +4247,7 @@ class RectangularDetector(IDetector2D):
     def accept(self, visitor):
         r"""
         accept(RectangularDetector self, INodeVisitor * visitor)
-        void RectangularDetector::accept(INodeVisitor *visitor) const final
+        void RectangularDetector::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainDevice.RectangularDetector_accept(self, visitor)
@@ -4402,7 +4402,7 @@ class RectangularDetector(IDetector2D):
     def defaultAxesUnits(self):
         r"""
         defaultAxesUnits(RectangularDetector self) -> Axes::Units
-        virtual Axes::Units RectangularDetector::defaultAxesUnits() const final
+        virtual Axes::Units RectangularDetector::defaultAxesUnits() const override
 
         return default axes units 
 
@@ -4464,7 +4464,7 @@ class SphericalDetector(IDetector2D):
     def defaultAxesUnits(self):
         r"""
         defaultAxesUnits(SphericalDetector self) -> Axes::Units
-        virtual Axes::Units SphericalDetector::defaultAxesUnits() const final
+        virtual Axes::Units SphericalDetector::defaultAxesUnits() const override
 
         return default axes units 
 
@@ -4508,7 +4508,7 @@ class IsGISAXSDetector(SphericalDetector):
     def accept(self, visitor):
         r"""
         accept(IsGISAXSDetector self, INodeVisitor * visitor)
-        void IsGISAXSDetector::accept(INodeVisitor *visitor) const final
+        void IsGISAXSDetector::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainDevice.IsGISAXSDetector_accept(self, visitor)
diff --git a/auto/Wrap/libBornAgainDevice_wrap.cpp b/auto/Wrap/libBornAgainDevice_wrap.cpp
index c67d4847085..f875c08430b 100644
--- a/auto/Wrap/libBornAgainDevice_wrap.cpp
+++ b/auto/Wrap/libBornAgainDevice_wrap.cpp
@@ -44969,7 +44969,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "ResolutionFunction2DGaussian_accept", _wrap_ResolutionFunction2DGaussian_accept, METH_VARARGS, "\n"
 		"ResolutionFunction2DGaussian_accept(ResolutionFunction2DGaussian self, INodeVisitor * visitor)\n"
-		"void ResolutionFunction2DGaussian::accept(INodeVisitor *visitor) const final\n"
+		"void ResolutionFunction2DGaussian::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "ResolutionFunction2DGaussian_getSigmaX", _wrap_ResolutionFunction2DGaussian_getSigmaX, METH_O, "\n"
@@ -45329,7 +45329,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "RectangularDetector_accept", _wrap_RectangularDetector_accept, METH_VARARGS, "\n"
 		"RectangularDetector_accept(RectangularDetector self, INodeVisitor * visitor)\n"
-		"void RectangularDetector::accept(INodeVisitor *visitor) const final\n"
+		"void RectangularDetector::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "delete_RectangularDetector", _wrap_delete_RectangularDetector, METH_O, "\n"
@@ -45431,7 +45431,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "RectangularDetector_defaultAxesUnits", _wrap_RectangularDetector_defaultAxesUnits, METH_O, "\n"
 		"RectangularDetector_defaultAxesUnits(RectangularDetector self) -> Axes::Units\n"
-		"virtual Axes::Units RectangularDetector::defaultAxesUnits() const final\n"
+		"virtual Axes::Units RectangularDetector::defaultAxesUnits() const override\n"
 		"\n"
 		"return default axes units \n"
 		"\n"
@@ -45468,7 +45468,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "SphericalDetector_defaultAxesUnits", _wrap_SphericalDetector_defaultAxesUnits, METH_O, "\n"
 		"SphericalDetector_defaultAxesUnits(SphericalDetector self) -> Axes::Units\n"
-		"virtual Axes::Units SphericalDetector::defaultAxesUnits() const final\n"
+		"virtual Axes::Units SphericalDetector::defaultAxesUnits() const override\n"
 		"\n"
 		"return default axes units \n"
 		"\n"
@@ -45489,7 +45489,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "IsGISAXSDetector_accept", _wrap_IsGISAXSDetector_accept, METH_VARARGS, "\n"
 		"IsGISAXSDetector_accept(IsGISAXSDetector self, INodeVisitor * visitor)\n"
-		"void IsGISAXSDetector::accept(INodeVisitor *visitor) const final\n"
+		"void IsGISAXSDetector::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "delete_IsGISAXSDetector", _wrap_delete_IsGISAXSDetector, METH_O, "delete_IsGISAXSDetector(IsGISAXSDetector self)"},
diff --git a/auto/Wrap/libBornAgainParam.py b/auto/Wrap/libBornAgainParam.py
index c71d60fdac9..9980f8cff19 100644
--- a/auto/Wrap/libBornAgainParam.py
+++ b/auto/Wrap/libBornAgainParam.py
@@ -3625,7 +3625,7 @@ class DistributionGate(IDistribution1D):
     def clone(self):
         r"""
         clone(DistributionGate self) -> DistributionGate
-        DistributionGate* DistributionGate::clone() const final
+        DistributionGate* DistributionGate::clone() const override
 
         """
         return _libBornAgainParam.DistributionGate_clone(self)
@@ -3633,7 +3633,7 @@ class DistributionGate(IDistribution1D):
     def probabilityDensity(self, x):
         r"""
         probabilityDensity(DistributionGate self, double x) -> double
-        double DistributionGate::probabilityDensity(double x) const final
+        double DistributionGate::probabilityDensity(double x) const override
 
         Returns the distribution-specific probability density for value x. 
 
@@ -3643,7 +3643,7 @@ class DistributionGate(IDistribution1D):
     def getMean(self):
         r"""
         getMean(DistributionGate self) -> double
-        double DistributionGate::getMean() const final
+        double DistributionGate::getMean() const override
 
         Returns the distribution-specific mean. 
 
@@ -3669,7 +3669,7 @@ class DistributionGate(IDistribution1D):
     def equidistantPoints(self, *args):
         r"""
         equidistantPoints(DistributionGate self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t
-        std::vector< double > DistributionGate::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+        std::vector< double > DistributionGate::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
         Returns list of sample values. 
 
@@ -3679,7 +3679,7 @@ class DistributionGate(IDistribution1D):
     def isDelta(self):
         r"""
         isDelta(DistributionGate self) -> bool
-        bool DistributionGate::isDelta() const final
+        bool DistributionGate::isDelta() const override
 
         Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 
@@ -3689,7 +3689,7 @@ class DistributionGate(IDistribution1D):
     def accept(self, visitor):
         r"""
         accept(DistributionGate self, INodeVisitor visitor)
-        void DistributionGate::accept(INodeVisitor *visitor) const final
+        void DistributionGate::accept(INodeVisitor *visitor) const override
 
         Calls the  INodeVisitor's visit method. 
 
@@ -3726,7 +3726,7 @@ class DistributionLorentz(IDistribution1D):
     def clone(self):
         r"""
         clone(DistributionLorentz self) -> DistributionLorentz
-        DistributionLorentz* DistributionLorentz::clone() const final
+        DistributionLorentz* DistributionLorentz::clone() const override
 
         """
         return _libBornAgainParam.DistributionLorentz_clone(self)
@@ -3734,7 +3734,7 @@ class DistributionLorentz(IDistribution1D):
     def probabilityDensity(self, x):
         r"""
         probabilityDensity(DistributionLorentz self, double x) -> double
-        double DistributionLorentz::probabilityDensity(double x) const final
+        double DistributionLorentz::probabilityDensity(double x) const override
 
         Returns the distribution-specific probability density for value x. 
 
@@ -3744,7 +3744,7 @@ class DistributionLorentz(IDistribution1D):
     def getMean(self):
         r"""
         getMean(DistributionLorentz self) -> double
-        double DistributionLorentz::getMean() const final
+        double DistributionLorentz::getMean() const override
 
         Returns the distribution-specific mean. 
 
@@ -3762,7 +3762,7 @@ class DistributionLorentz(IDistribution1D):
     def equidistantPoints(self, *args):
         r"""
         equidistantPoints(DistributionLorentz self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t
-        std::vector< double > DistributionLorentz::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+        std::vector< double > DistributionLorentz::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
         generate list of sample values 
 
@@ -3772,7 +3772,7 @@ class DistributionLorentz(IDistribution1D):
     def isDelta(self):
         r"""
         isDelta(DistributionLorentz self) -> bool
-        bool DistributionLorentz::isDelta() const final
+        bool DistributionLorentz::isDelta() const override
 
         Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 
@@ -3782,7 +3782,7 @@ class DistributionLorentz(IDistribution1D):
     def accept(self, visitor):
         r"""
         accept(DistributionLorentz self, INodeVisitor visitor)
-        void DistributionLorentz::accept(INodeVisitor *visitor) const final
+        void DistributionLorentz::accept(INodeVisitor *visitor) const override
 
         Calls the  INodeVisitor's visit method. 
 
@@ -3827,7 +3827,7 @@ class DistributionGaussian(IDistribution1D):
     def probabilityDensity(self, x):
         r"""
         probabilityDensity(DistributionGaussian self, double x) -> double
-        double DistributionGaussian::probabilityDensity(double x) const final
+        double DistributionGaussian::probabilityDensity(double x) const override
 
         Returns the distribution-specific probability density for value x. 
 
@@ -3837,7 +3837,7 @@ class DistributionGaussian(IDistribution1D):
     def getMean(self):
         r"""
         getMean(DistributionGaussian self) -> double
-        double DistributionGaussian::getMean() const final
+        double DistributionGaussian::getMean() const override
 
         Returns the distribution-specific mean. 
 
@@ -3855,7 +3855,7 @@ class DistributionGaussian(IDistribution1D):
     def equidistantPoints(self, *args):
         r"""
         equidistantPoints(DistributionGaussian self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t
-        std::vector< double > DistributionGaussian::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+        std::vector< double > DistributionGaussian::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
         generate list of sample values 
 
@@ -3865,7 +3865,7 @@ class DistributionGaussian(IDistribution1D):
     def isDelta(self):
         r"""
         isDelta(DistributionGaussian self) -> bool
-        bool DistributionGaussian::isDelta() const final
+        bool DistributionGaussian::isDelta() const override
 
         Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 
@@ -3875,7 +3875,7 @@ class DistributionGaussian(IDistribution1D):
     def accept(self, visitor):
         r"""
         accept(DistributionGaussian self, INodeVisitor visitor)
-        void DistributionGaussian::accept(INodeVisitor *visitor) const final
+        void DistributionGaussian::accept(INodeVisitor *visitor) const override
 
         Calls the  INodeVisitor's visit method. 
 
@@ -3919,7 +3919,7 @@ class DistributionLogNormal(IDistribution1D):
     def probabilityDensity(self, x):
         r"""
         probabilityDensity(DistributionLogNormal self, double x) -> double
-        double DistributionLogNormal::probabilityDensity(double x) const final
+        double DistributionLogNormal::probabilityDensity(double x) const override
 
         Returns the distribution-specific probability density for value x. 
 
@@ -3929,7 +3929,7 @@ class DistributionLogNormal(IDistribution1D):
     def getMean(self):
         r"""
         getMean(DistributionLogNormal self) -> double
-        double DistributionLogNormal::getMean() const final
+        double DistributionLogNormal::getMean() const override
 
         Returns the distribution-specific mean. 
 
@@ -3955,7 +3955,7 @@ class DistributionLogNormal(IDistribution1D):
     def equidistantPoints(self, *args):
         r"""
         equidistantPoints(DistributionLogNormal self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t
-        std::vector< double > DistributionLogNormal::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+        std::vector< double > DistributionLogNormal::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
         generate list of sample values 
 
@@ -3965,7 +3965,7 @@ class DistributionLogNormal(IDistribution1D):
     def isDelta(self):
         r"""
         isDelta(DistributionLogNormal self) -> bool
-        bool DistributionLogNormal::isDelta() const final
+        bool DistributionLogNormal::isDelta() const override
 
         Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 
@@ -3975,7 +3975,7 @@ class DistributionLogNormal(IDistribution1D):
     def accept(self, visitor):
         r"""
         accept(DistributionLogNormal self, INodeVisitor visitor)
-        void DistributionLogNormal::accept(INodeVisitor *visitor) const final
+        void DistributionLogNormal::accept(INodeVisitor *visitor) const override
 
         Calls the  INodeVisitor's visit method. 
 
@@ -3985,7 +3985,7 @@ class DistributionLogNormal(IDistribution1D):
     def setUnits(self, units):
         r"""
         setUnits(DistributionLogNormal self, std::string const & units)
-        void DistributionLogNormal::setUnits(const std::string &units)
+        void DistributionLogNormal::setUnits(const std::string &units) override
 
         Sets distribution units. 
 
@@ -4022,7 +4022,7 @@ class DistributionCosine(IDistribution1D):
     def clone(self):
         r"""
         clone(DistributionCosine self) -> DistributionCosine
-        DistributionCosine* DistributionCosine::clone() const final
+        DistributionCosine* DistributionCosine::clone() const override
 
         """
         return _libBornAgainParam.DistributionCosine_clone(self)
@@ -4030,7 +4030,7 @@ class DistributionCosine(IDistribution1D):
     def probabilityDensity(self, x):
         r"""
         probabilityDensity(DistributionCosine self, double x) -> double
-        double DistributionCosine::probabilityDensity(double x) const final
+        double DistributionCosine::probabilityDensity(double x) const override
 
         Returns the distribution-specific probability density for value x. 
 
@@ -4040,7 +4040,7 @@ class DistributionCosine(IDistribution1D):
     def getMean(self):
         r"""
         getMean(DistributionCosine self) -> double
-        double DistributionCosine::getMean() const final
+        double DistributionCosine::getMean() const override
 
         Returns the distribution-specific mean. 
 
@@ -4058,7 +4058,7 @@ class DistributionCosine(IDistribution1D):
     def equidistantPoints(self, *args):
         r"""
         equidistantPoints(DistributionCosine self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t
-        std::vector< double > DistributionCosine::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+        std::vector< double > DistributionCosine::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
         generate list of sample values 
 
@@ -4068,7 +4068,7 @@ class DistributionCosine(IDistribution1D):
     def isDelta(self):
         r"""
         isDelta(DistributionCosine self) -> bool
-        bool DistributionCosine::isDelta() const final
+        bool DistributionCosine::isDelta() const override
 
         Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 
@@ -4078,7 +4078,7 @@ class DistributionCosine(IDistribution1D):
     def accept(self, visitor):
         r"""
         accept(DistributionCosine self, INodeVisitor visitor)
-        void DistributionCosine::accept(INodeVisitor *visitor) const final
+        void DistributionCosine::accept(INodeVisitor *visitor) const override
 
         Calls the  INodeVisitor's visit method. 
 
@@ -4123,7 +4123,7 @@ class DistributionTrapezoid(IDistribution1D):
     def probabilityDensity(self, x):
         r"""
         probabilityDensity(DistributionTrapezoid self, double x) -> double
-        double DistributionTrapezoid::probabilityDensity(double x) const final
+        double DistributionTrapezoid::probabilityDensity(double x) const override
 
         Returns the distribution-specific probability density for value x. 
 
@@ -4133,7 +4133,7 @@ class DistributionTrapezoid(IDistribution1D):
     def getMean(self):
         r"""
         getMean(DistributionTrapezoid self) -> double
-        double DistributionTrapezoid::getMean() const final
+        double DistributionTrapezoid::getMean() const override
 
         Returns the distribution-specific mean. 
 
@@ -4167,7 +4167,7 @@ class DistributionTrapezoid(IDistribution1D):
     def equidistantPoints(self, *args):
         r"""
         equidistantPoints(DistributionTrapezoid self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t
-        std::vector< double > DistributionTrapezoid::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+        std::vector< double > DistributionTrapezoid::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
         generate list of sample values 
 
@@ -4177,7 +4177,7 @@ class DistributionTrapezoid(IDistribution1D):
     def isDelta(self):
         r"""
         isDelta(DistributionTrapezoid self) -> bool
-        bool DistributionTrapezoid::isDelta() const final
+        bool DistributionTrapezoid::isDelta() const override
 
         Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 
@@ -4187,7 +4187,7 @@ class DistributionTrapezoid(IDistribution1D):
     def accept(self, visitor):
         r"""
         accept(DistributionTrapezoid self, INodeVisitor visitor)
-        void DistributionTrapezoid::accept(INodeVisitor *visitor) const final
+        void DistributionTrapezoid::accept(INodeVisitor *visitor) const override
 
         Calls the  INodeVisitor's visit method. 
 
diff --git a/auto/Wrap/libBornAgainParam_wrap.cpp b/auto/Wrap/libBornAgainParam_wrap.cpp
index 0110bdccdd6..d7f39b09f2e 100644
--- a/auto/Wrap/libBornAgainParam_wrap.cpp
+++ b/auto/Wrap/libBornAgainParam_wrap.cpp
@@ -51485,19 +51485,19 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionGate_clone", _wrap_DistributionGate_clone, METH_O, "\n"
 		"DistributionGate_clone(DistributionGate self) -> DistributionGate\n"
-		"DistributionGate* DistributionGate::clone() const final\n"
+		"DistributionGate* DistributionGate::clone() const override\n"
 		"\n"
 		""},
 	 { "DistributionGate_probabilityDensity", _wrap_DistributionGate_probabilityDensity, METH_VARARGS, "\n"
 		"DistributionGate_probabilityDensity(DistributionGate self, double x) -> double\n"
-		"double DistributionGate::probabilityDensity(double x) const final\n"
+		"double DistributionGate::probabilityDensity(double x) const override\n"
 		"\n"
 		"Returns the distribution-specific probability density for value x. \n"
 		"\n"
 		""},
 	 { "DistributionGate_getMean", _wrap_DistributionGate_getMean, METH_O, "\n"
 		"DistributionGate_getMean(DistributionGate self) -> double\n"
-		"double DistributionGate::getMean() const final\n"
+		"double DistributionGate::getMean() const override\n"
 		"\n"
 		"Returns the distribution-specific mean. \n"
 		"\n"
@@ -51514,21 +51514,21 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionGate_equidistantPoints", _wrap_DistributionGate_equidistantPoints, METH_VARARGS, "\n"
 		"DistributionGate_equidistantPoints(DistributionGate self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t\n"
-		"std::vector< double > DistributionGate::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const\n"
+		"std::vector< double > DistributionGate::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override\n"
 		"\n"
 		"Returns list of sample values. \n"
 		"\n"
 		""},
 	 { "DistributionGate_isDelta", _wrap_DistributionGate_isDelta, METH_O, "\n"
 		"DistributionGate_isDelta(DistributionGate self) -> bool\n"
-		"bool DistributionGate::isDelta() const final\n"
+		"bool DistributionGate::isDelta() const override\n"
 		"\n"
 		"Returns true if the distribution is in the limit case of a Dirac delta distribution. \n"
 		"\n"
 		""},
 	 { "DistributionGate_accept", _wrap_DistributionGate_accept, METH_VARARGS, "\n"
 		"DistributionGate_accept(DistributionGate self, INodeVisitor visitor)\n"
-		"void DistributionGate::accept(INodeVisitor *visitor) const final\n"
+		"void DistributionGate::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -51545,19 +51545,19 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionLorentz_clone", _wrap_DistributionLorentz_clone, METH_O, "\n"
 		"DistributionLorentz_clone(DistributionLorentz self) -> DistributionLorentz\n"
-		"DistributionLorentz* DistributionLorentz::clone() const final\n"
+		"DistributionLorentz* DistributionLorentz::clone() const override\n"
 		"\n"
 		""},
 	 { "DistributionLorentz_probabilityDensity", _wrap_DistributionLorentz_probabilityDensity, METH_VARARGS, "\n"
 		"DistributionLorentz_probabilityDensity(DistributionLorentz self, double x) -> double\n"
-		"double DistributionLorentz::probabilityDensity(double x) const final\n"
+		"double DistributionLorentz::probabilityDensity(double x) const override\n"
 		"\n"
 		"Returns the distribution-specific probability density for value x. \n"
 		"\n"
 		""},
 	 { "DistributionLorentz_getMean", _wrap_DistributionLorentz_getMean, METH_O, "\n"
 		"DistributionLorentz_getMean(DistributionLorentz self) -> double\n"
-		"double DistributionLorentz::getMean() const final\n"
+		"double DistributionLorentz::getMean() const override\n"
 		"\n"
 		"Returns the distribution-specific mean. \n"
 		"\n"
@@ -51569,21 +51569,21 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionLorentz_equidistantPoints", _wrap_DistributionLorentz_equidistantPoints, METH_VARARGS, "\n"
 		"DistributionLorentz_equidistantPoints(DistributionLorentz self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t\n"
-		"std::vector< double > DistributionLorentz::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const\n"
+		"std::vector< double > DistributionLorentz::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override\n"
 		"\n"
 		"generate list of sample values \n"
 		"\n"
 		""},
 	 { "DistributionLorentz_isDelta", _wrap_DistributionLorentz_isDelta, METH_O, "\n"
 		"DistributionLorentz_isDelta(DistributionLorentz self) -> bool\n"
-		"bool DistributionLorentz::isDelta() const final\n"
+		"bool DistributionLorentz::isDelta() const override\n"
 		"\n"
 		"Returns true if the distribution is in the limit case of a Dirac delta distribution. \n"
 		"\n"
 		""},
 	 { "DistributionLorentz_accept", _wrap_DistributionLorentz_accept, METH_VARARGS, "\n"
 		"DistributionLorentz_accept(DistributionLorentz self, INodeVisitor visitor)\n"
-		"void DistributionLorentz::accept(INodeVisitor *visitor) const final\n"
+		"void DistributionLorentz::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -51605,14 +51605,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionGaussian_probabilityDensity", _wrap_DistributionGaussian_probabilityDensity, METH_VARARGS, "\n"
 		"DistributionGaussian_probabilityDensity(DistributionGaussian self, double x) -> double\n"
-		"double DistributionGaussian::probabilityDensity(double x) const final\n"
+		"double DistributionGaussian::probabilityDensity(double x) const override\n"
 		"\n"
 		"Returns the distribution-specific probability density for value x. \n"
 		"\n"
 		""},
 	 { "DistributionGaussian_getMean", _wrap_DistributionGaussian_getMean, METH_O, "\n"
 		"DistributionGaussian_getMean(DistributionGaussian self) -> double\n"
-		"double DistributionGaussian::getMean() const final\n"
+		"double DistributionGaussian::getMean() const override\n"
 		"\n"
 		"Returns the distribution-specific mean. \n"
 		"\n"
@@ -51624,21 +51624,21 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionGaussian_equidistantPoints", _wrap_DistributionGaussian_equidistantPoints, METH_VARARGS, "\n"
 		"DistributionGaussian_equidistantPoints(DistributionGaussian self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t\n"
-		"std::vector< double > DistributionGaussian::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const\n"
+		"std::vector< double > DistributionGaussian::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override\n"
 		"\n"
 		"generate list of sample values \n"
 		"\n"
 		""},
 	 { "DistributionGaussian_isDelta", _wrap_DistributionGaussian_isDelta, METH_O, "\n"
 		"DistributionGaussian_isDelta(DistributionGaussian self) -> bool\n"
-		"bool DistributionGaussian::isDelta() const final\n"
+		"bool DistributionGaussian::isDelta() const override\n"
 		"\n"
 		"Returns true if the distribution is in the limit case of a Dirac delta distribution. \n"
 		"\n"
 		""},
 	 { "DistributionGaussian_accept", _wrap_DistributionGaussian_accept, METH_VARARGS, "\n"
 		"DistributionGaussian_accept(DistributionGaussian self, INodeVisitor visitor)\n"
-		"void DistributionGaussian::accept(INodeVisitor *visitor) const final\n"
+		"void DistributionGaussian::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -51659,14 +51659,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionLogNormal_probabilityDensity", _wrap_DistributionLogNormal_probabilityDensity, METH_VARARGS, "\n"
 		"DistributionLogNormal_probabilityDensity(DistributionLogNormal self, double x) -> double\n"
-		"double DistributionLogNormal::probabilityDensity(double x) const final\n"
+		"double DistributionLogNormal::probabilityDensity(double x) const override\n"
 		"\n"
 		"Returns the distribution-specific probability density for value x. \n"
 		"\n"
 		""},
 	 { "DistributionLogNormal_getMean", _wrap_DistributionLogNormal_getMean, METH_O, "\n"
 		"DistributionLogNormal_getMean(DistributionLogNormal self) -> double\n"
-		"double DistributionLogNormal::getMean() const final\n"
+		"double DistributionLogNormal::getMean() const override\n"
 		"\n"
 		"Returns the distribution-specific mean. \n"
 		"\n"
@@ -51683,28 +51683,28 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionLogNormal_equidistantPoints", _wrap_DistributionLogNormal_equidistantPoints, METH_VARARGS, "\n"
 		"DistributionLogNormal_equidistantPoints(DistributionLogNormal self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t\n"
-		"std::vector< double > DistributionLogNormal::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const\n"
+		"std::vector< double > DistributionLogNormal::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override\n"
 		"\n"
 		"generate list of sample values \n"
 		"\n"
 		""},
 	 { "DistributionLogNormal_isDelta", _wrap_DistributionLogNormal_isDelta, METH_O, "\n"
 		"DistributionLogNormal_isDelta(DistributionLogNormal self) -> bool\n"
-		"bool DistributionLogNormal::isDelta() const final\n"
+		"bool DistributionLogNormal::isDelta() const override\n"
 		"\n"
 		"Returns true if the distribution is in the limit case of a Dirac delta distribution. \n"
 		"\n"
 		""},
 	 { "DistributionLogNormal_accept", _wrap_DistributionLogNormal_accept, METH_VARARGS, "\n"
 		"DistributionLogNormal_accept(DistributionLogNormal self, INodeVisitor visitor)\n"
-		"void DistributionLogNormal::accept(INodeVisitor *visitor) const final\n"
+		"void DistributionLogNormal::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
 		""},
 	 { "DistributionLogNormal_setUnits", _wrap_DistributionLogNormal_setUnits, METH_VARARGS, "\n"
 		"DistributionLogNormal_setUnits(DistributionLogNormal self, std::string const & units)\n"
-		"void DistributionLogNormal::setUnits(const std::string &units)\n"
+		"void DistributionLogNormal::setUnits(const std::string &units) override\n"
 		"\n"
 		"Sets distribution units. \n"
 		"\n"
@@ -51721,19 +51721,19 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionCosine_clone", _wrap_DistributionCosine_clone, METH_O, "\n"
 		"DistributionCosine_clone(DistributionCosine self) -> DistributionCosine\n"
-		"DistributionCosine* DistributionCosine::clone() const final\n"
+		"DistributionCosine* DistributionCosine::clone() const override\n"
 		"\n"
 		""},
 	 { "DistributionCosine_probabilityDensity", _wrap_DistributionCosine_probabilityDensity, METH_VARARGS, "\n"
 		"DistributionCosine_probabilityDensity(DistributionCosine self, double x) -> double\n"
-		"double DistributionCosine::probabilityDensity(double x) const final\n"
+		"double DistributionCosine::probabilityDensity(double x) const override\n"
 		"\n"
 		"Returns the distribution-specific probability density for value x. \n"
 		"\n"
 		""},
 	 { "DistributionCosine_getMean", _wrap_DistributionCosine_getMean, METH_O, "\n"
 		"DistributionCosine_getMean(DistributionCosine self) -> double\n"
-		"double DistributionCosine::getMean() const final\n"
+		"double DistributionCosine::getMean() const override\n"
 		"\n"
 		"Returns the distribution-specific mean. \n"
 		"\n"
@@ -51745,21 +51745,21 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionCosine_equidistantPoints", _wrap_DistributionCosine_equidistantPoints, METH_VARARGS, "\n"
 		"DistributionCosine_equidistantPoints(DistributionCosine self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t\n"
-		"std::vector< double > DistributionCosine::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const\n"
+		"std::vector< double > DistributionCosine::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override\n"
 		"\n"
 		"generate list of sample values \n"
 		"\n"
 		""},
 	 { "DistributionCosine_isDelta", _wrap_DistributionCosine_isDelta, METH_O, "\n"
 		"DistributionCosine_isDelta(DistributionCosine self) -> bool\n"
-		"bool DistributionCosine::isDelta() const final\n"
+		"bool DistributionCosine::isDelta() const override\n"
 		"\n"
 		"Returns true if the distribution is in the limit case of a Dirac delta distribution. \n"
 		"\n"
 		""},
 	 { "DistributionCosine_accept", _wrap_DistributionCosine_accept, METH_VARARGS, "\n"
 		"DistributionCosine_accept(DistributionCosine self, INodeVisitor visitor)\n"
-		"void DistributionCosine::accept(INodeVisitor *visitor) const final\n"
+		"void DistributionCosine::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -51781,14 +51781,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionTrapezoid_probabilityDensity", _wrap_DistributionTrapezoid_probabilityDensity, METH_VARARGS, "\n"
 		"DistributionTrapezoid_probabilityDensity(DistributionTrapezoid self, double x) -> double\n"
-		"double DistributionTrapezoid::probabilityDensity(double x) const final\n"
+		"double DistributionTrapezoid::probabilityDensity(double x) const override\n"
 		"\n"
 		"Returns the distribution-specific probability density for value x. \n"
 		"\n"
 		""},
 	 { "DistributionTrapezoid_getMean", _wrap_DistributionTrapezoid_getMean, METH_O, "\n"
 		"DistributionTrapezoid_getMean(DistributionTrapezoid self) -> double\n"
-		"double DistributionTrapezoid::getMean() const final\n"
+		"double DistributionTrapezoid::getMean() const override\n"
 		"\n"
 		"Returns the distribution-specific mean. \n"
 		"\n"
@@ -51810,21 +51810,21 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionTrapezoid_equidistantPoints", _wrap_DistributionTrapezoid_equidistantPoints, METH_VARARGS, "\n"
 		"DistributionTrapezoid_equidistantPoints(DistributionTrapezoid self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t\n"
-		"std::vector< double > DistributionTrapezoid::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const\n"
+		"std::vector< double > DistributionTrapezoid::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override\n"
 		"\n"
 		"generate list of sample values \n"
 		"\n"
 		""},
 	 { "DistributionTrapezoid_isDelta", _wrap_DistributionTrapezoid_isDelta, METH_O, "\n"
 		"DistributionTrapezoid_isDelta(DistributionTrapezoid self) -> bool\n"
-		"bool DistributionTrapezoid::isDelta() const final\n"
+		"bool DistributionTrapezoid::isDelta() const override\n"
 		"\n"
 		"Returns true if the distribution is in the limit case of a Dirac delta distribution. \n"
 		"\n"
 		""},
 	 { "DistributionTrapezoid_accept", _wrap_DistributionTrapezoid_accept, METH_VARARGS, "\n"
 		"DistributionTrapezoid_accept(DistributionTrapezoid self, INodeVisitor visitor)\n"
-		"void DistributionTrapezoid::accept(INodeVisitor *visitor) const final\n"
+		"void DistributionTrapezoid::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
diff --git a/auto/Wrap/libBornAgainSample.py b/auto/Wrap/libBornAgainSample.py
index c30bb214042..fc008f750c8 100644
--- a/auto/Wrap/libBornAgainSample.py
+++ b/auto/Wrap/libBornAgainSample.py
@@ -4476,7 +4476,7 @@ class Crystal(ISampleNode):
     def clone(self):
         r"""
         clone(Crystal self) -> Crystal
-        Crystal * Crystal::clone() const final
+        Crystal * Crystal::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -4486,7 +4486,7 @@ class Crystal(ISampleNode):
     def accept(self, visitor):
         r"""
         accept(Crystal self, INodeVisitor * visitor)
-        void Crystal::accept(INodeVisitor *visitor) const final
+        void Crystal::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.Crystal_accept(self, visitor)
@@ -4518,7 +4518,7 @@ class Crystal(ISampleNode):
     def getChildren(self):
         r"""
         getChildren(Crystal self) -> swig_dummy_type_const_inode_vector
-        std::vector< const INode * > Crystal::getChildren() const final
+        std::vector< const INode * > Crystal::getChildren() const override
 
         """
         return _libBornAgainSample.Crystal_getChildren(self)
@@ -4609,7 +4609,7 @@ class IParticle(IAbstractParticle):
     def translate(self, translation):
         r"""
         translate(IParticle self, kvector_t translation)
-        void IParticle::translate(kvector_t translation) final
+        void IParticle::translate(kvector_t translation) override
 
         Translates the particle. 
 
@@ -4639,7 +4639,7 @@ class IParticle(IAbstractParticle):
     def rotate(self, rotation):
         r"""
         rotate(IParticle self, IRotation rotation)
-        void IParticle::rotate(const IRotation &rotation) final
+        void IParticle::rotate(const IRotation &rotation) override
 
         Rotates the particle. 
 
@@ -4720,7 +4720,7 @@ class MesoCrystal(IParticle):
     def clone(self):
         r"""
         clone(MesoCrystal self) -> MesoCrystal
-        MesoCrystal * MesoCrystal::clone() const final
+        MesoCrystal * MesoCrystal::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -4730,7 +4730,7 @@ class MesoCrystal(IParticle):
     def accept(self, visitor):
         r"""
         accept(MesoCrystal self, INodeVisitor * visitor)
-        void MesoCrystal::accept(INodeVisitor *visitor) const final
+        void MesoCrystal::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.MesoCrystal_accept(self, visitor)
@@ -4738,7 +4738,7 @@ class MesoCrystal(IParticle):
     def createSlicedParticle(self, limits):
         r"""
         createSlicedParticle(MesoCrystal self, ZLimits limits) -> SlicedParticle
-        SlicedParticle MesoCrystal::createSlicedParticle(ZLimits limits) const final
+        SlicedParticle MesoCrystal::createSlicedParticle(ZLimits limits) const override
 
         Creates a sliced form factor for this particle. 
 
@@ -4748,7 +4748,7 @@ class MesoCrystal(IParticle):
     def getChildren(self):
         r"""
         getChildren(MesoCrystal self) -> swig_dummy_type_const_inode_vector
-        std::vector< const INode * > MesoCrystal::getChildren() const final
+        std::vector< const INode * > MesoCrystal::getChildren() const override
 
         """
         return _libBornAgainSample.MesoCrystal_getChildren(self)
@@ -4783,7 +4783,7 @@ class Particle(IParticle):
     def clone(self):
         r"""
         clone(Particle self) -> Particle
-        Particle * Particle::clone() const final
+        Particle * Particle::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -4793,7 +4793,7 @@ class Particle(IParticle):
     def accept(self, visitor):
         r"""
         accept(Particle self, INodeVisitor * visitor)
-        void Particle::accept(INodeVisitor *visitor) const final
+        void Particle::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.Particle_accept(self, visitor)
@@ -4801,7 +4801,7 @@ class Particle(IParticle):
     def createSlicedParticle(self, limits):
         r"""
         createSlicedParticle(Particle self, ZLimits limits) -> SlicedParticle
-        SlicedParticle Particle::createSlicedParticle(ZLimits limits) const final
+        SlicedParticle Particle::createSlicedParticle(ZLimits limits) const override
 
         Creates a sliced form factor for this particle. 
 
@@ -4819,7 +4819,7 @@ class Particle(IParticle):
     def material(self):
         r"""
         material(Particle self) -> Material
-        const Material* Particle::material() const final
+        const Material* Particle::material() const override
 
         Returns nullptr, unless overwritten to return a specific material. 
 
@@ -4829,7 +4829,7 @@ class Particle(IParticle):
     def getChildren(self):
         r"""
         getChildren(Particle self) -> swig_dummy_type_const_inode_vector
-        std::vector< const INode * > Particle::getChildren() const final
+        std::vector< const INode * > Particle::getChildren() const override
 
         """
         return _libBornAgainSample.Particle_getChildren(self)
@@ -4863,7 +4863,7 @@ class ParticleComposition(IParticle):
     def clone(self):
         r"""
         clone(ParticleComposition self) -> ParticleComposition
-        ParticleComposition * ParticleComposition::clone() const final
+        ParticleComposition * ParticleComposition::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -4873,7 +4873,7 @@ class ParticleComposition(IParticle):
     def accept(self, visitor):
         r"""
         accept(ParticleComposition self, INodeVisitor * visitor)
-        void ParticleComposition::accept(INodeVisitor *visitor) const final
+        void ParticleComposition::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.ParticleComposition_accept(self, visitor)
@@ -4881,7 +4881,7 @@ class ParticleComposition(IParticle):
     def createFormFactor(self):
         r"""
         createFormFactor(ParticleComposition self) -> IFormFactor
-        IFormFactor * ParticleComposition::createFormFactor() const final
+        IFormFactor * ParticleComposition::createFormFactor() const override
 
         Creates a form factor for this particle. 
 
@@ -4918,7 +4918,7 @@ class ParticleComposition(IParticle):
     def getChildren(self):
         r"""
         getChildren(ParticleComposition self) -> swig_dummy_type_const_inode_vector
-        std::vector< const INode * > ParticleComposition::getChildren() const final
+        std::vector< const INode * > ParticleComposition::getChildren() const override
 
         """
         return _libBornAgainSample.ParticleComposition_getChildren(self)
@@ -4926,7 +4926,7 @@ class ParticleComposition(IParticle):
     def decompose(self):
         r"""
         decompose(ParticleComposition self) -> SafePointerVector< IParticle >
-        SafePointerVector< IParticle > ParticleComposition::decompose() const final
+        SafePointerVector< IParticle > ParticleComposition::decompose() const override
 
         Decompose in constituent  IParticle objects. 
 
@@ -4936,7 +4936,7 @@ class ParticleComposition(IParticle):
     def bottomTopZ(self):
         r"""
         bottomTopZ(ParticleComposition self) -> ParticleLimits
-        ParticleLimits ParticleComposition::bottomTopZ() const final
+        ParticleLimits ParticleComposition::bottomTopZ() const override
 
         Top and bottom z-coordinate. 
 
@@ -4971,7 +4971,7 @@ class ParticleCoreShell(IParticle):
     def clone(self):
         r"""
         clone(ParticleCoreShell self) -> ParticleCoreShell
-        ParticleCoreShell * ParticleCoreShell::clone() const final
+        ParticleCoreShell * ParticleCoreShell::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -4981,7 +4981,7 @@ class ParticleCoreShell(IParticle):
     def accept(self, visitor):
         r"""
         accept(ParticleCoreShell self, INodeVisitor * visitor)
-        void ParticleCoreShell::accept(INodeVisitor *visitor) const final
+        void ParticleCoreShell::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.ParticleCoreShell_accept(self, visitor)
@@ -4989,7 +4989,7 @@ class ParticleCoreShell(IParticle):
     def createSlicedParticle(self, limits):
         r"""
         createSlicedParticle(ParticleCoreShell self, ZLimits limits) -> SlicedParticle
-        SlicedParticle ParticleCoreShell::createSlicedParticle(ZLimits limits) const final
+        SlicedParticle ParticleCoreShell::createSlicedParticle(ZLimits limits) const override
 
         Creates a sliced form factor for this particle. 
 
@@ -5015,7 +5015,7 @@ class ParticleCoreShell(IParticle):
     def getChildren(self):
         r"""
         getChildren(ParticleCoreShell self) -> swig_dummy_type_const_inode_vector
-        std::vector< const INode * > ParticleCoreShell::getChildren() const final
+        std::vector< const INode * > ParticleCoreShell::getChildren() const override
 
         """
         return _libBornAgainSample.ParticleCoreShell_getChildren(self)
@@ -5047,7 +5047,7 @@ class ParticleDistribution(IAbstractParticle):
     def clone(self):
         r"""
         clone(ParticleDistribution self) -> ParticleDistribution
-        ParticleDistribution * ParticleDistribution::clone() const final
+        ParticleDistribution * ParticleDistribution::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -5057,7 +5057,7 @@ class ParticleDistribution(IAbstractParticle):
     def accept(self, visitor):
         r"""
         accept(ParticleDistribution self, INodeVisitor * visitor)
-        void ParticleDistribution::accept(INodeVisitor *visitor) const final
+        void ParticleDistribution::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.ParticleDistribution_accept(self, visitor)
@@ -5065,7 +5065,7 @@ class ParticleDistribution(IAbstractParticle):
     def translate(self, translation):
         r"""
         translate(ParticleDistribution self, kvector_t translation)
-        void ParticleDistribution::translate(kvector_t translation) final
+        void ParticleDistribution::translate(kvector_t translation) override
 
         Translates the particle with the given vector. 
 
@@ -5075,7 +5075,7 @@ class ParticleDistribution(IAbstractParticle):
     def rotate(self, rotation):
         r"""
         rotate(ParticleDistribution self, IRotation rotation)
-        void ParticleDistribution::rotate(const IRotation &rotation) final
+        void ParticleDistribution::rotate(const IRotation &rotation) override
 
         Applies the given rotation to the particle. 
 
@@ -5117,7 +5117,7 @@ class ParticleDistribution(IAbstractParticle):
     def getChildren(self):
         r"""
         getChildren(ParticleDistribution self) -> swig_dummy_type_const_inode_vector
-        std::vector< const INode * > ParticleDistribution::getChildren() const final
+        std::vector< const INode * > ParticleDistribution::getChildren() const override
 
         """
         return _libBornAgainSample.ParticleDistribution_getChildren(self)
@@ -5211,7 +5211,7 @@ class FTDecayFunction1DCauchy(IFTDecayFunction1D):
     def accept(self, visitor):
         r"""
         accept(FTDecayFunction1DCauchy self, INodeVisitor * visitor)
-        void FTDecayFunction1DCauchy::accept(INodeVisitor *visitor) const final
+        void FTDecayFunction1DCauchy::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDecayFunction1DCauchy_accept(self, visitor)
@@ -5219,7 +5219,7 @@ class FTDecayFunction1DCauchy(IFTDecayFunction1D):
     def evaluate(self, q):
         r"""
         evaluate(FTDecayFunction1DCauchy self, double q) -> double
-        double FTDecayFunction1DCauchy::evaluate(double q) const final
+        double FTDecayFunction1DCauchy::evaluate(double q) const override
 
         """
         return _libBornAgainSample.FTDecayFunction1DCauchy_evaluate(self, q)
@@ -5261,7 +5261,7 @@ class FTDecayFunction1DGauss(IFTDecayFunction1D):
     def accept(self, visitor):
         r"""
         accept(FTDecayFunction1DGauss self, INodeVisitor * visitor)
-        void FTDecayFunction1DGauss::accept(INodeVisitor *visitor) const final
+        void FTDecayFunction1DGauss::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDecayFunction1DGauss_accept(self, visitor)
@@ -5269,7 +5269,7 @@ class FTDecayFunction1DGauss(IFTDecayFunction1D):
     def evaluate(self, q):
         r"""
         evaluate(FTDecayFunction1DGauss self, double q) -> double
-        double FTDecayFunction1DGauss::evaluate(double q) const final
+        double FTDecayFunction1DGauss::evaluate(double q) const override
 
         """
         return _libBornAgainSample.FTDecayFunction1DGauss_evaluate(self, q)
@@ -5311,7 +5311,7 @@ class FTDecayFunction1DTriangle(IFTDecayFunction1D):
     def accept(self, visitor):
         r"""
         accept(FTDecayFunction1DTriangle self, INodeVisitor * visitor)
-        void FTDecayFunction1DTriangle::accept(INodeVisitor *visitor) const final
+        void FTDecayFunction1DTriangle::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDecayFunction1DTriangle_accept(self, visitor)
@@ -5319,7 +5319,7 @@ class FTDecayFunction1DTriangle(IFTDecayFunction1D):
     def evaluate(self, q):
         r"""
         evaluate(FTDecayFunction1DTriangle self, double q) -> double
-        double FTDecayFunction1DTriangle::evaluate(double q) const final
+        double FTDecayFunction1DTriangle::evaluate(double q) const override
 
         """
         return _libBornAgainSample.FTDecayFunction1DTriangle_evaluate(self, q)
@@ -5361,7 +5361,7 @@ class FTDecayFunction1DVoigt(IFTDecayFunction1D):
     def accept(self, visitor):
         r"""
         accept(FTDecayFunction1DVoigt self, INodeVisitor * visitor)
-        void FTDecayFunction1DVoigt::accept(INodeVisitor *visitor) const final
+        void FTDecayFunction1DVoigt::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDecayFunction1DVoigt_accept(self, visitor)
@@ -5369,7 +5369,7 @@ class FTDecayFunction1DVoigt(IFTDecayFunction1D):
     def evaluate(self, q):
         r"""
         evaluate(FTDecayFunction1DVoigt self, double q) -> double
-        double FTDecayFunction1DVoigt::evaluate(double q) const final
+        double FTDecayFunction1DVoigt::evaluate(double q) const override
 
         """
         return _libBornAgainSample.FTDecayFunction1DVoigt_evaluate(self, q)
@@ -5499,7 +5499,7 @@ class FTDecayFunction2DCauchy(IFTDecayFunction2D):
     def accept(self, visitor):
         r"""
         accept(FTDecayFunction2DCauchy self, INodeVisitor * visitor)
-        void FTDecayFunction2DCauchy::accept(INodeVisitor *visitor) const final
+        void FTDecayFunction2DCauchy::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDecayFunction2DCauchy_accept(self, visitor)
@@ -5507,7 +5507,7 @@ class FTDecayFunction2DCauchy(IFTDecayFunction2D):
     def evaluate(self, qx, qy):
         r"""
         evaluate(FTDecayFunction2DCauchy self, double qx, double qy) -> double
-        double FTDecayFunction2DCauchy::evaluate(double qx, double qy) const final
+        double FTDecayFunction2DCauchy::evaluate(double qx, double qy) const override
 
         evaluate Fourier transformed decay function for q in X,Y coordinates 
 
@@ -5551,7 +5551,7 @@ class FTDecayFunction2DGauss(IFTDecayFunction2D):
     def accept(self, visitor):
         r"""
         accept(FTDecayFunction2DGauss self, INodeVisitor * visitor)
-        void FTDecayFunction2DGauss::accept(INodeVisitor *visitor) const final
+        void FTDecayFunction2DGauss::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDecayFunction2DGauss_accept(self, visitor)
@@ -5559,7 +5559,7 @@ class FTDecayFunction2DGauss(IFTDecayFunction2D):
     def evaluate(self, qx, qy):
         r"""
         evaluate(FTDecayFunction2DGauss self, double qx, double qy) -> double
-        double FTDecayFunction2DGauss::evaluate(double qx, double qy) const final
+        double FTDecayFunction2DGauss::evaluate(double qx, double qy) const override
 
         evaluate Fourier transformed decay function for q in X,Y coordinates 
 
@@ -5603,7 +5603,7 @@ class FTDecayFunction2DVoigt(IFTDecayFunction2D):
     def accept(self, visitor):
         r"""
         accept(FTDecayFunction2DVoigt self, INodeVisitor * visitor)
-        void FTDecayFunction2DVoigt::accept(INodeVisitor *visitor) const final
+        void FTDecayFunction2DVoigt::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDecayFunction2DVoigt_accept(self, visitor)
@@ -5611,7 +5611,7 @@ class FTDecayFunction2DVoigt(IFTDecayFunction2D):
     def evaluate(self, qx, qy):
         r"""
         evaluate(FTDecayFunction2DVoigt self, double qx, double qy) -> double
-        double FTDecayFunction2DVoigt::evaluate(double qx, double qy) const final
+        double FTDecayFunction2DVoigt::evaluate(double qx, double qy) const override
 
         evaluate Fourier transformed decay function for q in X,Y coordinates 
 
@@ -5711,7 +5711,7 @@ class FTDistribution1DCauchy(IFTDistribution1D):
     def clone(self):
         r"""
         clone(FTDistribution1DCauchy self) -> FTDistribution1DCauchy
-        FTDistribution1DCauchy * FTDistribution1DCauchy::clone() const final
+        FTDistribution1DCauchy * FTDistribution1DCauchy::clone() const override
 
         """
         return _libBornAgainSample.FTDistribution1DCauchy_clone(self)
@@ -5719,7 +5719,7 @@ class FTDistribution1DCauchy(IFTDistribution1D):
     def accept(self, visitor):
         r"""
         accept(FTDistribution1DCauchy self, INodeVisitor * visitor)
-        void FTDistribution1DCauchy::accept(INodeVisitor *visitor) const final
+        void FTDistribution1DCauchy::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDistribution1DCauchy_accept(self, visitor)
@@ -5727,7 +5727,7 @@ class FTDistribution1DCauchy(IFTDistribution1D):
     def evaluate(self, q):
         r"""
         evaluate(FTDistribution1DCauchy self, double q) -> double
-        double FTDistribution1DCauchy::evaluate(double q) const final
+        double FTDistribution1DCauchy::evaluate(double q) const override
 
         Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 
@@ -5737,7 +5737,7 @@ class FTDistribution1DCauchy(IFTDistribution1D):
     def qSecondDerivative(self):
         r"""
         qSecondDerivative(FTDistribution1DCauchy self) -> double
-        double FTDistribution1DCauchy::qSecondDerivative() const final
+        double FTDistribution1DCauchy::qSecondDerivative() const override
 
         Returns the negative of the second order derivative in q space around q=0. 
 
@@ -5773,7 +5773,7 @@ class FTDistribution1DGauss(IFTDistribution1D):
     def clone(self):
         r"""
         clone(FTDistribution1DGauss self) -> FTDistribution1DGauss
-        FTDistribution1DGauss * FTDistribution1DGauss::clone() const final
+        FTDistribution1DGauss * FTDistribution1DGauss::clone() const override
 
         """
         return _libBornAgainSample.FTDistribution1DGauss_clone(self)
@@ -5781,7 +5781,7 @@ class FTDistribution1DGauss(IFTDistribution1D):
     def accept(self, visitor):
         r"""
         accept(FTDistribution1DGauss self, INodeVisitor * visitor)
-        void FTDistribution1DGauss::accept(INodeVisitor *visitor) const final
+        void FTDistribution1DGauss::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDistribution1DGauss_accept(self, visitor)
@@ -5789,7 +5789,7 @@ class FTDistribution1DGauss(IFTDistribution1D):
     def evaluate(self, q):
         r"""
         evaluate(FTDistribution1DGauss self, double q) -> double
-        double FTDistribution1DGauss::evaluate(double q) const final
+        double FTDistribution1DGauss::evaluate(double q) const override
 
         Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 
@@ -5799,7 +5799,7 @@ class FTDistribution1DGauss(IFTDistribution1D):
     def qSecondDerivative(self):
         r"""
         qSecondDerivative(FTDistribution1DGauss self) -> double
-        double FTDistribution1DGauss::qSecondDerivative() const final
+        double FTDistribution1DGauss::qSecondDerivative() const override
 
         Returns the negative of the second order derivative in q space around q=0. 
 
@@ -5835,7 +5835,7 @@ class FTDistribution1DGate(IFTDistribution1D):
     def clone(self):
         r"""
         clone(FTDistribution1DGate self) -> FTDistribution1DGate
-        FTDistribution1DGate * FTDistribution1DGate::clone() const final
+        FTDistribution1DGate * FTDistribution1DGate::clone() const override
 
         """
         return _libBornAgainSample.FTDistribution1DGate_clone(self)
@@ -5843,7 +5843,7 @@ class FTDistribution1DGate(IFTDistribution1D):
     def accept(self, visitor):
         r"""
         accept(FTDistribution1DGate self, INodeVisitor * visitor)
-        void FTDistribution1DGate::accept(INodeVisitor *visitor) const final
+        void FTDistribution1DGate::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDistribution1DGate_accept(self, visitor)
@@ -5851,7 +5851,7 @@ class FTDistribution1DGate(IFTDistribution1D):
     def evaluate(self, q):
         r"""
         evaluate(FTDistribution1DGate self, double q) -> double
-        double FTDistribution1DGate::evaluate(double q) const final
+        double FTDistribution1DGate::evaluate(double q) const override
 
         Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 
@@ -5861,7 +5861,7 @@ class FTDistribution1DGate(IFTDistribution1D):
     def qSecondDerivative(self):
         r"""
         qSecondDerivative(FTDistribution1DGate self) -> double
-        double FTDistribution1DGate::qSecondDerivative() const final
+        double FTDistribution1DGate::qSecondDerivative() const override
 
         Returns the negative of the second order derivative in q space around q=0. 
 
@@ -5897,7 +5897,7 @@ class FTDistribution1DTriangle(IFTDistribution1D):
     def clone(self):
         r"""
         clone(FTDistribution1DTriangle self) -> FTDistribution1DTriangle
-        FTDistribution1DTriangle * FTDistribution1DTriangle::clone() const final
+        FTDistribution1DTriangle * FTDistribution1DTriangle::clone() const override
 
         """
         return _libBornAgainSample.FTDistribution1DTriangle_clone(self)
@@ -5905,7 +5905,7 @@ class FTDistribution1DTriangle(IFTDistribution1D):
     def accept(self, visitor):
         r"""
         accept(FTDistribution1DTriangle self, INodeVisitor * visitor)
-        void FTDistribution1DTriangle::accept(INodeVisitor *visitor) const final
+        void FTDistribution1DTriangle::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDistribution1DTriangle_accept(self, visitor)
@@ -5913,7 +5913,7 @@ class FTDistribution1DTriangle(IFTDistribution1D):
     def evaluate(self, q):
         r"""
         evaluate(FTDistribution1DTriangle self, double q) -> double
-        double FTDistribution1DTriangle::evaluate(double q) const final
+        double FTDistribution1DTriangle::evaluate(double q) const override
 
         Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 
@@ -5923,7 +5923,7 @@ class FTDistribution1DTriangle(IFTDistribution1D):
     def qSecondDerivative(self):
         r"""
         qSecondDerivative(FTDistribution1DTriangle self) -> double
-        double FTDistribution1DTriangle::qSecondDerivative() const final
+        double FTDistribution1DTriangle::qSecondDerivative() const override
 
         Returns the negative of the second order derivative in q space around q=0. 
 
@@ -5959,7 +5959,7 @@ class FTDistribution1DCosine(IFTDistribution1D):
     def clone(self):
         r"""
         clone(FTDistribution1DCosine self) -> FTDistribution1DCosine
-        FTDistribution1DCosine * FTDistribution1DCosine::clone() const final
+        FTDistribution1DCosine * FTDistribution1DCosine::clone() const override
 
         """
         return _libBornAgainSample.FTDistribution1DCosine_clone(self)
@@ -5967,7 +5967,7 @@ class FTDistribution1DCosine(IFTDistribution1D):
     def accept(self, visitor):
         r"""
         accept(FTDistribution1DCosine self, INodeVisitor * visitor)
-        void FTDistribution1DCosine::accept(INodeVisitor *visitor) const final
+        void FTDistribution1DCosine::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDistribution1DCosine_accept(self, visitor)
@@ -5975,7 +5975,7 @@ class FTDistribution1DCosine(IFTDistribution1D):
     def evaluate(self, q):
         r"""
         evaluate(FTDistribution1DCosine self, double q) -> double
-        double FTDistribution1DCosine::evaluate(double q) const final
+        double FTDistribution1DCosine::evaluate(double q) const override
 
         Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 
@@ -5985,7 +5985,7 @@ class FTDistribution1DCosine(IFTDistribution1D):
     def qSecondDerivative(self):
         r"""
         qSecondDerivative(FTDistribution1DCosine self) -> double
-        double FTDistribution1DCosine::qSecondDerivative() const final
+        double FTDistribution1DCosine::qSecondDerivative() const override
 
         Returns the negative of the second order derivative in q space around q=0. 
 
@@ -6021,7 +6021,7 @@ class FTDistribution1DVoigt(IFTDistribution1D):
     def clone(self):
         r"""
         clone(FTDistribution1DVoigt self) -> FTDistribution1DVoigt
-        FTDistribution1DVoigt * FTDistribution1DVoigt::clone() const final
+        FTDistribution1DVoigt * FTDistribution1DVoigt::clone() const override
 
         """
         return _libBornAgainSample.FTDistribution1DVoigt_clone(self)
@@ -6029,7 +6029,7 @@ class FTDistribution1DVoigt(IFTDistribution1D):
     def accept(self, visitor):
         r"""
         accept(FTDistribution1DVoigt self, INodeVisitor * visitor)
-        void FTDistribution1DVoigt::accept(INodeVisitor *visitor) const final
+        void FTDistribution1DVoigt::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDistribution1DVoigt_accept(self, visitor)
@@ -6037,7 +6037,7 @@ class FTDistribution1DVoigt(IFTDistribution1D):
     def evaluate(self, q):
         r"""
         evaluate(FTDistribution1DVoigt self, double q) -> double
-        double FTDistribution1DVoigt::evaluate(double q) const final
+        double FTDistribution1DVoigt::evaluate(double q) const override
 
         Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 
@@ -6055,7 +6055,7 @@ class FTDistribution1DVoigt(IFTDistribution1D):
     def qSecondDerivative(self):
         r"""
         qSecondDerivative(FTDistribution1DVoigt self) -> double
-        double FTDistribution1DVoigt::qSecondDerivative() const final
+        double FTDistribution1DVoigt::qSecondDerivative() const override
 
         Returns the negative of the second order derivative in q space around q=0. 
 
@@ -6163,7 +6163,7 @@ class FTDistribution2DCauchy(IFTDistribution2D):
     def clone(self):
         r"""
         clone(FTDistribution2DCauchy self) -> FTDistribution2DCauchy
-        FTDistribution2DCauchy * FTDistribution2DCauchy::clone() const final
+        FTDistribution2DCauchy * FTDistribution2DCauchy::clone() const override
 
         """
         return _libBornAgainSample.FTDistribution2DCauchy_clone(self)
@@ -6171,7 +6171,7 @@ class FTDistribution2DCauchy(IFTDistribution2D):
     def accept(self, visitor):
         r"""
         accept(FTDistribution2DCauchy self, INodeVisitor * visitor)
-        void FTDistribution2DCauchy::accept(INodeVisitor *visitor) const final
+        void FTDistribution2DCauchy::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDistribution2DCauchy_accept(self, visitor)
@@ -6179,7 +6179,7 @@ class FTDistribution2DCauchy(IFTDistribution2D):
     def evaluate(self, qx, qy):
         r"""
         evaluate(FTDistribution2DCauchy self, double qx, double qy) -> double
-        double FTDistribution2DCauchy::evaluate(double qx, double qy) const final
+        double FTDistribution2DCauchy::evaluate(double qx, double qy) const override
 
         evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 
 
@@ -6215,7 +6215,7 @@ class FTDistribution2DGauss(IFTDistribution2D):
     def clone(self):
         r"""
         clone(FTDistribution2DGauss self) -> FTDistribution2DGauss
-        FTDistribution2DGauss * FTDistribution2DGauss::clone() const final
+        FTDistribution2DGauss * FTDistribution2DGauss::clone() const override
 
         """
         return _libBornAgainSample.FTDistribution2DGauss_clone(self)
@@ -6223,7 +6223,7 @@ class FTDistribution2DGauss(IFTDistribution2D):
     def accept(self, visitor):
         r"""
         accept(FTDistribution2DGauss self, INodeVisitor * visitor)
-        void FTDistribution2DGauss::accept(INodeVisitor *visitor) const final
+        void FTDistribution2DGauss::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDistribution2DGauss_accept(self, visitor)
@@ -6231,7 +6231,7 @@ class FTDistribution2DGauss(IFTDistribution2D):
     def evaluate(self, qx, qy):
         r"""
         evaluate(FTDistribution2DGauss self, double qx, double qy) -> double
-        double FTDistribution2DGauss::evaluate(double qx, double qy) const final
+        double FTDistribution2DGauss::evaluate(double qx, double qy) const override
 
         evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 
 
@@ -6267,7 +6267,7 @@ class FTDistribution2DGate(IFTDistribution2D):
     def clone(self):
         r"""
         clone(FTDistribution2DGate self) -> FTDistribution2DGate
-        FTDistribution2DGate * FTDistribution2DGate::clone() const final
+        FTDistribution2DGate * FTDistribution2DGate::clone() const override
 
         """
         return _libBornAgainSample.FTDistribution2DGate_clone(self)
@@ -6275,7 +6275,7 @@ class FTDistribution2DGate(IFTDistribution2D):
     def accept(self, visitor):
         r"""
         accept(FTDistribution2DGate self, INodeVisitor * visitor)
-        void FTDistribution2DGate::accept(INodeVisitor *visitor) const final
+        void FTDistribution2DGate::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDistribution2DGate_accept(self, visitor)
@@ -6283,7 +6283,7 @@ class FTDistribution2DGate(IFTDistribution2D):
     def evaluate(self, qx, qy):
         r"""
         evaluate(FTDistribution2DGate self, double qx, double qy) -> double
-        double FTDistribution2DGate::evaluate(double qx, double qy) const final
+        double FTDistribution2DGate::evaluate(double qx, double qy) const override
 
         evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 
 
@@ -6319,7 +6319,7 @@ class FTDistribution2DCone(IFTDistribution2D):
     def clone(self):
         r"""
         clone(FTDistribution2DCone self) -> FTDistribution2DCone
-        FTDistribution2DCone * FTDistribution2DCone::clone() const final
+        FTDistribution2DCone * FTDistribution2DCone::clone() const override
 
         """
         return _libBornAgainSample.FTDistribution2DCone_clone(self)
@@ -6327,7 +6327,7 @@ class FTDistribution2DCone(IFTDistribution2D):
     def accept(self, visitor):
         r"""
         accept(FTDistribution2DCone self, INodeVisitor * visitor)
-        void FTDistribution2DCone::accept(INodeVisitor *visitor) const final
+        void FTDistribution2DCone::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDistribution2DCone_accept(self, visitor)
@@ -6335,7 +6335,7 @@ class FTDistribution2DCone(IFTDistribution2D):
     def evaluate(self, qx, qy):
         r"""
         evaluate(FTDistribution2DCone self, double qx, double qy) -> double
-        double FTDistribution2DCone::evaluate(double qx, double qy) const final
+        double FTDistribution2DCone::evaluate(double qx, double qy) const override
 
         evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 
 
@@ -6371,7 +6371,7 @@ class FTDistribution2DVoigt(IFTDistribution2D):
     def clone(self):
         r"""
         clone(FTDistribution2DVoigt self) -> FTDistribution2DVoigt
-        FTDistribution2DVoigt * FTDistribution2DVoigt::clone() const final
+        FTDistribution2DVoigt * FTDistribution2DVoigt::clone() const override
 
         """
         return _libBornAgainSample.FTDistribution2DVoigt_clone(self)
@@ -6379,7 +6379,7 @@ class FTDistribution2DVoigt(IFTDistribution2D):
     def accept(self, visitor):
         r"""
         accept(FTDistribution2DVoigt self, INodeVisitor * visitor)
-        void FTDistribution2DVoigt::accept(INodeVisitor *visitor) const final
+        void FTDistribution2DVoigt::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDistribution2DVoigt_accept(self, visitor)
@@ -6387,7 +6387,7 @@ class FTDistribution2DVoigt(IFTDistribution2D):
     def evaluate(self, qx, qy):
         r"""
         evaluate(FTDistribution2DVoigt self, double qx, double qy) -> double
-        double FTDistribution2DVoigt::evaluate(double qx, double qy) const final
+        double FTDistribution2DVoigt::evaluate(double qx, double qy) const override
 
         evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 
 
@@ -7815,7 +7815,7 @@ class InterferenceFunctionNone(IInterferenceFunction):
     def clone(self):
         r"""
         clone(InterferenceFunctionNone self) -> InterferenceFunctionNone
-        InterferenceFunctionNone * InterferenceFunctionNone::clone() const final
+        InterferenceFunctionNone * InterferenceFunctionNone::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -7825,7 +7825,7 @@ class InterferenceFunctionNone(IInterferenceFunction):
     def accept(self, visitor):
         r"""
         accept(InterferenceFunctionNone self, INodeVisitor * visitor)
-        void InterferenceFunctionNone::accept(INodeVisitor *visitor) const final
+        void InterferenceFunctionNone::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.InterferenceFunctionNone_accept(self, visitor)
@@ -7869,7 +7869,7 @@ class InterferenceFunctionRadialParaCrystal(IInterferenceFunction):
     def clone(self):
         r"""
         clone(InterferenceFunctionRadialParaCrystal self) -> InterferenceFunctionRadialParaCrystal
-        InterferenceFunctionRadialParaCrystal * InterferenceFunctionRadialParaCrystal::clone() const final
+        InterferenceFunctionRadialParaCrystal * InterferenceFunctionRadialParaCrystal::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -7879,7 +7879,7 @@ class InterferenceFunctionRadialParaCrystal(IInterferenceFunction):
     def accept(self, visitor):
         r"""
         accept(InterferenceFunctionRadialParaCrystal self, INodeVisitor * visitor)
-        void InterferenceFunctionRadialParaCrystal::accept(INodeVisitor *visitor) const final
+        void InterferenceFunctionRadialParaCrystal::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.InterferenceFunctionRadialParaCrystal_accept(self, visitor)
@@ -7969,7 +7969,7 @@ class InterferenceFunctionRadialParaCrystal(IInterferenceFunction):
     def getChildren(self):
         r"""
         getChildren(InterferenceFunctionRadialParaCrystal self) -> swig_dummy_type_const_inode_vector
-        std::vector< const INode * > InterferenceFunctionRadialParaCrystal::getChildren() const final
+        std::vector< const INode * > InterferenceFunctionRadialParaCrystal::getChildren() const override
 
         """
         return _libBornAgainSample.InterferenceFunctionRadialParaCrystal_getChildren(self)
@@ -8010,7 +8010,7 @@ class InterferenceFunctionTwin(IInterferenceFunction):
     def clone(self):
         r"""
         clone(InterferenceFunctionTwin self) -> InterferenceFunctionTwin
-        InterferenceFunctionTwin * InterferenceFunctionTwin::clone() const final
+        InterferenceFunctionTwin * InterferenceFunctionTwin::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -8020,7 +8020,7 @@ class InterferenceFunctionTwin(IInterferenceFunction):
     def accept(self, visitor):
         r"""
         accept(InterferenceFunctionTwin self, INodeVisitor * visitor)
-        void InterferenceFunctionTwin::accept(INodeVisitor *visitor) const final
+        void InterferenceFunctionTwin::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.InterferenceFunctionTwin_accept(self, visitor)
@@ -8404,7 +8404,7 @@ class Layer(ISampleNode):
     def clone(self):
         r"""
         clone(Layer self) -> Layer
-        Layer * Layer::clone() const final
+        Layer * Layer::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -8414,7 +8414,7 @@ class Layer(ISampleNode):
     def accept(self, visitor):
         r"""
         accept(Layer self, INodeVisitor * visitor)
-        void Layer::accept(INodeVisitor *visitor) const final
+        void Layer::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.Layer_accept(self, visitor)
@@ -8430,7 +8430,7 @@ class Layer(ISampleNode):
     def material(self):
         r"""
         material(Layer self) -> Material
-        const Material* Layer::material() const final
+        const Material* Layer::material() const override
 
         Returns nullptr, unless overwritten to return a specific material. 
 
@@ -8464,7 +8464,7 @@ class Layer(ISampleNode):
     def getChildren(self):
         r"""
         getChildren(Layer self) -> swig_dummy_type_const_inode_vector
-        std::vector< const INode * > Layer::getChildren() const final
+        std::vector< const INode * > Layer::getChildren() const override
 
         """
         return _libBornAgainSample.Layer_getChildren(self)
@@ -8523,7 +8523,7 @@ class MultiLayer(ISampleNode):
     def clone(self):
         r"""
         clone(MultiLayer self) -> MultiLayer
-        MultiLayer * MultiLayer::clone() const final
+        MultiLayer * MultiLayer::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -8533,7 +8533,7 @@ class MultiLayer(ISampleNode):
     def accept(self, visitor):
         r"""
         accept(MultiLayer self, INodeVisitor * visitor)
-        void MultiLayer::accept(INodeVisitor *visitor) const final
+        void MultiLayer::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.MultiLayer_accept(self, visitor)
@@ -8645,7 +8645,7 @@ class MultiLayer(ISampleNode):
     def getChildren(self):
         r"""
         getChildren(MultiLayer self) -> swig_dummy_type_const_inode_vector
-        std::vector< const INode * > MultiLayer::getChildren() const final
+        std::vector< const INode * > MultiLayer::getChildren() const override
 
         """
         return _libBornAgainSample.MultiLayer_getChildren(self)
@@ -8692,7 +8692,7 @@ class IFormFactorPolyhedron(IBornFF):
     def bottomZ(self, rotation):
         r"""
         bottomZ(IFormFactorPolyhedron self, IRotation rotation) -> double
-        double IFormFactorPolyhedron::bottomZ(const IRotation &rotation) const final
+        double IFormFactorPolyhedron::bottomZ(const IRotation &rotation) const override
 
         Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 
@@ -8702,7 +8702,7 @@ class IFormFactorPolyhedron(IBornFF):
     def topZ(self, rotation):
         r"""
         topZ(IFormFactorPolyhedron self, IRotation rotation) -> double
-        double IFormFactorPolyhedron::topZ(const IRotation &rotation) const final
+        double IFormFactorPolyhedron::topZ(const IRotation &rotation) const override
 
         Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 
@@ -8712,7 +8712,7 @@ class IFormFactorPolyhedron(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(IFormFactorPolyhedron self, cvector_t q) -> complex_t
-        complex_t IFormFactorPolyhedron::evaluate_for_q(cvector_t q) const final
+        complex_t IFormFactorPolyhedron::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -8730,7 +8730,7 @@ class IFormFactorPolyhedron(IBornFF):
     def volume(self):
         r"""
         volume(IFormFactorPolyhedron self) -> double
-        double IFormFactorPolyhedron::volume() const final
+        double IFormFactorPolyhedron::volume() const override
 
         Returns the total volume of the particle of this form factor's shape. 
 
@@ -8740,7 +8740,7 @@ class IFormFactorPolyhedron(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(IFormFactorPolyhedron self) -> double
-        double IFormFactorPolyhedron::radialExtension() const final
+        double IFormFactorPolyhedron::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -8780,7 +8780,7 @@ class IFormFactorPrism(IBornFF):
     def bottomZ(self, rotation):
         r"""
         bottomZ(IFormFactorPrism self, IRotation rotation) -> double
-        double IFormFactorPrism::bottomZ(const IRotation &rotation) const final
+        double IFormFactorPrism::bottomZ(const IRotation &rotation) const override
 
         Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 
@@ -8790,7 +8790,7 @@ class IFormFactorPrism(IBornFF):
     def topZ(self, rotation):
         r"""
         topZ(IFormFactorPrism self, IRotation rotation) -> double
-        double IFormFactorPrism::topZ(const IRotation &rotation) const final
+        double IFormFactorPrism::topZ(const IRotation &rotation) const override
 
         Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 
@@ -8881,7 +8881,7 @@ class IProfileRipple(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(IProfileRipple self) -> double
-        double IProfileRipple::radialExtension() const final
+        double IProfileRipple::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -8891,7 +8891,7 @@ class IProfileRipple(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(IProfileRipple self, cvector_t q) -> complex_t
-        complex_t IProfileRipple::evaluate_for_q(cvector_t q) const final
+        complex_t IProfileRipple::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -9005,7 +9005,7 @@ class FormFactorAnisoPyramid(IFormFactorPolyhedron):
     def accept(self, visitor):
         r"""
         accept(FormFactorAnisoPyramid self, INodeVisitor * visitor)
-        void FormFactorAnisoPyramid::accept(INodeVisitor *visitor) const final
+        void FormFactorAnisoPyramid::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorAnisoPyramid_accept(self, visitor)
@@ -9071,7 +9071,7 @@ class FormFactorBox(IFormFactorPrism):
     def clone(self):
         r"""
         clone(FormFactorBox self) -> FormFactorBox
-        FormFactorBox* FormFactorBox::clone() const final
+        FormFactorBox* FormFactorBox::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -9081,7 +9081,7 @@ class FormFactorBox(IFormFactorPrism):
     def accept(self, visitor):
         r"""
         accept(FormFactorBox self, INodeVisitor * visitor)
-        void FormFactorBox::accept(INodeVisitor *visitor) const final
+        void FormFactorBox::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorBox_accept(self, visitor)
@@ -9105,7 +9105,7 @@ class FormFactorBox(IFormFactorPrism):
     def volume(self):
         r"""
         volume(FormFactorBox self) -> double
-        double FormFactorBox::volume() const final
+        double FormFactorBox::volume() const override
 
         Returns the total volume of the particle of this form factor's shape. 
 
@@ -9115,7 +9115,7 @@ class FormFactorBox(IFormFactorPrism):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorBox self) -> double
-        double FormFactorBox::radialExtension() const final
+        double FormFactorBox::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -9125,7 +9125,7 @@ class FormFactorBox(IFormFactorPrism):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorBox self, cvector_t q) -> complex_t
-        complex_t FormFactorBox::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorBox::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -9171,7 +9171,7 @@ class FormFactorCantellatedCube(IFormFactorPolyhedron):
     def accept(self, visitor):
         r"""
         accept(FormFactorCantellatedCube self, INodeVisitor * visitor)
-        void FormFactorCantellatedCube::accept(INodeVisitor *visitor) const final
+        void FormFactorCantellatedCube::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorCantellatedCube_accept(self, visitor)
@@ -9221,7 +9221,7 @@ class FormFactorCone(IBornFF):
     def clone(self):
         r"""
         clone(FormFactorCone self) -> FormFactorCone
-        FormFactorCone* FormFactorCone::clone() const final
+        FormFactorCone* FormFactorCone::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -9231,7 +9231,7 @@ class FormFactorCone(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorCone self, INodeVisitor * visitor)
-        void FormFactorCone::accept(INodeVisitor *visitor) const final
+        void FormFactorCone::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorCone_accept(self, visitor)
@@ -9263,7 +9263,7 @@ class FormFactorCone(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorCone self) -> double
-        double FormFactorCone::radialExtension() const final
+        double FormFactorCone::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -9273,7 +9273,7 @@ class FormFactorCone(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorCone self, cvector_t q) -> complex_t
-        complex_t FormFactorCone::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorCone::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -9319,7 +9319,7 @@ class FormFactorCone6(IFormFactorPolyhedron):
     def accept(self, visitor):
         r"""
         accept(FormFactorCone6 self, INodeVisitor * visitor)
-        void FormFactorCone6::accept(INodeVisitor *visitor) const final
+        void FormFactorCone6::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorCone6_accept(self, visitor)
@@ -9377,7 +9377,7 @@ class FormFactorCosineRippleBox(ICosineRipple):
     def clone(self):
         r"""
         clone(FormFactorCosineRippleBox self) -> FormFactorCosineRippleBox
-        FormFactorCosineRippleBox * FormFactorCosineRippleBox::clone() const final
+        FormFactorCosineRippleBox * FormFactorCosineRippleBox::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -9387,7 +9387,7 @@ class FormFactorCosineRippleBox(ICosineRipple):
     def accept(self, visitor):
         r"""
         accept(FormFactorCosineRippleBox self, INodeVisitor * visitor)
-        void FormFactorCosineRippleBox::accept(INodeVisitor *visitor) const final
+        void FormFactorCosineRippleBox::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorCosineRippleBox_accept(self, visitor)
@@ -9421,7 +9421,7 @@ class FormFactorCosineRippleGauss(ICosineRipple):
     def clone(self):
         r"""
         clone(FormFactorCosineRippleGauss self) -> FormFactorCosineRippleGauss
-        FormFactorCosineRippleGauss * FormFactorCosineRippleGauss::clone() const final
+        FormFactorCosineRippleGauss * FormFactorCosineRippleGauss::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -9431,7 +9431,7 @@ class FormFactorCosineRippleGauss(ICosineRipple):
     def accept(self, visitor):
         r"""
         accept(FormFactorCosineRippleGauss self, INodeVisitor * visitor)
-        void FormFactorCosineRippleGauss::accept(INodeVisitor *visitor) const final
+        void FormFactorCosineRippleGauss::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorCosineRippleGauss_accept(self, visitor)
@@ -9465,7 +9465,7 @@ class FormFactorCosineRippleLorentz(ICosineRipple):
     def clone(self):
         r"""
         clone(FormFactorCosineRippleLorentz self) -> FormFactorCosineRippleLorentz
-        FormFactorCosineRippleLorentz * FormFactorCosineRippleLorentz::clone() const final
+        FormFactorCosineRippleLorentz * FormFactorCosineRippleLorentz::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -9475,7 +9475,7 @@ class FormFactorCosineRippleLorentz(ICosineRipple):
     def accept(self, visitor):
         r"""
         accept(FormFactorCosineRippleLorentz self, INodeVisitor * visitor)
-        void FormFactorCosineRippleLorentz::accept(INodeVisitor *visitor) const final
+        void FormFactorCosineRippleLorentz::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorCosineRippleLorentz_accept(self, visitor)
@@ -9519,7 +9519,7 @@ class FormFactorCuboctahedron(IFormFactorPolyhedron):
     def accept(self, visitor):
         r"""
         accept(FormFactorCuboctahedron self, INodeVisitor * visitor)
-        void FormFactorCuboctahedron::accept(INodeVisitor *visitor) const final
+        void FormFactorCuboctahedron::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorCuboctahedron_accept(self, visitor)
@@ -9585,7 +9585,7 @@ class FormFactorCylinder(IBornFF):
     def clone(self):
         r"""
         clone(FormFactorCylinder self) -> FormFactorCylinder
-        FormFactorCylinder* FormFactorCylinder::clone() const final
+        FormFactorCylinder* FormFactorCylinder::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -9595,7 +9595,7 @@ class FormFactorCylinder(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorCylinder self, INodeVisitor * visitor)
-        void FormFactorCylinder::accept(INodeVisitor *visitor) const final
+        void FormFactorCylinder::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorCylinder_accept(self, visitor)
@@ -9619,7 +9619,7 @@ class FormFactorCylinder(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorCylinder self) -> double
-        double FormFactorCylinder::radialExtension() const final
+        double FormFactorCylinder::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -9629,7 +9629,7 @@ class FormFactorCylinder(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorCylinder self, cvector_t q) -> complex_t
-        complex_t FormFactorCylinder::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorCylinder::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -9665,7 +9665,7 @@ class FormFactorDodecahedron(IFormFactorPolyhedron):
     def clone(self):
         r"""
         clone(FormFactorDodecahedron self) -> FormFactorDodecahedron
-        FormFactorDodecahedron* FormFactorDodecahedron::clone() const final
+        FormFactorDodecahedron* FormFactorDodecahedron::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -9675,7 +9675,7 @@ class FormFactorDodecahedron(IFormFactorPolyhedron):
     def accept(self, visitor):
         r"""
         accept(FormFactorDodecahedron self, INodeVisitor * visitor)
-        void FormFactorDodecahedron::accept(INodeVisitor *visitor) const final
+        void FormFactorDodecahedron::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorDodecahedron_accept(self, visitor)
@@ -9717,7 +9717,7 @@ class FormFactorDot(IBornFF):
     def clone(self):
         r"""
         clone(FormFactorDot self) -> FormFactorDot
-        FormFactorDot* FormFactorDot::clone() const final
+        FormFactorDot* FormFactorDot::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -9727,7 +9727,7 @@ class FormFactorDot(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorDot self, INodeVisitor * visitor)
-        void FormFactorDot::accept(INodeVisitor *visitor) const final
+        void FormFactorDot::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorDot_accept(self, visitor)
@@ -9743,7 +9743,7 @@ class FormFactorDot(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorDot self) -> double
-        double FormFactorDot::radialExtension() const final
+        double FormFactorDot::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -9753,7 +9753,7 @@ class FormFactorDot(IBornFF):
     def bottomZ(self, arg2):
         r"""
         bottomZ(FormFactorDot self, IRotation arg2) -> double
-        double FormFactorDot::bottomZ(const IRotation &) const final
+        double FormFactorDot::bottomZ(const IRotation &) const override
 
         Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 
@@ -9763,7 +9763,7 @@ class FormFactorDot(IBornFF):
     def topZ(self, arg2):
         r"""
         topZ(FormFactorDot self, IRotation arg2) -> double
-        double FormFactorDot::topZ(const IRotation &) const final
+        double FormFactorDot::topZ(const IRotation &) const override
 
         Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 
@@ -9773,7 +9773,7 @@ class FormFactorDot(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorDot self, cvector_t q) -> complex_t
-        complex_t FormFactorDot::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorDot::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -9819,7 +9819,7 @@ class FormFactorEllipsoidalCylinder(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorEllipsoidalCylinder self, INodeVisitor * visitor)
-        void FormFactorEllipsoidalCylinder::accept(INodeVisitor *visitor) const final
+        void FormFactorEllipsoidalCylinder::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorEllipsoidalCylinder_accept(self, visitor)
@@ -9851,7 +9851,7 @@ class FormFactorEllipsoidalCylinder(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorEllipsoidalCylinder self) -> double
-        double FormFactorEllipsoidalCylinder::radialExtension() const final
+        double FormFactorEllipsoidalCylinder::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -9861,7 +9861,7 @@ class FormFactorEllipsoidalCylinder(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorEllipsoidalCylinder self, cvector_t q) -> complex_t
-        complex_t FormFactorEllipsoidalCylinder::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorEllipsoidalCylinder::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -9907,7 +9907,7 @@ class FormFactorFullSphere(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorFullSphere self, INodeVisitor * visitor)
-        void FormFactorFullSphere::accept(INodeVisitor *visitor) const final
+        void FormFactorFullSphere::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorFullSphere_accept(self, visitor)
@@ -9923,7 +9923,7 @@ class FormFactorFullSphere(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorFullSphere self) -> double
-        double FormFactorFullSphere::radialExtension() const final
+        double FormFactorFullSphere::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -9933,7 +9933,7 @@ class FormFactorFullSphere(IBornFF):
     def bottomZ(self, rotation):
         r"""
         bottomZ(FormFactorFullSphere self, IRotation rotation) -> double
-        double FormFactorFullSphere::bottomZ(const IRotation &rotation) const final
+        double FormFactorFullSphere::bottomZ(const IRotation &rotation) const override
 
         Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 
@@ -9943,7 +9943,7 @@ class FormFactorFullSphere(IBornFF):
     def topZ(self, rotation):
         r"""
         topZ(FormFactorFullSphere self, IRotation rotation) -> double
-        double FormFactorFullSphere::topZ(const IRotation &rotation) const final
+        double FormFactorFullSphere::topZ(const IRotation &rotation) const override
 
         Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 
@@ -9953,7 +9953,7 @@ class FormFactorFullSphere(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorFullSphere self, cvector_t q) -> complex_t
-        complex_t FormFactorFullSphere::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorFullSphere::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -9999,7 +9999,7 @@ class FormFactorFullSpheroid(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorFullSpheroid self, INodeVisitor * visitor)
-        void FormFactorFullSpheroid::accept(INodeVisitor *visitor) const final
+        void FormFactorFullSpheroid::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorFullSpheroid_accept(self, visitor)
@@ -10023,7 +10023,7 @@ class FormFactorFullSpheroid(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorFullSpheroid self) -> double
-        double FormFactorFullSpheroid::radialExtension() const final
+        double FormFactorFullSpheroid::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -10033,7 +10033,7 @@ class FormFactorFullSpheroid(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorFullSpheroid self, cvector_t q) -> complex_t
-        complex_t FormFactorFullSpheroid::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorFullSpheroid::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -10080,7 +10080,7 @@ class FormFactorHemiEllipsoid(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorHemiEllipsoid self, INodeVisitor * visitor)
-        void FormFactorHemiEllipsoid::accept(INodeVisitor *visitor) const final
+        void FormFactorHemiEllipsoid::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorHemiEllipsoid_accept(self, visitor)
@@ -10112,7 +10112,7 @@ class FormFactorHemiEllipsoid(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorHemiEllipsoid self) -> double
-        double FormFactorHemiEllipsoid::radialExtension() const final
+        double FormFactorHemiEllipsoid::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -10122,7 +10122,7 @@ class FormFactorHemiEllipsoid(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorHemiEllipsoid self, cvector_t q) -> complex_t
-        complex_t FormFactorHemiEllipsoid::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorHemiEllipsoid::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -10167,7 +10167,7 @@ class FormFactorHollowSphere(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorHollowSphere self, INodeVisitor * visitor)
-        void FormFactorHollowSphere::accept(INodeVisitor *visitor) const final
+        void FormFactorHollowSphere::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorHollowSphere_accept(self, visitor)
@@ -10175,7 +10175,7 @@ class FormFactorHollowSphere(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorHollowSphere self) -> double
-        double FormFactorHollowSphere::radialExtension() const final
+        double FormFactorHollowSphere::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -10185,7 +10185,7 @@ class FormFactorHollowSphere(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorHollowSphere self, cvector_t q) -> complex_t
-        complex_t FormFactorHollowSphere::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorHollowSphere::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -10221,7 +10221,7 @@ class FormFactorIcosahedron(IFormFactorPolyhedron):
     def clone(self):
         r"""
         clone(FormFactorIcosahedron self) -> FormFactorIcosahedron
-        FormFactorIcosahedron* FormFactorIcosahedron::clone() const final
+        FormFactorIcosahedron* FormFactorIcosahedron::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -10231,7 +10231,7 @@ class FormFactorIcosahedron(IFormFactorPolyhedron):
     def accept(self, visitor):
         r"""
         accept(FormFactorIcosahedron self, INodeVisitor * visitor)
-        void FormFactorIcosahedron::accept(INodeVisitor *visitor) const final
+        void FormFactorIcosahedron::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorIcosahedron_accept(self, visitor)
@@ -10283,7 +10283,7 @@ class FormFactorLongBoxGauss(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorLongBoxGauss self, INodeVisitor * visitor)
-        void FormFactorLongBoxGauss::accept(INodeVisitor *visitor) const final
+        void FormFactorLongBoxGauss::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorLongBoxGauss_accept(self, visitor)
@@ -10315,7 +10315,7 @@ class FormFactorLongBoxGauss(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorLongBoxGauss self) -> double
-        double FormFactorLongBoxGauss::radialExtension() const final
+        double FormFactorLongBoxGauss::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -10325,7 +10325,7 @@ class FormFactorLongBoxGauss(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorLongBoxGauss self, cvector_t q) -> complex_t
-        complex_t FormFactorLongBoxGauss::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorLongBoxGauss::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -10371,7 +10371,7 @@ class FormFactorLongBoxLorentz(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorLongBoxLorentz self, INodeVisitor * visitor)
-        void FormFactorLongBoxLorentz::accept(INodeVisitor *visitor) const final
+        void FormFactorLongBoxLorentz::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorLongBoxLorentz_accept(self, visitor)
@@ -10403,7 +10403,7 @@ class FormFactorLongBoxLorentz(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorLongBoxLorentz self) -> double
-        double FormFactorLongBoxLorentz::radialExtension() const final
+        double FormFactorLongBoxLorentz::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -10413,7 +10413,7 @@ class FormFactorLongBoxLorentz(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorLongBoxLorentz self, cvector_t q) -> complex_t
-        complex_t FormFactorLongBoxLorentz::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorLongBoxLorentz::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -10449,7 +10449,7 @@ class FormFactorPrism3(IFormFactorPrism):
     def clone(self):
         r"""
         clone(FormFactorPrism3 self) -> FormFactorPrism3
-        FormFactorPrism3* FormFactorPrism3::clone() const final
+        FormFactorPrism3* FormFactorPrism3::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -10459,7 +10459,7 @@ class FormFactorPrism3(IFormFactorPrism):
     def accept(self, visitor):
         r"""
         accept(FormFactorPrism3 self, INodeVisitor * visitor)
-        void FormFactorPrism3::accept(INodeVisitor *visitor) const final
+        void FormFactorPrism3::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorPrism3_accept(self, visitor)
@@ -10501,7 +10501,7 @@ class FormFactorPrism6(IFormFactorPrism):
     def clone(self):
         r"""
         clone(FormFactorPrism6 self) -> FormFactorPrism6
-        FormFactorPrism6* FormFactorPrism6::clone() const final
+        FormFactorPrism6* FormFactorPrism6::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -10511,7 +10511,7 @@ class FormFactorPrism6(IFormFactorPrism):
     def accept(self, visitor):
         r"""
         accept(FormFactorPrism6 self, INodeVisitor * visitor)
-        void FormFactorPrism6::accept(INodeVisitor *visitor) const final
+        void FormFactorPrism6::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorPrism6_accept(self, visitor)
@@ -10563,7 +10563,7 @@ class FormFactorPyramid(IFormFactorPolyhedron):
     def accept(self, visitor):
         r"""
         accept(FormFactorPyramid self, INodeVisitor * visitor)
-        void FormFactorPyramid::accept(INodeVisitor *visitor) const final
+        void FormFactorPyramid::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorPyramid_accept(self, visitor)
@@ -10621,7 +10621,7 @@ class FormFactorSawtoothRippleBox(ISawtoothRipple):
     def clone(self):
         r"""
         clone(FormFactorSawtoothRippleBox self) -> FormFactorSawtoothRippleBox
-        FormFactorSawtoothRippleBox * FormFactorSawtoothRippleBox::clone() const final
+        FormFactorSawtoothRippleBox * FormFactorSawtoothRippleBox::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -10631,7 +10631,7 @@ class FormFactorSawtoothRippleBox(ISawtoothRipple):
     def accept(self, visitor):
         r"""
         accept(FormFactorSawtoothRippleBox self, INodeVisitor * visitor)
-        void FormFactorSawtoothRippleBox::accept(INodeVisitor *visitor) const final
+        void FormFactorSawtoothRippleBox::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorSawtoothRippleBox_accept(self, visitor)
@@ -10665,7 +10665,7 @@ class FormFactorSawtoothRippleGauss(ISawtoothRipple):
     def clone(self):
         r"""
         clone(FormFactorSawtoothRippleGauss self) -> FormFactorSawtoothRippleGauss
-        FormFactorSawtoothRippleGauss * FormFactorSawtoothRippleGauss::clone() const final
+        FormFactorSawtoothRippleGauss * FormFactorSawtoothRippleGauss::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -10675,7 +10675,7 @@ class FormFactorSawtoothRippleGauss(ISawtoothRipple):
     def accept(self, visitor):
         r"""
         accept(FormFactorSawtoothRippleGauss self, INodeVisitor * visitor)
-        void FormFactorSawtoothRippleGauss::accept(INodeVisitor *visitor) const final
+        void FormFactorSawtoothRippleGauss::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorSawtoothRippleGauss_accept(self, visitor)
@@ -10709,7 +10709,7 @@ class FormFactorSawtoothRippleLorentz(ISawtoothRipple):
     def clone(self):
         r"""
         clone(FormFactorSawtoothRippleLorentz self) -> FormFactorSawtoothRippleLorentz
-        FormFactorSawtoothRippleLorentz * FormFactorSawtoothRippleLorentz::clone() const final
+        FormFactorSawtoothRippleLorentz * FormFactorSawtoothRippleLorentz::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -10719,7 +10719,7 @@ class FormFactorSawtoothRippleLorentz(ISawtoothRipple):
     def accept(self, visitor):
         r"""
         accept(FormFactorSawtoothRippleLorentz self, INodeVisitor * visitor)
-        void FormFactorSawtoothRippleLorentz::accept(INodeVisitor *visitor) const final
+        void FormFactorSawtoothRippleLorentz::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorSawtoothRippleLorentz_accept(self, visitor)
@@ -10763,7 +10763,7 @@ class FormFactorTetrahedron(IFormFactorPolyhedron):
     def accept(self, visitor):
         r"""
         accept(FormFactorTetrahedron self, INodeVisitor * visitor)
-        void FormFactorTetrahedron::accept(INodeVisitor *visitor) const final
+        void FormFactorTetrahedron::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorTetrahedron_accept(self, visitor)
@@ -10831,7 +10831,7 @@ class FormFactorTruncatedCube(IFormFactorPolyhedron):
     def accept(self, visitor):
         r"""
         accept(FormFactorTruncatedCube self, INodeVisitor * visitor)
-        void FormFactorTruncatedCube::accept(INodeVisitor *visitor) const final
+        void FormFactorTruncatedCube::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorTruncatedCube_accept(self, visitor)
@@ -10891,7 +10891,7 @@ class FormFactorTruncatedSphere(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorTruncatedSphere self, INodeVisitor * visitor)
-        void FormFactorTruncatedSphere::accept(INodeVisitor *visitor) const final
+        void FormFactorTruncatedSphere::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorTruncatedSphere_accept(self, visitor)
@@ -10923,7 +10923,7 @@ class FormFactorTruncatedSphere(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorTruncatedSphere self) -> double
-        double FormFactorTruncatedSphere::radialExtension() const final
+        double FormFactorTruncatedSphere::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -10933,7 +10933,7 @@ class FormFactorTruncatedSphere(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorTruncatedSphere self, cvector_t q) -> complex_t
-        complex_t FormFactorTruncatedSphere::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorTruncatedSphere::evaluate_for_q(cvector_t q) const override
 
         Complex form factor. 
 
@@ -10979,7 +10979,7 @@ class FormFactorTruncatedSpheroid(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorTruncatedSpheroid self, INodeVisitor * visitor)
-        void FormFactorTruncatedSpheroid::accept(INodeVisitor *visitor) const final
+        void FormFactorTruncatedSpheroid::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorTruncatedSpheroid_accept(self, visitor)
@@ -11019,7 +11019,7 @@ class FormFactorTruncatedSpheroid(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorTruncatedSpheroid self) -> double
-        double FormFactorTruncatedSpheroid::radialExtension() const final
+        double FormFactorTruncatedSpheroid::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -11029,7 +11029,7 @@ class FormFactorTruncatedSpheroid(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorTruncatedSpheroid self, cvector_t q) -> complex_t
-        complex_t FormFactorTruncatedSpheroid::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorTruncatedSpheroid::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -11065,7 +11065,7 @@ class FormFactorGaussSphere(IBornFF):
     def clone(self):
         r"""
         clone(FormFactorGaussSphere self) -> FormFactorGaussSphere
-        FormFactorGaussSphere* FormFactorGaussSphere::clone() const final
+        FormFactorGaussSphere* FormFactorGaussSphere::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -11075,7 +11075,7 @@ class FormFactorGaussSphere(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorGaussSphere self, INodeVisitor * visitor)
-        void FormFactorGaussSphere::accept(INodeVisitor *visitor) const final
+        void FormFactorGaussSphere::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorGaussSphere_accept(self, visitor)
@@ -11091,7 +11091,7 @@ class FormFactorGaussSphere(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorGaussSphere self) -> double
-        double FormFactorGaussSphere::radialExtension() const final
+        double FormFactorGaussSphere::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -11101,7 +11101,7 @@ class FormFactorGaussSphere(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorGaussSphere self, cvector_t q) -> complex_t
-        complex_t FormFactorGaussSphere::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorGaussSphere::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -11147,7 +11147,7 @@ class FormFactorSphereGaussianRadius(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorSphereGaussianRadius self, INodeVisitor * visitor)
-        void FormFactorSphereGaussianRadius::accept(INodeVisitor *visitor) const final
+        void FormFactorSphereGaussianRadius::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorSphereGaussianRadius_accept(self, visitor)
@@ -11155,7 +11155,7 @@ class FormFactorSphereGaussianRadius(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorSphereGaussianRadius self) -> double
-        double FormFactorSphereGaussianRadius::radialExtension() const final
+        double FormFactorSphereGaussianRadius::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -11165,7 +11165,7 @@ class FormFactorSphereGaussianRadius(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorSphereGaussianRadius self, cvector_t q) -> complex_t
-        complex_t FormFactorSphereGaussianRadius::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorSphereGaussianRadius::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -11201,7 +11201,7 @@ class FormFactorSphereLogNormalRadius(IBornFF):
     def clone(self):
         r"""
         clone(FormFactorSphereLogNormalRadius self) -> FormFactorSphereLogNormalRadius
-        FormFactorSphereLogNormalRadius * FormFactorSphereLogNormalRadius::clone() const final
+        FormFactorSphereLogNormalRadius * FormFactorSphereLogNormalRadius::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -11211,7 +11211,7 @@ class FormFactorSphereLogNormalRadius(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorSphereLogNormalRadius self, INodeVisitor * visitor)
-        void FormFactorSphereLogNormalRadius::accept(INodeVisitor *visitor) const final
+        void FormFactorSphereLogNormalRadius::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorSphereLogNormalRadius_accept(self, visitor)
@@ -11219,7 +11219,7 @@ class FormFactorSphereLogNormalRadius(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorSphereLogNormalRadius self) -> double
-        double FormFactorSphereLogNormalRadius::radialExtension() const final
+        double FormFactorSphereLogNormalRadius::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -11229,7 +11229,7 @@ class FormFactorSphereLogNormalRadius(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorSphereLogNormalRadius self, cvector_t q) -> complex_t
-        complex_t FormFactorSphereLogNormalRadius::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorSphereLogNormalRadius::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -11581,7 +11581,7 @@ class BasicLattice2D(Lattice2D):
     def accept(self, visitor):
         r"""
         accept(BasicLattice2D self, INodeVisitor * visitor)
-        void BasicLattice2D::accept(INodeVisitor *visitor) const final
+        void BasicLattice2D::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.BasicLattice2D_accept(self, visitor)
@@ -11589,7 +11589,7 @@ class BasicLattice2D(Lattice2D):
     def length1(self):
         r"""
         length1(BasicLattice2D self) -> double
-        virtual double BasicLattice2D::length1() const
+        double BasicLattice2D::length1() const override
 
         """
         return _libBornAgainSample.BasicLattice2D_length1(self)
@@ -11597,7 +11597,7 @@ class BasicLattice2D(Lattice2D):
     def length2(self):
         r"""
         length2(BasicLattice2D self) -> double
-        virtual double BasicLattice2D::length2() const
+        double BasicLattice2D::length2() const override
 
         """
         return _libBornAgainSample.BasicLattice2D_length2(self)
@@ -11605,7 +11605,7 @@ class BasicLattice2D(Lattice2D):
     def latticeAngle(self):
         r"""
         latticeAngle(BasicLattice2D self) -> double
-        virtual double BasicLattice2D::latticeAngle() const
+        double BasicLattice2D::latticeAngle() const override
 
         """
         return _libBornAgainSample.BasicLattice2D_latticeAngle(self)
@@ -11613,7 +11613,7 @@ class BasicLattice2D(Lattice2D):
     def unitCellArea(self):
         r"""
         unitCellArea(BasicLattice2D self) -> double
-        double BasicLattice2D::unitCellArea() const
+        double BasicLattice2D::unitCellArea() const override
 
         """
         return _libBornAgainSample.BasicLattice2D_unitCellArea(self)
@@ -11654,7 +11654,7 @@ class SquareLattice2D(Lattice2D):
     def accept(self, visitor):
         r"""
         accept(SquareLattice2D self, INodeVisitor * visitor)
-        void SquareLattice2D::accept(INodeVisitor *visitor) const final
+        void SquareLattice2D::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.SquareLattice2D_accept(self, visitor)
@@ -11662,7 +11662,7 @@ class SquareLattice2D(Lattice2D):
     def length1(self):
         r"""
         length1(SquareLattice2D self) -> double
-        virtual double SquareLattice2D::length1() const
+        double SquareLattice2D::length1() const override
 
         """
         return _libBornAgainSample.SquareLattice2D_length1(self)
@@ -11670,7 +11670,7 @@ class SquareLattice2D(Lattice2D):
     def length2(self):
         r"""
         length2(SquareLattice2D self) -> double
-        virtual double SquareLattice2D::length2() const
+        double SquareLattice2D::length2() const override
 
         """
         return _libBornAgainSample.SquareLattice2D_length2(self)
@@ -11678,7 +11678,7 @@ class SquareLattice2D(Lattice2D):
     def latticeAngle(self):
         r"""
         latticeAngle(SquareLattice2D self) -> double
-        double SquareLattice2D::latticeAngle() const
+        double SquareLattice2D::latticeAngle() const override
 
         """
         return _libBornAgainSample.SquareLattice2D_latticeAngle(self)
@@ -11686,7 +11686,7 @@ class SquareLattice2D(Lattice2D):
     def unitCellArea(self):
         r"""
         unitCellArea(SquareLattice2D self) -> double
-        double SquareLattice2D::unitCellArea() const
+        double SquareLattice2D::unitCellArea() const override
 
         """
         return _libBornAgainSample.SquareLattice2D_unitCellArea(self)
@@ -11727,7 +11727,7 @@ class HexagonalLattice2D(Lattice2D):
     def accept(self, visitor):
         r"""
         accept(HexagonalLattice2D self, INodeVisitor * visitor)
-        void HexagonalLattice2D::accept(INodeVisitor *visitor) const final
+        void HexagonalLattice2D::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.HexagonalLattice2D_accept(self, visitor)
@@ -11735,7 +11735,7 @@ class HexagonalLattice2D(Lattice2D):
     def length1(self):
         r"""
         length1(HexagonalLattice2D self) -> double
-        virtual double HexagonalLattice2D::length1() const
+        double HexagonalLattice2D::length1() const override
 
         """
         return _libBornAgainSample.HexagonalLattice2D_length1(self)
@@ -11743,7 +11743,7 @@ class HexagonalLattice2D(Lattice2D):
     def length2(self):
         r"""
         length2(HexagonalLattice2D self) -> double
-        virtual double HexagonalLattice2D::length2() const
+        double HexagonalLattice2D::length2() const override
 
         """
         return _libBornAgainSample.HexagonalLattice2D_length2(self)
@@ -11751,7 +11751,7 @@ class HexagonalLattice2D(Lattice2D):
     def latticeAngle(self):
         r"""
         latticeAngle(HexagonalLattice2D self) -> double
-        double HexagonalLattice2D::latticeAngle() const
+        double HexagonalLattice2D::latticeAngle() const override
 
         """
         return _libBornAgainSample.HexagonalLattice2D_latticeAngle(self)
@@ -11759,7 +11759,7 @@ class HexagonalLattice2D(Lattice2D):
     def unitCellArea(self):
         r"""
         unitCellArea(HexagonalLattice2D self) -> double
-        double HexagonalLattice2D::unitCellArea() const
+        double HexagonalLattice2D::unitCellArea() const override
 
         """
         return _libBornAgainSample.HexagonalLattice2D_unitCellArea(self)
diff --git a/auto/Wrap/libBornAgainSample_wrap.cpp b/auto/Wrap/libBornAgainSample_wrap.cpp
index 31937909b10..3bad3745673 100644
--- a/auto/Wrap/libBornAgainSample_wrap.cpp
+++ b/auto/Wrap/libBornAgainSample_wrap.cpp
@@ -71654,14 +71654,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Crystal_clone", _wrap_Crystal_clone, METH_O, "\n"
 		"Crystal_clone(Crystal self) -> Crystal\n"
-		"Crystal * Crystal::clone() const final\n"
+		"Crystal * Crystal::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "Crystal_accept", _wrap_Crystal_accept, METH_VARARGS, "\n"
 		"Crystal_accept(Crystal self, INodeVisitor * visitor)\n"
-		"void Crystal::accept(INodeVisitor *visitor) const final\n"
+		"void Crystal::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "Crystal_createTotalFormFactor", _wrap_Crystal_createTotalFormFactor, METH_VARARGS, "\n"
@@ -71681,7 +71681,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Crystal_getChildren", _wrap_Crystal_getChildren, METH_O, "\n"
 		"Crystal_getChildren(Crystal self) -> swig_dummy_type_const_inode_vector\n"
-		"std::vector< const INode * > Crystal::getChildren() const final\n"
+		"std::vector< const INode * > Crystal::getChildren() const override\n"
 		"\n"
 		""},
 	 { "Crystal_swigregister", Crystal_swigregister, METH_O, NULL},
@@ -71741,7 +71741,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "IParticle_translate", _wrap_IParticle_translate, METH_VARARGS, "\n"
 		"IParticle_translate(IParticle self, kvector_t translation)\n"
-		"void IParticle::translate(kvector_t translation) final\n"
+		"void IParticle::translate(kvector_t translation) override\n"
 		"\n"
 		"Translates the particle. \n"
 		"\n"
@@ -71762,7 +71762,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "IParticle_rotate", _wrap_IParticle_rotate, METH_VARARGS, "\n"
 		"IParticle_rotate(IParticle self, IRotation rotation)\n"
-		"void IParticle::rotate(const IRotation &rotation) final\n"
+		"void IParticle::rotate(const IRotation &rotation) override\n"
 		"\n"
 		"Rotates the particle. \n"
 		"\n"
@@ -71811,26 +71811,26 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "MesoCrystal_clone", _wrap_MesoCrystal_clone, METH_O, "\n"
 		"MesoCrystal_clone(MesoCrystal self) -> MesoCrystal\n"
-		"MesoCrystal * MesoCrystal::clone() const final\n"
+		"MesoCrystal * MesoCrystal::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "MesoCrystal_accept", _wrap_MesoCrystal_accept, METH_VARARGS, "\n"
 		"MesoCrystal_accept(MesoCrystal self, INodeVisitor * visitor)\n"
-		"void MesoCrystal::accept(INodeVisitor *visitor) const final\n"
+		"void MesoCrystal::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "MesoCrystal_createSlicedParticle", _wrap_MesoCrystal_createSlicedParticle, METH_VARARGS, "\n"
 		"MesoCrystal_createSlicedParticle(MesoCrystal self, ZLimits limits) -> SlicedParticle\n"
-		"SlicedParticle MesoCrystal::createSlicedParticle(ZLimits limits) const final\n"
+		"SlicedParticle MesoCrystal::createSlicedParticle(ZLimits limits) const override\n"
 		"\n"
 		"Creates a sliced form factor for this particle. \n"
 		"\n"
 		""},
 	 { "MesoCrystal_getChildren", _wrap_MesoCrystal_getChildren, METH_O, "\n"
 		"MesoCrystal_getChildren(MesoCrystal self) -> swig_dummy_type_const_inode_vector\n"
-		"std::vector< const INode * > MesoCrystal::getChildren() const final\n"
+		"std::vector< const INode * > MesoCrystal::getChildren() const override\n"
 		"\n"
 		""},
 	 { "MesoCrystal_swigregister", MesoCrystal_swigregister, METH_O, NULL},
@@ -71849,19 +71849,19 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Particle_clone", _wrap_Particle_clone, METH_O, "\n"
 		"Particle_clone(Particle self) -> Particle\n"
-		"Particle * Particle::clone() const final\n"
+		"Particle * Particle::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "Particle_accept", _wrap_Particle_accept, METH_VARARGS, "\n"
 		"Particle_accept(Particle self, INodeVisitor * visitor)\n"
-		"void Particle::accept(INodeVisitor *visitor) const final\n"
+		"void Particle::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "Particle_createSlicedParticle", _wrap_Particle_createSlicedParticle, METH_VARARGS, "\n"
 		"Particle_createSlicedParticle(Particle self, ZLimits limits) -> SlicedParticle\n"
-		"SlicedParticle Particle::createSlicedParticle(ZLimits limits) const final\n"
+		"SlicedParticle Particle::createSlicedParticle(ZLimits limits) const override\n"
 		"\n"
 		"Creates a sliced form factor for this particle. \n"
 		"\n"
@@ -71873,14 +71873,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Particle_material", _wrap_Particle_material, METH_O, "\n"
 		"Particle_material(Particle self) -> Material\n"
-		"const Material* Particle::material() const final\n"
+		"const Material* Particle::material() const override\n"
 		"\n"
 		"Returns nullptr, unless overwritten to return a specific material. \n"
 		"\n"
 		""},
 	 { "Particle_getChildren", _wrap_Particle_getChildren, METH_O, "\n"
 		"Particle_getChildren(Particle self) -> swig_dummy_type_const_inode_vector\n"
-		"std::vector< const INode * > Particle::getChildren() const final\n"
+		"std::vector< const INode * > Particle::getChildren() const override\n"
 		"\n"
 		""},
 	 { "Particle_swigregister", Particle_swigregister, METH_O, NULL},
@@ -71898,19 +71898,19 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "ParticleComposition_clone", _wrap_ParticleComposition_clone, METH_O, "\n"
 		"ParticleComposition_clone(ParticleComposition self) -> ParticleComposition\n"
-		"ParticleComposition * ParticleComposition::clone() const final\n"
+		"ParticleComposition * ParticleComposition::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "ParticleComposition_accept", _wrap_ParticleComposition_accept, METH_VARARGS, "\n"
 		"ParticleComposition_accept(ParticleComposition self, INodeVisitor * visitor)\n"
-		"void ParticleComposition::accept(INodeVisitor *visitor) const final\n"
+		"void ParticleComposition::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "ParticleComposition_createFormFactor", _wrap_ParticleComposition_createFormFactor, METH_O, "\n"
 		"ParticleComposition_createFormFactor(ParticleComposition self) -> IFormFactor\n"
-		"IFormFactor * ParticleComposition::createFormFactor() const final\n"
+		"IFormFactor * ParticleComposition::createFormFactor() const override\n"
 		"\n"
 		"Creates a form factor for this particle. \n"
 		"\n"
@@ -71935,19 +71935,19 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "ParticleComposition_getChildren", _wrap_ParticleComposition_getChildren, METH_O, "\n"
 		"ParticleComposition_getChildren(ParticleComposition self) -> swig_dummy_type_const_inode_vector\n"
-		"std::vector< const INode * > ParticleComposition::getChildren() const final\n"
+		"std::vector< const INode * > ParticleComposition::getChildren() const override\n"
 		"\n"
 		""},
 	 { "ParticleComposition_decompose", _wrap_ParticleComposition_decompose, METH_O, "\n"
 		"ParticleComposition_decompose(ParticleComposition self) -> SafePointerVector< IParticle >\n"
-		"SafePointerVector< IParticle > ParticleComposition::decompose() const final\n"
+		"SafePointerVector< IParticle > ParticleComposition::decompose() const override\n"
 		"\n"
 		"Decompose in constituent  IParticle objects. \n"
 		"\n"
 		""},
 	 { "ParticleComposition_bottomTopZ", _wrap_ParticleComposition_bottomTopZ, METH_O, "\n"
 		"ParticleComposition_bottomTopZ(ParticleComposition self) -> ParticleLimits\n"
-		"ParticleLimits ParticleComposition::bottomTopZ() const final\n"
+		"ParticleLimits ParticleComposition::bottomTopZ() const override\n"
 		"\n"
 		"Top and bottom z-coordinate. \n"
 		"\n"
@@ -71966,19 +71966,19 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "ParticleCoreShell_clone", _wrap_ParticleCoreShell_clone, METH_O, "\n"
 		"ParticleCoreShell_clone(ParticleCoreShell self) -> ParticleCoreShell\n"
-		"ParticleCoreShell * ParticleCoreShell::clone() const final\n"
+		"ParticleCoreShell * ParticleCoreShell::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "ParticleCoreShell_accept", _wrap_ParticleCoreShell_accept, METH_VARARGS, "\n"
 		"ParticleCoreShell_accept(ParticleCoreShell self, INodeVisitor * visitor)\n"
-		"void ParticleCoreShell::accept(INodeVisitor *visitor) const final\n"
+		"void ParticleCoreShell::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "ParticleCoreShell_createSlicedParticle", _wrap_ParticleCoreShell_createSlicedParticle, METH_VARARGS, "\n"
 		"ParticleCoreShell_createSlicedParticle(ParticleCoreShell self, ZLimits limits) -> SlicedParticle\n"
-		"SlicedParticle ParticleCoreShell::createSlicedParticle(ZLimits limits) const final\n"
+		"SlicedParticle ParticleCoreShell::createSlicedParticle(ZLimits limits) const override\n"
 		"\n"
 		"Creates a sliced form factor for this particle. \n"
 		"\n"
@@ -71995,7 +71995,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "ParticleCoreShell_getChildren", _wrap_ParticleCoreShell_getChildren, METH_O, "\n"
 		"ParticleCoreShell_getChildren(ParticleCoreShell self) -> swig_dummy_type_const_inode_vector\n"
-		"std::vector< const INode * > ParticleCoreShell::getChildren() const final\n"
+		"std::vector< const INode * > ParticleCoreShell::getChildren() const override\n"
 		"\n"
 		""},
 	 { "ParticleCoreShell_swigregister", ParticleCoreShell_swigregister, METH_O, NULL},
@@ -72007,26 +72007,26 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "ParticleDistribution_clone", _wrap_ParticleDistribution_clone, METH_O, "\n"
 		"ParticleDistribution_clone(ParticleDistribution self) -> ParticleDistribution\n"
-		"ParticleDistribution * ParticleDistribution::clone() const final\n"
+		"ParticleDistribution * ParticleDistribution::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "ParticleDistribution_accept", _wrap_ParticleDistribution_accept, METH_VARARGS, "\n"
 		"ParticleDistribution_accept(ParticleDistribution self, INodeVisitor * visitor)\n"
-		"void ParticleDistribution::accept(INodeVisitor *visitor) const final\n"
+		"void ParticleDistribution::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "ParticleDistribution_translate", _wrap_ParticleDistribution_translate, METH_VARARGS, "\n"
 		"ParticleDistribution_translate(ParticleDistribution self, kvector_t translation)\n"
-		"void ParticleDistribution::translate(kvector_t translation) final\n"
+		"void ParticleDistribution::translate(kvector_t translation) override\n"
 		"\n"
 		"Translates the particle with the given vector. \n"
 		"\n"
 		""},
 	 { "ParticleDistribution_rotate", _wrap_ParticleDistribution_rotate, METH_VARARGS, "\n"
 		"ParticleDistribution_rotate(ParticleDistribution self, IRotation rotation)\n"
-		"void ParticleDistribution::rotate(const IRotation &rotation) final\n"
+		"void ParticleDistribution::rotate(const IRotation &rotation) override\n"
 		"\n"
 		"Applies the given rotation to the particle. \n"
 		"\n"
@@ -72056,7 +72056,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "ParticleDistribution_getChildren", _wrap_ParticleDistribution_getChildren, METH_O, "\n"
 		"ParticleDistribution_getChildren(ParticleDistribution self) -> swig_dummy_type_const_inode_vector\n"
-		"std::vector< const INode * > ParticleDistribution::getChildren() const final\n"
+		"std::vector< const INode * > ParticleDistribution::getChildren() const override\n"
 		"\n"
 		""},
 	 { "ParticleDistribution_mainUnits", _wrap_ParticleDistribution_mainUnits, METH_O, "\n"
@@ -72097,12 +72097,12 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDecayFunction1DCauchy_accept", _wrap_FTDecayFunction1DCauchy_accept, METH_VARARGS, "\n"
 		"FTDecayFunction1DCauchy_accept(FTDecayFunction1DCauchy self, INodeVisitor * visitor)\n"
-		"void FTDecayFunction1DCauchy::accept(INodeVisitor *visitor) const final\n"
+		"void FTDecayFunction1DCauchy::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDecayFunction1DCauchy_evaluate", _wrap_FTDecayFunction1DCauchy_evaluate, METH_VARARGS, "\n"
 		"FTDecayFunction1DCauchy_evaluate(FTDecayFunction1DCauchy self, double q) -> double\n"
-		"double FTDecayFunction1DCauchy::evaluate(double q) const final\n"
+		"double FTDecayFunction1DCauchy::evaluate(double q) const override\n"
 		"\n"
 		""},
 	 { "delete_FTDecayFunction1DCauchy", _wrap_delete_FTDecayFunction1DCauchy, METH_O, "delete_FTDecayFunction1DCauchy(FTDecayFunction1DCauchy self)"},
@@ -72121,12 +72121,12 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDecayFunction1DGauss_accept", _wrap_FTDecayFunction1DGauss_accept, METH_VARARGS, "\n"
 		"FTDecayFunction1DGauss_accept(FTDecayFunction1DGauss self, INodeVisitor * visitor)\n"
-		"void FTDecayFunction1DGauss::accept(INodeVisitor *visitor) const final\n"
+		"void FTDecayFunction1DGauss::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDecayFunction1DGauss_evaluate", _wrap_FTDecayFunction1DGauss_evaluate, METH_VARARGS, "\n"
 		"FTDecayFunction1DGauss_evaluate(FTDecayFunction1DGauss self, double q) -> double\n"
-		"double FTDecayFunction1DGauss::evaluate(double q) const final\n"
+		"double FTDecayFunction1DGauss::evaluate(double q) const override\n"
 		"\n"
 		""},
 	 { "delete_FTDecayFunction1DGauss", _wrap_delete_FTDecayFunction1DGauss, METH_O, "delete_FTDecayFunction1DGauss(FTDecayFunction1DGauss self)"},
@@ -72145,12 +72145,12 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDecayFunction1DTriangle_accept", _wrap_FTDecayFunction1DTriangle_accept, METH_VARARGS, "\n"
 		"FTDecayFunction1DTriangle_accept(FTDecayFunction1DTriangle self, INodeVisitor * visitor)\n"
-		"void FTDecayFunction1DTriangle::accept(INodeVisitor *visitor) const final\n"
+		"void FTDecayFunction1DTriangle::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDecayFunction1DTriangle_evaluate", _wrap_FTDecayFunction1DTriangle_evaluate, METH_VARARGS, "\n"
 		"FTDecayFunction1DTriangle_evaluate(FTDecayFunction1DTriangle self, double q) -> double\n"
-		"double FTDecayFunction1DTriangle::evaluate(double q) const final\n"
+		"double FTDecayFunction1DTriangle::evaluate(double q) const override\n"
 		"\n"
 		""},
 	 { "delete_FTDecayFunction1DTriangle", _wrap_delete_FTDecayFunction1DTriangle, METH_O, "delete_FTDecayFunction1DTriangle(FTDecayFunction1DTriangle self)"},
@@ -72169,12 +72169,12 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDecayFunction1DVoigt_accept", _wrap_FTDecayFunction1DVoigt_accept, METH_VARARGS, "\n"
 		"FTDecayFunction1DVoigt_accept(FTDecayFunction1DVoigt self, INodeVisitor * visitor)\n"
-		"void FTDecayFunction1DVoigt::accept(INodeVisitor *visitor) const final\n"
+		"void FTDecayFunction1DVoigt::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDecayFunction1DVoigt_evaluate", _wrap_FTDecayFunction1DVoigt_evaluate, METH_VARARGS, "\n"
 		"FTDecayFunction1DVoigt_evaluate(FTDecayFunction1DVoigt self, double q) -> double\n"
-		"double FTDecayFunction1DVoigt::evaluate(double q) const final\n"
+		"double FTDecayFunction1DVoigt::evaluate(double q) const override\n"
 		"\n"
 		""},
 	 { "FTDecayFunction1DVoigt_eEta", _wrap_FTDecayFunction1DVoigt_eEta, METH_O, "\n"
@@ -72242,12 +72242,12 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDecayFunction2DCauchy_accept", _wrap_FTDecayFunction2DCauchy_accept, METH_VARARGS, "\n"
 		"FTDecayFunction2DCauchy_accept(FTDecayFunction2DCauchy self, INodeVisitor * visitor)\n"
-		"void FTDecayFunction2DCauchy::accept(INodeVisitor *visitor) const final\n"
+		"void FTDecayFunction2DCauchy::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDecayFunction2DCauchy_evaluate", _wrap_FTDecayFunction2DCauchy_evaluate, METH_VARARGS, "\n"
 		"FTDecayFunction2DCauchy_evaluate(FTDecayFunction2DCauchy self, double qx, double qy) -> double\n"
-		"double FTDecayFunction2DCauchy::evaluate(double qx, double qy) const final\n"
+		"double FTDecayFunction2DCauchy::evaluate(double qx, double qy) const override\n"
 		"\n"
 		"evaluate Fourier transformed decay function for q in X,Y coordinates \n"
 		"\n"
@@ -72268,12 +72268,12 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDecayFunction2DGauss_accept", _wrap_FTDecayFunction2DGauss_accept, METH_VARARGS, "\n"
 		"FTDecayFunction2DGauss_accept(FTDecayFunction2DGauss self, INodeVisitor * visitor)\n"
-		"void FTDecayFunction2DGauss::accept(INodeVisitor *visitor) const final\n"
+		"void FTDecayFunction2DGauss::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDecayFunction2DGauss_evaluate", _wrap_FTDecayFunction2DGauss_evaluate, METH_VARARGS, "\n"
 		"FTDecayFunction2DGauss_evaluate(FTDecayFunction2DGauss self, double qx, double qy) -> double\n"
-		"double FTDecayFunction2DGauss::evaluate(double qx, double qy) const final\n"
+		"double FTDecayFunction2DGauss::evaluate(double qx, double qy) const override\n"
 		"\n"
 		"evaluate Fourier transformed decay function for q in X,Y coordinates \n"
 		"\n"
@@ -72294,12 +72294,12 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDecayFunction2DVoigt_accept", _wrap_FTDecayFunction2DVoigt_accept, METH_VARARGS, "\n"
 		"FTDecayFunction2DVoigt_accept(FTDecayFunction2DVoigt self, INodeVisitor * visitor)\n"
-		"void FTDecayFunction2DVoigt::accept(INodeVisitor *visitor) const final\n"
+		"void FTDecayFunction2DVoigt::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDecayFunction2DVoigt_evaluate", _wrap_FTDecayFunction2DVoigt_evaluate, METH_VARARGS, "\n"
 		"FTDecayFunction2DVoigt_evaluate(FTDecayFunction2DVoigt self, double qx, double qy) -> double\n"
-		"double FTDecayFunction2DVoigt::evaluate(double qx, double qy) const final\n"
+		"double FTDecayFunction2DVoigt::evaluate(double qx, double qy) const override\n"
 		"\n"
 		"evaluate Fourier transformed decay function for q in X,Y coordinates \n"
 		"\n"
@@ -72346,24 +72346,24 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution1DCauchy_clone", _wrap_FTDistribution1DCauchy_clone, METH_O, "\n"
 		"FTDistribution1DCauchy_clone(FTDistribution1DCauchy self) -> FTDistribution1DCauchy\n"
-		"FTDistribution1DCauchy * FTDistribution1DCauchy::clone() const final\n"
+		"FTDistribution1DCauchy * FTDistribution1DCauchy::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DCauchy_accept", _wrap_FTDistribution1DCauchy_accept, METH_VARARGS, "\n"
 		"FTDistribution1DCauchy_accept(FTDistribution1DCauchy self, INodeVisitor * visitor)\n"
-		"void FTDistribution1DCauchy::accept(INodeVisitor *visitor) const final\n"
+		"void FTDistribution1DCauchy::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DCauchy_evaluate", _wrap_FTDistribution1DCauchy_evaluate, METH_VARARGS, "\n"
 		"FTDistribution1DCauchy_evaluate(FTDistribution1DCauchy self, double q) -> double\n"
-		"double FTDistribution1DCauchy::evaluate(double q) const final\n"
+		"double FTDistribution1DCauchy::evaluate(double q) const override\n"
 		"\n"
 		"Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. \n"
 		"\n"
 		""},
 	 { "FTDistribution1DCauchy_qSecondDerivative", _wrap_FTDistribution1DCauchy_qSecondDerivative, METH_O, "\n"
 		"FTDistribution1DCauchy_qSecondDerivative(FTDistribution1DCauchy self) -> double\n"
-		"double FTDistribution1DCauchy::qSecondDerivative() const final\n"
+		"double FTDistribution1DCauchy::qSecondDerivative() const override\n"
 		"\n"
 		"Returns the negative of the second order derivative in q space around q=0. \n"
 		"\n"
@@ -72379,24 +72379,24 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution1DGauss_clone", _wrap_FTDistribution1DGauss_clone, METH_O, "\n"
 		"FTDistribution1DGauss_clone(FTDistribution1DGauss self) -> FTDistribution1DGauss\n"
-		"FTDistribution1DGauss * FTDistribution1DGauss::clone() const final\n"
+		"FTDistribution1DGauss * FTDistribution1DGauss::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DGauss_accept", _wrap_FTDistribution1DGauss_accept, METH_VARARGS, "\n"
 		"FTDistribution1DGauss_accept(FTDistribution1DGauss self, INodeVisitor * visitor)\n"
-		"void FTDistribution1DGauss::accept(INodeVisitor *visitor) const final\n"
+		"void FTDistribution1DGauss::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DGauss_evaluate", _wrap_FTDistribution1DGauss_evaluate, METH_VARARGS, "\n"
 		"FTDistribution1DGauss_evaluate(FTDistribution1DGauss self, double q) -> double\n"
-		"double FTDistribution1DGauss::evaluate(double q) const final\n"
+		"double FTDistribution1DGauss::evaluate(double q) const override\n"
 		"\n"
 		"Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. \n"
 		"\n"
 		""},
 	 { "FTDistribution1DGauss_qSecondDerivative", _wrap_FTDistribution1DGauss_qSecondDerivative, METH_O, "\n"
 		"FTDistribution1DGauss_qSecondDerivative(FTDistribution1DGauss self) -> double\n"
-		"double FTDistribution1DGauss::qSecondDerivative() const final\n"
+		"double FTDistribution1DGauss::qSecondDerivative() const override\n"
 		"\n"
 		"Returns the negative of the second order derivative in q space around q=0. \n"
 		"\n"
@@ -72412,24 +72412,24 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution1DGate_clone", _wrap_FTDistribution1DGate_clone, METH_O, "\n"
 		"FTDistribution1DGate_clone(FTDistribution1DGate self) -> FTDistribution1DGate\n"
-		"FTDistribution1DGate * FTDistribution1DGate::clone() const final\n"
+		"FTDistribution1DGate * FTDistribution1DGate::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DGate_accept", _wrap_FTDistribution1DGate_accept, METH_VARARGS, "\n"
 		"FTDistribution1DGate_accept(FTDistribution1DGate self, INodeVisitor * visitor)\n"
-		"void FTDistribution1DGate::accept(INodeVisitor *visitor) const final\n"
+		"void FTDistribution1DGate::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DGate_evaluate", _wrap_FTDistribution1DGate_evaluate, METH_VARARGS, "\n"
 		"FTDistribution1DGate_evaluate(FTDistribution1DGate self, double q) -> double\n"
-		"double FTDistribution1DGate::evaluate(double q) const final\n"
+		"double FTDistribution1DGate::evaluate(double q) const override\n"
 		"\n"
 		"Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. \n"
 		"\n"
 		""},
 	 { "FTDistribution1DGate_qSecondDerivative", _wrap_FTDistribution1DGate_qSecondDerivative, METH_O, "\n"
 		"FTDistribution1DGate_qSecondDerivative(FTDistribution1DGate self) -> double\n"
-		"double FTDistribution1DGate::qSecondDerivative() const final\n"
+		"double FTDistribution1DGate::qSecondDerivative() const override\n"
 		"\n"
 		"Returns the negative of the second order derivative in q space around q=0. \n"
 		"\n"
@@ -72445,24 +72445,24 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution1DTriangle_clone", _wrap_FTDistribution1DTriangle_clone, METH_O, "\n"
 		"FTDistribution1DTriangle_clone(FTDistribution1DTriangle self) -> FTDistribution1DTriangle\n"
-		"FTDistribution1DTriangle * FTDistribution1DTriangle::clone() const final\n"
+		"FTDistribution1DTriangle * FTDistribution1DTriangle::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DTriangle_accept", _wrap_FTDistribution1DTriangle_accept, METH_VARARGS, "\n"
 		"FTDistribution1DTriangle_accept(FTDistribution1DTriangle self, INodeVisitor * visitor)\n"
-		"void FTDistribution1DTriangle::accept(INodeVisitor *visitor) const final\n"
+		"void FTDistribution1DTriangle::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DTriangle_evaluate", _wrap_FTDistribution1DTriangle_evaluate, METH_VARARGS, "\n"
 		"FTDistribution1DTriangle_evaluate(FTDistribution1DTriangle self, double q) -> double\n"
-		"double FTDistribution1DTriangle::evaluate(double q) const final\n"
+		"double FTDistribution1DTriangle::evaluate(double q) const override\n"
 		"\n"
 		"Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. \n"
 		"\n"
 		""},
 	 { "FTDistribution1DTriangle_qSecondDerivative", _wrap_FTDistribution1DTriangle_qSecondDerivative, METH_O, "\n"
 		"FTDistribution1DTriangle_qSecondDerivative(FTDistribution1DTriangle self) -> double\n"
-		"double FTDistribution1DTriangle::qSecondDerivative() const final\n"
+		"double FTDistribution1DTriangle::qSecondDerivative() const override\n"
 		"\n"
 		"Returns the negative of the second order derivative in q space around q=0. \n"
 		"\n"
@@ -72478,24 +72478,24 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution1DCosine_clone", _wrap_FTDistribution1DCosine_clone, METH_O, "\n"
 		"FTDistribution1DCosine_clone(FTDistribution1DCosine self) -> FTDistribution1DCosine\n"
-		"FTDistribution1DCosine * FTDistribution1DCosine::clone() const final\n"
+		"FTDistribution1DCosine * FTDistribution1DCosine::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DCosine_accept", _wrap_FTDistribution1DCosine_accept, METH_VARARGS, "\n"
 		"FTDistribution1DCosine_accept(FTDistribution1DCosine self, INodeVisitor * visitor)\n"
-		"void FTDistribution1DCosine::accept(INodeVisitor *visitor) const final\n"
+		"void FTDistribution1DCosine::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DCosine_evaluate", _wrap_FTDistribution1DCosine_evaluate, METH_VARARGS, "\n"
 		"FTDistribution1DCosine_evaluate(FTDistribution1DCosine self, double q) -> double\n"
-		"double FTDistribution1DCosine::evaluate(double q) const final\n"
+		"double FTDistribution1DCosine::evaluate(double q) const override\n"
 		"\n"
 		"Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. \n"
 		"\n"
 		""},
 	 { "FTDistribution1DCosine_qSecondDerivative", _wrap_FTDistribution1DCosine_qSecondDerivative, METH_O, "\n"
 		"FTDistribution1DCosine_qSecondDerivative(FTDistribution1DCosine self) -> double\n"
-		"double FTDistribution1DCosine::qSecondDerivative() const final\n"
+		"double FTDistribution1DCosine::qSecondDerivative() const override\n"
 		"\n"
 		"Returns the negative of the second order derivative in q space around q=0. \n"
 		"\n"
@@ -72511,17 +72511,17 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution1DVoigt_clone", _wrap_FTDistribution1DVoigt_clone, METH_O, "\n"
 		"FTDistribution1DVoigt_clone(FTDistribution1DVoigt self) -> FTDistribution1DVoigt\n"
-		"FTDistribution1DVoigt * FTDistribution1DVoigt::clone() const final\n"
+		"FTDistribution1DVoigt * FTDistribution1DVoigt::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DVoigt_accept", _wrap_FTDistribution1DVoigt_accept, METH_VARARGS, "\n"
 		"FTDistribution1DVoigt_accept(FTDistribution1DVoigt self, INodeVisitor * visitor)\n"
-		"void FTDistribution1DVoigt::accept(INodeVisitor *visitor) const final\n"
+		"void FTDistribution1DVoigt::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DVoigt_evaluate", _wrap_FTDistribution1DVoigt_evaluate, METH_VARARGS, "\n"
 		"FTDistribution1DVoigt_evaluate(FTDistribution1DVoigt self, double q) -> double\n"
-		"double FTDistribution1DVoigt::evaluate(double q) const final\n"
+		"double FTDistribution1DVoigt::evaluate(double q) const override\n"
 		"\n"
 		"Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. \n"
 		"\n"
@@ -72533,7 +72533,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution1DVoigt_qSecondDerivative", _wrap_FTDistribution1DVoigt_qSecondDerivative, METH_O, "\n"
 		"FTDistribution1DVoigt_qSecondDerivative(FTDistribution1DVoigt self) -> double\n"
-		"double FTDistribution1DVoigt::qSecondDerivative() const final\n"
+		"double FTDistribution1DVoigt::qSecondDerivative() const override\n"
 		"\n"
 		"Returns the negative of the second order derivative in q space around q=0. \n"
 		"\n"
@@ -72585,17 +72585,17 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution2DCauchy_clone", _wrap_FTDistribution2DCauchy_clone, METH_O, "\n"
 		"FTDistribution2DCauchy_clone(FTDistribution2DCauchy self) -> FTDistribution2DCauchy\n"
-		"FTDistribution2DCauchy * FTDistribution2DCauchy::clone() const final\n"
+		"FTDistribution2DCauchy * FTDistribution2DCauchy::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDistribution2DCauchy_accept", _wrap_FTDistribution2DCauchy_accept, METH_VARARGS, "\n"
 		"FTDistribution2DCauchy_accept(FTDistribution2DCauchy self, INodeVisitor * visitor)\n"
-		"void FTDistribution2DCauchy::accept(INodeVisitor *visitor) const final\n"
+		"void FTDistribution2DCauchy::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDistribution2DCauchy_evaluate", _wrap_FTDistribution2DCauchy_evaluate, METH_VARARGS, "\n"
 		"FTDistribution2DCauchy_evaluate(FTDistribution2DCauchy self, double qx, double qy) -> double\n"
-		"double FTDistribution2DCauchy::evaluate(double qx, double qy) const final\n"
+		"double FTDistribution2DCauchy::evaluate(double qx, double qy) const override\n"
 		"\n"
 		"evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 \n"
 		"\n"
@@ -72611,17 +72611,17 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution2DGauss_clone", _wrap_FTDistribution2DGauss_clone, METH_O, "\n"
 		"FTDistribution2DGauss_clone(FTDistribution2DGauss self) -> FTDistribution2DGauss\n"
-		"FTDistribution2DGauss * FTDistribution2DGauss::clone() const final\n"
+		"FTDistribution2DGauss * FTDistribution2DGauss::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDistribution2DGauss_accept", _wrap_FTDistribution2DGauss_accept, METH_VARARGS, "\n"
 		"FTDistribution2DGauss_accept(FTDistribution2DGauss self, INodeVisitor * visitor)\n"
-		"void FTDistribution2DGauss::accept(INodeVisitor *visitor) const final\n"
+		"void FTDistribution2DGauss::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDistribution2DGauss_evaluate", _wrap_FTDistribution2DGauss_evaluate, METH_VARARGS, "\n"
 		"FTDistribution2DGauss_evaluate(FTDistribution2DGauss self, double qx, double qy) -> double\n"
-		"double FTDistribution2DGauss::evaluate(double qx, double qy) const final\n"
+		"double FTDistribution2DGauss::evaluate(double qx, double qy) const override\n"
 		"\n"
 		"evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 \n"
 		"\n"
@@ -72637,17 +72637,17 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution2DGate_clone", _wrap_FTDistribution2DGate_clone, METH_O, "\n"
 		"FTDistribution2DGate_clone(FTDistribution2DGate self) -> FTDistribution2DGate\n"
-		"FTDistribution2DGate * FTDistribution2DGate::clone() const final\n"
+		"FTDistribution2DGate * FTDistribution2DGate::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDistribution2DGate_accept", _wrap_FTDistribution2DGate_accept, METH_VARARGS, "\n"
 		"FTDistribution2DGate_accept(FTDistribution2DGate self, INodeVisitor * visitor)\n"
-		"void FTDistribution2DGate::accept(INodeVisitor *visitor) const final\n"
+		"void FTDistribution2DGate::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDistribution2DGate_evaluate", _wrap_FTDistribution2DGate_evaluate, METH_VARARGS, "\n"
 		"FTDistribution2DGate_evaluate(FTDistribution2DGate self, double qx, double qy) -> double\n"
-		"double FTDistribution2DGate::evaluate(double qx, double qy) const final\n"
+		"double FTDistribution2DGate::evaluate(double qx, double qy) const override\n"
 		"\n"
 		"evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 \n"
 		"\n"
@@ -72663,17 +72663,17 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution2DCone_clone", _wrap_FTDistribution2DCone_clone, METH_O, "\n"
 		"FTDistribution2DCone_clone(FTDistribution2DCone self) -> FTDistribution2DCone\n"
-		"FTDistribution2DCone * FTDistribution2DCone::clone() const final\n"
+		"FTDistribution2DCone * FTDistribution2DCone::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDistribution2DCone_accept", _wrap_FTDistribution2DCone_accept, METH_VARARGS, "\n"
 		"FTDistribution2DCone_accept(FTDistribution2DCone self, INodeVisitor * visitor)\n"
-		"void FTDistribution2DCone::accept(INodeVisitor *visitor) const final\n"
+		"void FTDistribution2DCone::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDistribution2DCone_evaluate", _wrap_FTDistribution2DCone_evaluate, METH_VARARGS, "\n"
 		"FTDistribution2DCone_evaluate(FTDistribution2DCone self, double qx, double qy) -> double\n"
-		"double FTDistribution2DCone::evaluate(double qx, double qy) const final\n"
+		"double FTDistribution2DCone::evaluate(double qx, double qy) const override\n"
 		"\n"
 		"evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 \n"
 		"\n"
@@ -72689,17 +72689,17 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution2DVoigt_clone", _wrap_FTDistribution2DVoigt_clone, METH_O, "\n"
 		"FTDistribution2DVoigt_clone(FTDistribution2DVoigt self) -> FTDistribution2DVoigt\n"
-		"FTDistribution2DVoigt * FTDistribution2DVoigt::clone() const final\n"
+		"FTDistribution2DVoigt * FTDistribution2DVoigt::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDistribution2DVoigt_accept", _wrap_FTDistribution2DVoigt_accept, METH_VARARGS, "\n"
 		"FTDistribution2DVoigt_accept(FTDistribution2DVoigt self, INodeVisitor * visitor)\n"
-		"void FTDistribution2DVoigt::accept(INodeVisitor *visitor) const final\n"
+		"void FTDistribution2DVoigt::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDistribution2DVoigt_evaluate", _wrap_FTDistribution2DVoigt_evaluate, METH_VARARGS, "\n"
 		"FTDistribution2DVoigt_evaluate(FTDistribution2DVoigt self, double qx, double qy) -> double\n"
-		"double FTDistribution2DVoigt::evaluate(double qx, double qy) const final\n"
+		"double FTDistribution2DVoigt::evaluate(double qx, double qy) const override\n"
 		"\n"
 		"evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 \n"
 		"\n"
@@ -73585,14 +73585,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "InterferenceFunctionNone_clone", _wrap_InterferenceFunctionNone_clone, METH_O, "\n"
 		"InterferenceFunctionNone_clone(InterferenceFunctionNone self) -> InterferenceFunctionNone\n"
-		"InterferenceFunctionNone * InterferenceFunctionNone::clone() const final\n"
+		"InterferenceFunctionNone * InterferenceFunctionNone::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "InterferenceFunctionNone_accept", _wrap_InterferenceFunctionNone_accept, METH_VARARGS, "\n"
 		"InterferenceFunctionNone_accept(InterferenceFunctionNone self, INodeVisitor * visitor)\n"
-		"void InterferenceFunctionNone::accept(INodeVisitor *visitor) const final\n"
+		"void InterferenceFunctionNone::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "delete_InterferenceFunctionNone", _wrap_delete_InterferenceFunctionNone, METH_O, "delete_InterferenceFunctionNone(InterferenceFunctionNone self)"},
@@ -73616,14 +73616,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "InterferenceFunctionRadialParaCrystal_clone", _wrap_InterferenceFunctionRadialParaCrystal_clone, METH_O, "\n"
 		"InterferenceFunctionRadialParaCrystal_clone(InterferenceFunctionRadialParaCrystal self) -> InterferenceFunctionRadialParaCrystal\n"
-		"InterferenceFunctionRadialParaCrystal * InterferenceFunctionRadialParaCrystal::clone() const final\n"
+		"InterferenceFunctionRadialParaCrystal * InterferenceFunctionRadialParaCrystal::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "InterferenceFunctionRadialParaCrystal_accept", _wrap_InterferenceFunctionRadialParaCrystal_accept, METH_VARARGS, "\n"
 		"InterferenceFunctionRadialParaCrystal_accept(InterferenceFunctionRadialParaCrystal self, INodeVisitor * visitor)\n"
-		"void InterferenceFunctionRadialParaCrystal::accept(INodeVisitor *visitor) const final\n"
+		"void InterferenceFunctionRadialParaCrystal::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "InterferenceFunctionRadialParaCrystal_setKappa", _wrap_InterferenceFunctionRadialParaCrystal_setKappa, METH_VARARGS, "\n"
@@ -73686,7 +73686,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "InterferenceFunctionRadialParaCrystal_getChildren", _wrap_InterferenceFunctionRadialParaCrystal_getChildren, METH_O, "\n"
 		"InterferenceFunctionRadialParaCrystal_getChildren(InterferenceFunctionRadialParaCrystal self) -> swig_dummy_type_const_inode_vector\n"
-		"std::vector< const INode * > InterferenceFunctionRadialParaCrystal::getChildren() const final\n"
+		"std::vector< const INode * > InterferenceFunctionRadialParaCrystal::getChildren() const override\n"
 		"\n"
 		""},
 	 { "InterferenceFunctionRadialParaCrystal_randomSample", _wrap_InterferenceFunctionRadialParaCrystal_randomSample, METH_O, "\n"
@@ -73704,14 +73704,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "InterferenceFunctionTwin_clone", _wrap_InterferenceFunctionTwin_clone, METH_O, "\n"
 		"InterferenceFunctionTwin_clone(InterferenceFunctionTwin self) -> InterferenceFunctionTwin\n"
-		"InterferenceFunctionTwin * InterferenceFunctionTwin::clone() const final\n"
+		"InterferenceFunctionTwin * InterferenceFunctionTwin::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "InterferenceFunctionTwin_accept", _wrap_InterferenceFunctionTwin_accept, METH_VARARGS, "\n"
 		"InterferenceFunctionTwin_accept(InterferenceFunctionTwin self, INodeVisitor * visitor)\n"
-		"void InterferenceFunctionTwin::accept(INodeVisitor *visitor) const final\n"
+		"void InterferenceFunctionTwin::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "InterferenceFunctionTwin_direction", _wrap_InterferenceFunctionTwin_direction, METH_O, "\n"
@@ -73963,14 +73963,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Layer_clone", _wrap_Layer_clone, METH_O, "\n"
 		"Layer_clone(Layer self) -> Layer\n"
-		"Layer * Layer::clone() const final\n"
+		"Layer * Layer::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "Layer_accept", _wrap_Layer_accept, METH_VARARGS, "\n"
 		"Layer_accept(Layer self, INodeVisitor * visitor)\n"
-		"void Layer::accept(INodeVisitor *visitor) const final\n"
+		"void Layer::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "Layer_thickness", _wrap_Layer_thickness, METH_O, "\n"
@@ -73980,7 +73980,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Layer_material", _wrap_Layer_material, METH_O, "\n"
 		"Layer_material(Layer self) -> Material\n"
-		"const Material* Layer::material() const final\n"
+		"const Material* Layer::material() const override\n"
 		"\n"
 		"Returns nullptr, unless overwritten to return a specific material. \n"
 		"\n"
@@ -74002,7 +74002,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Layer_getChildren", _wrap_Layer_getChildren, METH_O, "\n"
 		"Layer_getChildren(Layer self) -> swig_dummy_type_const_inode_vector\n"
-		"std::vector< const INode * > Layer::getChildren() const final\n"
+		"std::vector< const INode * > Layer::getChildren() const override\n"
 		"\n"
 		""},
 	 { "Layer_registerThickness", _wrap_Layer_registerThickness, METH_VARARGS, "\n"
@@ -74034,14 +74034,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "MultiLayer_clone", _wrap_MultiLayer_clone, METH_O, "\n"
 		"MultiLayer_clone(MultiLayer self) -> MultiLayer\n"
-		"MultiLayer * MultiLayer::clone() const final\n"
+		"MultiLayer * MultiLayer::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "MultiLayer_accept", _wrap_MultiLayer_accept, METH_VARARGS, "\n"
 		"MultiLayer_accept(MultiLayer self, INodeVisitor * visitor)\n"
-		"void MultiLayer::accept(INodeVisitor *visitor) const final\n"
+		"void MultiLayer::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "MultiLayer_numberOfLayers", _wrap_MultiLayer_numberOfLayers, METH_O, "\n"
@@ -74117,7 +74117,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "MultiLayer_getChildren", _wrap_MultiLayer_getChildren, METH_O, "\n"
 		"MultiLayer_getChildren(MultiLayer self) -> swig_dummy_type_const_inode_vector\n"
-		"std::vector< const INode * > MultiLayer::getChildren() const final\n"
+		"std::vector< const INode * > MultiLayer::getChildren() const override\n"
 		"\n"
 		""},
 	 { "MultiLayer_swigregister", MultiLayer_swigregister, METH_O, NULL},
@@ -74131,21 +74131,21 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "IFormFactorPolyhedron_bottomZ", _wrap_IFormFactorPolyhedron_bottomZ, METH_VARARGS, "\n"
 		"IFormFactorPolyhedron_bottomZ(IFormFactorPolyhedron self, IRotation rotation) -> double\n"
-		"double IFormFactorPolyhedron::bottomZ(const IRotation &rotation) const final\n"
+		"double IFormFactorPolyhedron::bottomZ(const IRotation &rotation) const override\n"
 		"\n"
 		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
 		"\n"
 		""},
 	 { "IFormFactorPolyhedron_topZ", _wrap_IFormFactorPolyhedron_topZ, METH_VARARGS, "\n"
 		"IFormFactorPolyhedron_topZ(IFormFactorPolyhedron self, IRotation rotation) -> double\n"
-		"double IFormFactorPolyhedron::topZ(const IRotation &rotation) const final\n"
+		"double IFormFactorPolyhedron::topZ(const IRotation &rotation) const override\n"
 		"\n"
 		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
 		"\n"
 		""},
 	 { "IFormFactorPolyhedron_evaluate_for_q", _wrap_IFormFactorPolyhedron_evaluate_for_q, METH_VARARGS, "\n"
 		"IFormFactorPolyhedron_evaluate_for_q(IFormFactorPolyhedron self, cvector_t q) -> complex_t\n"
-		"complex_t IFormFactorPolyhedron::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t IFormFactorPolyhedron::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -74157,14 +74157,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "IFormFactorPolyhedron_volume", _wrap_IFormFactorPolyhedron_volume, METH_O, "\n"
 		"IFormFactorPolyhedron_volume(IFormFactorPolyhedron self) -> double\n"
-		"double IFormFactorPolyhedron::volume() const final\n"
+		"double IFormFactorPolyhedron::volume() const override\n"
 		"\n"
 		"Returns the total volume of the particle of this form factor's shape. \n"
 		"\n"
 		""},
 	 { "IFormFactorPolyhedron_radialExtension", _wrap_IFormFactorPolyhedron_radialExtension, METH_O, "\n"
 		"IFormFactorPolyhedron_radialExtension(IFormFactorPolyhedron self) -> double\n"
-		"double IFormFactorPolyhedron::radialExtension() const final\n"
+		"double IFormFactorPolyhedron::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -74184,14 +74184,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "IFormFactorPrism_bottomZ", _wrap_IFormFactorPrism_bottomZ, METH_VARARGS, "\n"
 		"IFormFactorPrism_bottomZ(IFormFactorPrism self, IRotation rotation) -> double\n"
-		"double IFormFactorPrism::bottomZ(const IRotation &rotation) const final\n"
+		"double IFormFactorPrism::bottomZ(const IRotation &rotation) const override\n"
 		"\n"
 		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
 		"\n"
 		""},
 	 { "IFormFactorPrism_topZ", _wrap_IFormFactorPrism_topZ, METH_VARARGS, "\n"
 		"IFormFactorPrism_topZ(IFormFactorPrism self, IRotation rotation) -> double\n"
-		"double IFormFactorPrism::topZ(const IRotation &rotation) const final\n"
+		"double IFormFactorPrism::topZ(const IRotation &rotation) const override\n"
 		"\n"
 		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
 		"\n"
@@ -74240,14 +74240,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "IProfileRipple_radialExtension", _wrap_IProfileRipple_radialExtension, METH_O, "\n"
 		"IProfileRipple_radialExtension(IProfileRipple self) -> double\n"
-		"double IProfileRipple::radialExtension() const final\n"
+		"double IProfileRipple::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "IProfileRipple_evaluate_for_q", _wrap_IProfileRipple_evaluate_for_q, METH_VARARGS, "\n"
 		"IProfileRipple_evaluate_for_q(IProfileRipple self, cvector_t q) -> complex_t\n"
-		"complex_t IProfileRipple::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t IProfileRipple::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -74280,7 +74280,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorAnisoPyramid_accept", _wrap_FormFactorAnisoPyramid_accept, METH_VARARGS, "\n"
 		"FormFactorAnisoPyramid_accept(FormFactorAnisoPyramid self, INodeVisitor * visitor)\n"
-		"void FormFactorAnisoPyramid::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorAnisoPyramid::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorAnisoPyramid_getLength", _wrap_FormFactorAnisoPyramid_getLength, METH_O, "\n"
@@ -74314,14 +74314,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorBox_clone", _wrap_FormFactorBox_clone, METH_O, "\n"
 		"FormFactorBox_clone(FormFactorBox self) -> FormFactorBox\n"
-		"FormFactorBox* FormFactorBox::clone() const final\n"
+		"FormFactorBox* FormFactorBox::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorBox_accept", _wrap_FormFactorBox_accept, METH_VARARGS, "\n"
 		"FormFactorBox_accept(FormFactorBox self, INodeVisitor * visitor)\n"
-		"void FormFactorBox::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorBox::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorBox_getLength", _wrap_FormFactorBox_getLength, METH_O, "\n"
@@ -74336,21 +74336,21 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorBox_volume", _wrap_FormFactorBox_volume, METH_O, "\n"
 		"FormFactorBox_volume(FormFactorBox self) -> double\n"
-		"double FormFactorBox::volume() const final\n"
+		"double FormFactorBox::volume() const override\n"
 		"\n"
 		"Returns the total volume of the particle of this form factor's shape. \n"
 		"\n"
 		""},
 	 { "FormFactorBox_radialExtension", _wrap_FormFactorBox_radialExtension, METH_O, "\n"
 		"FormFactorBox_radialExtension(FormFactorBox self) -> double\n"
-		"double FormFactorBox::radialExtension() const final\n"
+		"double FormFactorBox::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorBox_evaluate_for_q", _wrap_FormFactorBox_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorBox_evaluate_for_q(FormFactorBox self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorBox::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorBox::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -74373,7 +74373,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorCantellatedCube_accept", _wrap_FormFactorCantellatedCube_accept, METH_VARARGS, "\n"
 		"FormFactorCantellatedCube_accept(FormFactorCantellatedCube self, INodeVisitor * visitor)\n"
-		"void FormFactorCantellatedCube::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorCantellatedCube::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorCantellatedCube_getLength", _wrap_FormFactorCantellatedCube_getLength, METH_O, "\n"
@@ -74397,14 +74397,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorCone_clone", _wrap_FormFactorCone_clone, METH_O, "\n"
 		"FormFactorCone_clone(FormFactorCone self) -> FormFactorCone\n"
-		"FormFactorCone* FormFactorCone::clone() const final\n"
+		"FormFactorCone* FormFactorCone::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorCone_accept", _wrap_FormFactorCone_accept, METH_VARARGS, "\n"
 		"FormFactorCone_accept(FormFactorCone self, INodeVisitor * visitor)\n"
-		"void FormFactorCone::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorCone::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorCone_getHeight", _wrap_FormFactorCone_getHeight, METH_O, "\n"
@@ -74424,14 +74424,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorCone_radialExtension", _wrap_FormFactorCone_radialExtension, METH_O, "\n"
 		"FormFactorCone_radialExtension(FormFactorCone self) -> double\n"
-		"double FormFactorCone::radialExtension() const final\n"
+		"double FormFactorCone::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorCone_evaluate_for_q", _wrap_FormFactorCone_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorCone_evaluate_for_q(FormFactorCone self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorCone::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorCone::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -74454,7 +74454,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorCone6_accept", _wrap_FormFactorCone6_accept, METH_VARARGS, "\n"
 		"FormFactorCone6_accept(FormFactorCone6 self, INodeVisitor * visitor)\n"
-		"void FormFactorCone6::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorCone6::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorCone6_getBaseEdge", _wrap_FormFactorCone6_getBaseEdge, METH_O, "\n"
@@ -74483,14 +74483,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorCosineRippleBox_clone", _wrap_FormFactorCosineRippleBox_clone, METH_O, "\n"
 		"FormFactorCosineRippleBox_clone(FormFactorCosineRippleBox self) -> FormFactorCosineRippleBox\n"
-		"FormFactorCosineRippleBox * FormFactorCosineRippleBox::clone() const final\n"
+		"FormFactorCosineRippleBox * FormFactorCosineRippleBox::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorCosineRippleBox_accept", _wrap_FormFactorCosineRippleBox_accept, METH_VARARGS, "\n"
 		"FormFactorCosineRippleBox_accept(FormFactorCosineRippleBox self, INodeVisitor * visitor)\n"
-		"void FormFactorCosineRippleBox::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorCosineRippleBox::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "delete_FormFactorCosineRippleBox", _wrap_delete_FormFactorCosineRippleBox, METH_O, "delete_FormFactorCosineRippleBox(FormFactorCosineRippleBox self)"},
@@ -74504,14 +74504,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorCosineRippleGauss_clone", _wrap_FormFactorCosineRippleGauss_clone, METH_O, "\n"
 		"FormFactorCosineRippleGauss_clone(FormFactorCosineRippleGauss self) -> FormFactorCosineRippleGauss\n"
-		"FormFactorCosineRippleGauss * FormFactorCosineRippleGauss::clone() const final\n"
+		"FormFactorCosineRippleGauss * FormFactorCosineRippleGauss::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorCosineRippleGauss_accept", _wrap_FormFactorCosineRippleGauss_accept, METH_VARARGS, "\n"
 		"FormFactorCosineRippleGauss_accept(FormFactorCosineRippleGauss self, INodeVisitor * visitor)\n"
-		"void FormFactorCosineRippleGauss::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorCosineRippleGauss::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "delete_FormFactorCosineRippleGauss", _wrap_delete_FormFactorCosineRippleGauss, METH_O, "delete_FormFactorCosineRippleGauss(FormFactorCosineRippleGauss self)"},
@@ -74525,14 +74525,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorCosineRippleLorentz_clone", _wrap_FormFactorCosineRippleLorentz_clone, METH_O, "\n"
 		"FormFactorCosineRippleLorentz_clone(FormFactorCosineRippleLorentz self) -> FormFactorCosineRippleLorentz\n"
-		"FormFactorCosineRippleLorentz * FormFactorCosineRippleLorentz::clone() const final\n"
+		"FormFactorCosineRippleLorentz * FormFactorCosineRippleLorentz::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorCosineRippleLorentz_accept", _wrap_FormFactorCosineRippleLorentz_accept, METH_VARARGS, "\n"
 		"FormFactorCosineRippleLorentz_accept(FormFactorCosineRippleLorentz self, INodeVisitor * visitor)\n"
-		"void FormFactorCosineRippleLorentz::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorCosineRippleLorentz::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "delete_FormFactorCosineRippleLorentz", _wrap_delete_FormFactorCosineRippleLorentz, METH_O, "delete_FormFactorCosineRippleLorentz(FormFactorCosineRippleLorentz self)"},
@@ -74553,7 +74553,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorCuboctahedron_accept", _wrap_FormFactorCuboctahedron_accept, METH_VARARGS, "\n"
 		"FormFactorCuboctahedron_accept(FormFactorCuboctahedron self, INodeVisitor * visitor)\n"
-		"void FormFactorCuboctahedron::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorCuboctahedron::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorCuboctahedron_getLength", _wrap_FormFactorCuboctahedron_getLength, METH_O, "\n"
@@ -74587,14 +74587,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorCylinder_clone", _wrap_FormFactorCylinder_clone, METH_O, "\n"
 		"FormFactorCylinder_clone(FormFactorCylinder self) -> FormFactorCylinder\n"
-		"FormFactorCylinder* FormFactorCylinder::clone() const final\n"
+		"FormFactorCylinder* FormFactorCylinder::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorCylinder_accept", _wrap_FormFactorCylinder_accept, METH_VARARGS, "\n"
 		"FormFactorCylinder_accept(FormFactorCylinder self, INodeVisitor * visitor)\n"
-		"void FormFactorCylinder::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorCylinder::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorCylinder_getHeight", _wrap_FormFactorCylinder_getHeight, METH_O, "\n"
@@ -74609,14 +74609,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorCylinder_radialExtension", _wrap_FormFactorCylinder_radialExtension, METH_O, "\n"
 		"FormFactorCylinder_radialExtension(FormFactorCylinder self) -> double\n"
-		"double FormFactorCylinder::radialExtension() const final\n"
+		"double FormFactorCylinder::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorCylinder_evaluate_for_q", _wrap_FormFactorCylinder_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorCylinder_evaluate_for_q(FormFactorCylinder self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorCylinder::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorCylinder::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -74632,14 +74632,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorDodecahedron_clone", _wrap_FormFactorDodecahedron_clone, METH_O, "\n"
 		"FormFactorDodecahedron_clone(FormFactorDodecahedron self) -> FormFactorDodecahedron\n"
-		"FormFactorDodecahedron* FormFactorDodecahedron::clone() const final\n"
+		"FormFactorDodecahedron* FormFactorDodecahedron::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorDodecahedron_accept", _wrap_FormFactorDodecahedron_accept, METH_VARARGS, "\n"
 		"FormFactorDodecahedron_accept(FormFactorDodecahedron self, INodeVisitor * visitor)\n"
-		"void FormFactorDodecahedron::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorDodecahedron::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorDodecahedron_getEdge", _wrap_FormFactorDodecahedron_getEdge, METH_O, "\n"
@@ -74658,14 +74658,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorDot_clone", _wrap_FormFactorDot_clone, METH_O, "\n"
 		"FormFactorDot_clone(FormFactorDot self) -> FormFactorDot\n"
-		"FormFactorDot* FormFactorDot::clone() const final\n"
+		"FormFactorDot* FormFactorDot::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorDot_accept", _wrap_FormFactorDot_accept, METH_VARARGS, "\n"
 		"FormFactorDot_accept(FormFactorDot self, INodeVisitor * visitor)\n"
-		"void FormFactorDot::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorDot::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorDot_getRadius", _wrap_FormFactorDot_getRadius, METH_O, "\n"
@@ -74675,28 +74675,28 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorDot_radialExtension", _wrap_FormFactorDot_radialExtension, METH_O, "\n"
 		"FormFactorDot_radialExtension(FormFactorDot self) -> double\n"
-		"double FormFactorDot::radialExtension() const final\n"
+		"double FormFactorDot::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorDot_bottomZ", _wrap_FormFactorDot_bottomZ, METH_VARARGS, "\n"
 		"FormFactorDot_bottomZ(FormFactorDot self, IRotation arg2) -> double\n"
-		"double FormFactorDot::bottomZ(const IRotation &) const final\n"
+		"double FormFactorDot::bottomZ(const IRotation &) const override\n"
 		"\n"
 		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
 		"\n"
 		""},
 	 { "FormFactorDot_topZ", _wrap_FormFactorDot_topZ, METH_VARARGS, "\n"
 		"FormFactorDot_topZ(FormFactorDot self, IRotation arg2) -> double\n"
-		"double FormFactorDot::topZ(const IRotation &) const final\n"
+		"double FormFactorDot::topZ(const IRotation &) const override\n"
 		"\n"
 		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
 		"\n"
 		""},
 	 { "FormFactorDot_evaluate_for_q", _wrap_FormFactorDot_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorDot_evaluate_for_q(FormFactorDot self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorDot::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorDot::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -74719,7 +74719,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorEllipsoidalCylinder_accept", _wrap_FormFactorEllipsoidalCylinder_accept, METH_VARARGS, "\n"
 		"FormFactorEllipsoidalCylinder_accept(FormFactorEllipsoidalCylinder self, INodeVisitor * visitor)\n"
-		"void FormFactorEllipsoidalCylinder::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorEllipsoidalCylinder::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorEllipsoidalCylinder_getRadiusX", _wrap_FormFactorEllipsoidalCylinder_getRadiusX, METH_O, "\n"
@@ -74739,14 +74739,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorEllipsoidalCylinder_radialExtension", _wrap_FormFactorEllipsoidalCylinder_radialExtension, METH_O, "\n"
 		"FormFactorEllipsoidalCylinder_radialExtension(FormFactorEllipsoidalCylinder self) -> double\n"
-		"double FormFactorEllipsoidalCylinder::radialExtension() const final\n"
+		"double FormFactorEllipsoidalCylinder::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorEllipsoidalCylinder_evaluate_for_q", _wrap_FormFactorEllipsoidalCylinder_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorEllipsoidalCylinder_evaluate_for_q(FormFactorEllipsoidalCylinder self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorEllipsoidalCylinder::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorEllipsoidalCylinder::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -74769,7 +74769,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorFullSphere_accept", _wrap_FormFactorFullSphere_accept, METH_VARARGS, "\n"
 		"FormFactorFullSphere_accept(FormFactorFullSphere self, INodeVisitor * visitor)\n"
-		"void FormFactorFullSphere::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorFullSphere::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorFullSphere_getRadius", _wrap_FormFactorFullSphere_getRadius, METH_O, "\n"
@@ -74779,28 +74779,28 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorFullSphere_radialExtension", _wrap_FormFactorFullSphere_radialExtension, METH_O, "\n"
 		"FormFactorFullSphere_radialExtension(FormFactorFullSphere self) -> double\n"
-		"double FormFactorFullSphere::radialExtension() const final\n"
+		"double FormFactorFullSphere::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorFullSphere_bottomZ", _wrap_FormFactorFullSphere_bottomZ, METH_VARARGS, "\n"
 		"FormFactorFullSphere_bottomZ(FormFactorFullSphere self, IRotation rotation) -> double\n"
-		"double FormFactorFullSphere::bottomZ(const IRotation &rotation) const final\n"
+		"double FormFactorFullSphere::bottomZ(const IRotation &rotation) const override\n"
 		"\n"
 		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
 		"\n"
 		""},
 	 { "FormFactorFullSphere_topZ", _wrap_FormFactorFullSphere_topZ, METH_VARARGS, "\n"
 		"FormFactorFullSphere_topZ(FormFactorFullSphere self, IRotation rotation) -> double\n"
-		"double FormFactorFullSphere::topZ(const IRotation &rotation) const final\n"
+		"double FormFactorFullSphere::topZ(const IRotation &rotation) const override\n"
 		"\n"
 		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
 		"\n"
 		""},
 	 { "FormFactorFullSphere_evaluate_for_q", _wrap_FormFactorFullSphere_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorFullSphere_evaluate_for_q(FormFactorFullSphere self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorFullSphere::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorFullSphere::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -74823,7 +74823,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorFullSpheroid_accept", _wrap_FormFactorFullSpheroid_accept, METH_VARARGS, "\n"
 		"FormFactorFullSpheroid_accept(FormFactorFullSpheroid self, INodeVisitor * visitor)\n"
-		"void FormFactorFullSpheroid::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorFullSpheroid::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorFullSpheroid_getHeight", _wrap_FormFactorFullSpheroid_getHeight, METH_O, "\n"
@@ -74838,14 +74838,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorFullSpheroid_radialExtension", _wrap_FormFactorFullSpheroid_radialExtension, METH_O, "\n"
 		"FormFactorFullSpheroid_radialExtension(FormFactorFullSpheroid self) -> double\n"
-		"double FormFactorFullSpheroid::radialExtension() const final\n"
+		"double FormFactorFullSpheroid::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorFullSpheroid_evaluate_for_q", _wrap_FormFactorFullSpheroid_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorFullSpheroid_evaluate_for_q(FormFactorFullSpheroid self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorFullSpheroid::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorFullSpheroid::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -74873,7 +74873,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorHemiEllipsoid_accept", _wrap_FormFactorHemiEllipsoid_accept, METH_VARARGS, "\n"
 		"FormFactorHemiEllipsoid_accept(FormFactorHemiEllipsoid self, INodeVisitor * visitor)\n"
-		"void FormFactorHemiEllipsoid::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorHemiEllipsoid::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorHemiEllipsoid_getHeight", _wrap_FormFactorHemiEllipsoid_getHeight, METH_O, "\n"
@@ -74893,14 +74893,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorHemiEllipsoid_radialExtension", _wrap_FormFactorHemiEllipsoid_radialExtension, METH_O, "\n"
 		"FormFactorHemiEllipsoid_radialExtension(FormFactorHemiEllipsoid self) -> double\n"
-		"double FormFactorHemiEllipsoid::radialExtension() const final\n"
+		"double FormFactorHemiEllipsoid::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorHemiEllipsoid_evaluate_for_q", _wrap_FormFactorHemiEllipsoid_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorHemiEllipsoid_evaluate_for_q(FormFactorHemiEllipsoid self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorHemiEllipsoid::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorHemiEllipsoid::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -74922,19 +74922,19 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorHollowSphere_accept", _wrap_FormFactorHollowSphere_accept, METH_VARARGS, "\n"
 		"FormFactorHollowSphere_accept(FormFactorHollowSphere self, INodeVisitor * visitor)\n"
-		"void FormFactorHollowSphere::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorHollowSphere::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorHollowSphere_radialExtension", _wrap_FormFactorHollowSphere_radialExtension, METH_O, "\n"
 		"FormFactorHollowSphere_radialExtension(FormFactorHollowSphere self) -> double\n"
-		"double FormFactorHollowSphere::radialExtension() const final\n"
+		"double FormFactorHollowSphere::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorHollowSphere_evaluate_for_q", _wrap_FormFactorHollowSphere_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorHollowSphere_evaluate_for_q(FormFactorHollowSphere self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorHollowSphere::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorHollowSphere::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -74950,14 +74950,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorIcosahedron_clone", _wrap_FormFactorIcosahedron_clone, METH_O, "\n"
 		"FormFactorIcosahedron_clone(FormFactorIcosahedron self) -> FormFactorIcosahedron\n"
-		"FormFactorIcosahedron* FormFactorIcosahedron::clone() const final\n"
+		"FormFactorIcosahedron* FormFactorIcosahedron::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorIcosahedron_accept", _wrap_FormFactorIcosahedron_accept, METH_VARARGS, "\n"
 		"FormFactorIcosahedron_accept(FormFactorIcosahedron self, INodeVisitor * visitor)\n"
-		"void FormFactorIcosahedron::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorIcosahedron::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorIcosahedron_getEdge", _wrap_FormFactorIcosahedron_getEdge, METH_O, "\n"
@@ -74983,7 +74983,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorLongBoxGauss_accept", _wrap_FormFactorLongBoxGauss_accept, METH_VARARGS, "\n"
 		"FormFactorLongBoxGauss_accept(FormFactorLongBoxGauss self, INodeVisitor * visitor)\n"
-		"void FormFactorLongBoxGauss::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorLongBoxGauss::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorLongBoxGauss_getLength", _wrap_FormFactorLongBoxGauss_getLength, METH_O, "\n"
@@ -75003,14 +75003,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorLongBoxGauss_radialExtension", _wrap_FormFactorLongBoxGauss_radialExtension, METH_O, "\n"
 		"FormFactorLongBoxGauss_radialExtension(FormFactorLongBoxGauss self) -> double\n"
-		"double FormFactorLongBoxGauss::radialExtension() const final\n"
+		"double FormFactorLongBoxGauss::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorLongBoxGauss_evaluate_for_q", _wrap_FormFactorLongBoxGauss_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorLongBoxGauss_evaluate_for_q(FormFactorLongBoxGauss self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorLongBoxGauss::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorLongBoxGauss::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -75033,7 +75033,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorLongBoxLorentz_accept", _wrap_FormFactorLongBoxLorentz_accept, METH_VARARGS, "\n"
 		"FormFactorLongBoxLorentz_accept(FormFactorLongBoxLorentz self, INodeVisitor * visitor)\n"
-		"void FormFactorLongBoxLorentz::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorLongBoxLorentz::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorLongBoxLorentz_getLength", _wrap_FormFactorLongBoxLorentz_getLength, METH_O, "\n"
@@ -75053,14 +75053,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorLongBoxLorentz_radialExtension", _wrap_FormFactorLongBoxLorentz_radialExtension, METH_O, "\n"
 		"FormFactorLongBoxLorentz_radialExtension(FormFactorLongBoxLorentz self) -> double\n"
-		"double FormFactorLongBoxLorentz::radialExtension() const final\n"
+		"double FormFactorLongBoxLorentz::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorLongBoxLorentz_evaluate_for_q", _wrap_FormFactorLongBoxLorentz_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorLongBoxLorentz_evaluate_for_q(FormFactorLongBoxLorentz self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorLongBoxLorentz::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorLongBoxLorentz::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -75076,14 +75076,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorPrism3_clone", _wrap_FormFactorPrism3_clone, METH_O, "\n"
 		"FormFactorPrism3_clone(FormFactorPrism3 self) -> FormFactorPrism3\n"
-		"FormFactorPrism3* FormFactorPrism3::clone() const final\n"
+		"FormFactorPrism3* FormFactorPrism3::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorPrism3_accept", _wrap_FormFactorPrism3_accept, METH_VARARGS, "\n"
 		"FormFactorPrism3_accept(FormFactorPrism3 self, INodeVisitor * visitor)\n"
-		"void FormFactorPrism3::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorPrism3::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorPrism3_getBaseEdge", _wrap_FormFactorPrism3_getBaseEdge, METH_O, "\n"
@@ -75102,14 +75102,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorPrism6_clone", _wrap_FormFactorPrism6_clone, METH_O, "\n"
 		"FormFactorPrism6_clone(FormFactorPrism6 self) -> FormFactorPrism6\n"
-		"FormFactorPrism6* FormFactorPrism6::clone() const final\n"
+		"FormFactorPrism6* FormFactorPrism6::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorPrism6_accept", _wrap_FormFactorPrism6_accept, METH_VARARGS, "\n"
 		"FormFactorPrism6_accept(FormFactorPrism6 self, INodeVisitor * visitor)\n"
-		"void FormFactorPrism6::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorPrism6::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorPrism6_getBaseEdge", _wrap_FormFactorPrism6_getBaseEdge, METH_O, "\n"
@@ -75135,7 +75135,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorPyramid_accept", _wrap_FormFactorPyramid_accept, METH_VARARGS, "\n"
 		"FormFactorPyramid_accept(FormFactorPyramid self, INodeVisitor * visitor)\n"
-		"void FormFactorPyramid::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorPyramid::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorPyramid_getHeight", _wrap_FormFactorPyramid_getHeight, METH_O, "\n"
@@ -75164,14 +75164,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorSawtoothRippleBox_clone", _wrap_FormFactorSawtoothRippleBox_clone, METH_O, "\n"
 		"FormFactorSawtoothRippleBox_clone(FormFactorSawtoothRippleBox self) -> FormFactorSawtoothRippleBox\n"
-		"FormFactorSawtoothRippleBox * FormFactorSawtoothRippleBox::clone() const final\n"
+		"FormFactorSawtoothRippleBox * FormFactorSawtoothRippleBox::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorSawtoothRippleBox_accept", _wrap_FormFactorSawtoothRippleBox_accept, METH_VARARGS, "\n"
 		"FormFactorSawtoothRippleBox_accept(FormFactorSawtoothRippleBox self, INodeVisitor * visitor)\n"
-		"void FormFactorSawtoothRippleBox::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorSawtoothRippleBox::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "delete_FormFactorSawtoothRippleBox", _wrap_delete_FormFactorSawtoothRippleBox, METH_O, "delete_FormFactorSawtoothRippleBox(FormFactorSawtoothRippleBox self)"},
@@ -75185,14 +75185,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorSawtoothRippleGauss_clone", _wrap_FormFactorSawtoothRippleGauss_clone, METH_O, "\n"
 		"FormFactorSawtoothRippleGauss_clone(FormFactorSawtoothRippleGauss self) -> FormFactorSawtoothRippleGauss\n"
-		"FormFactorSawtoothRippleGauss * FormFactorSawtoothRippleGauss::clone() const final\n"
+		"FormFactorSawtoothRippleGauss * FormFactorSawtoothRippleGauss::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorSawtoothRippleGauss_accept", _wrap_FormFactorSawtoothRippleGauss_accept, METH_VARARGS, "\n"
 		"FormFactorSawtoothRippleGauss_accept(FormFactorSawtoothRippleGauss self, INodeVisitor * visitor)\n"
-		"void FormFactorSawtoothRippleGauss::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorSawtoothRippleGauss::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "delete_FormFactorSawtoothRippleGauss", _wrap_delete_FormFactorSawtoothRippleGauss, METH_O, "delete_FormFactorSawtoothRippleGauss(FormFactorSawtoothRippleGauss self)"},
@@ -75206,14 +75206,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorSawtoothRippleLorentz_clone", _wrap_FormFactorSawtoothRippleLorentz_clone, METH_O, "\n"
 		"FormFactorSawtoothRippleLorentz_clone(FormFactorSawtoothRippleLorentz self) -> FormFactorSawtoothRippleLorentz\n"
-		"FormFactorSawtoothRippleLorentz * FormFactorSawtoothRippleLorentz::clone() const final\n"
+		"FormFactorSawtoothRippleLorentz * FormFactorSawtoothRippleLorentz::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorSawtoothRippleLorentz_accept", _wrap_FormFactorSawtoothRippleLorentz_accept, METH_VARARGS, "\n"
 		"FormFactorSawtoothRippleLorentz_accept(FormFactorSawtoothRippleLorentz self, INodeVisitor * visitor)\n"
-		"void FormFactorSawtoothRippleLorentz::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorSawtoothRippleLorentz::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "delete_FormFactorSawtoothRippleLorentz", _wrap_delete_FormFactorSawtoothRippleLorentz, METH_O, "delete_FormFactorSawtoothRippleLorentz(FormFactorSawtoothRippleLorentz self)"},
@@ -75234,7 +75234,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorTetrahedron_accept", _wrap_FormFactorTetrahedron_accept, METH_VARARGS, "\n"
 		"FormFactorTetrahedron_accept(FormFactorTetrahedron self, INodeVisitor * visitor)\n"
-		"void FormFactorTetrahedron::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorTetrahedron::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorTetrahedron_getBaseEdge", _wrap_FormFactorTetrahedron_getBaseEdge, METH_O, "\n"
@@ -75270,7 +75270,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorTruncatedCube_accept", _wrap_FormFactorTruncatedCube_accept, METH_VARARGS, "\n"
 		"FormFactorTruncatedCube_accept(FormFactorTruncatedCube self, INodeVisitor * visitor)\n"
-		"void FormFactorTruncatedCube::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorTruncatedCube::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorTruncatedCube_getLength", _wrap_FormFactorTruncatedCube_getLength, METH_O, "\n"
@@ -75301,7 +75301,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorTruncatedSphere_accept", _wrap_FormFactorTruncatedSphere_accept, METH_VARARGS, "\n"
 		"FormFactorTruncatedSphere_accept(FormFactorTruncatedSphere self, INodeVisitor * visitor)\n"
-		"void FormFactorTruncatedSphere::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorTruncatedSphere::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorTruncatedSphere_getHeight", _wrap_FormFactorTruncatedSphere_getHeight, METH_O, "\n"
@@ -75321,14 +75321,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorTruncatedSphere_radialExtension", _wrap_FormFactorTruncatedSphere_radialExtension, METH_O, "\n"
 		"FormFactorTruncatedSphere_radialExtension(FormFactorTruncatedSphere self) -> double\n"
-		"double FormFactorTruncatedSphere::radialExtension() const final\n"
+		"double FormFactorTruncatedSphere::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorTruncatedSphere_evaluate_for_q", _wrap_FormFactorTruncatedSphere_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorTruncatedSphere_evaluate_for_q(FormFactorTruncatedSphere self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorTruncatedSphere::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorTruncatedSphere::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Complex form factor. \n"
 		"\n"
@@ -75351,7 +75351,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorTruncatedSpheroid_accept", _wrap_FormFactorTruncatedSpheroid_accept, METH_VARARGS, "\n"
 		"FormFactorTruncatedSpheroid_accept(FormFactorTruncatedSpheroid self, INodeVisitor * visitor)\n"
-		"void FormFactorTruncatedSpheroid::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorTruncatedSpheroid::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorTruncatedSpheroid_getRadius", _wrap_FormFactorTruncatedSpheroid_getRadius, METH_O, "\n"
@@ -75376,14 +75376,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorTruncatedSpheroid_radialExtension", _wrap_FormFactorTruncatedSpheroid_radialExtension, METH_O, "\n"
 		"FormFactorTruncatedSpheroid_radialExtension(FormFactorTruncatedSpheroid self) -> double\n"
-		"double FormFactorTruncatedSpheroid::radialExtension() const final\n"
+		"double FormFactorTruncatedSpheroid::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorTruncatedSpheroid_evaluate_for_q", _wrap_FormFactorTruncatedSpheroid_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorTruncatedSpheroid_evaluate_for_q(FormFactorTruncatedSpheroid self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorTruncatedSpheroid::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorTruncatedSpheroid::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -75399,14 +75399,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorGaussSphere_clone", _wrap_FormFactorGaussSphere_clone, METH_O, "\n"
 		"FormFactorGaussSphere_clone(FormFactorGaussSphere self) -> FormFactorGaussSphere\n"
-		"FormFactorGaussSphere* FormFactorGaussSphere::clone() const final\n"
+		"FormFactorGaussSphere* FormFactorGaussSphere::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorGaussSphere_accept", _wrap_FormFactorGaussSphere_accept, METH_VARARGS, "\n"
 		"FormFactorGaussSphere_accept(FormFactorGaussSphere self, INodeVisitor * visitor)\n"
-		"void FormFactorGaussSphere::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorGaussSphere::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorGaussSphere_getMeanRadius", _wrap_FormFactorGaussSphere_getMeanRadius, METH_O, "\n"
@@ -75416,14 +75416,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorGaussSphere_radialExtension", _wrap_FormFactorGaussSphere_radialExtension, METH_O, "\n"
 		"FormFactorGaussSphere_radialExtension(FormFactorGaussSphere self) -> double\n"
-		"double FormFactorGaussSphere::radialExtension() const final\n"
+		"double FormFactorGaussSphere::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorGaussSphere_evaluate_for_q", _wrap_FormFactorGaussSphere_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorGaussSphere_evaluate_for_q(FormFactorGaussSphere self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorGaussSphere::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorGaussSphere::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -75446,19 +75446,19 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorSphereGaussianRadius_accept", _wrap_FormFactorSphereGaussianRadius_accept, METH_VARARGS, "\n"
 		"FormFactorSphereGaussianRadius_accept(FormFactorSphereGaussianRadius self, INodeVisitor * visitor)\n"
-		"void FormFactorSphereGaussianRadius::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorSphereGaussianRadius::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorSphereGaussianRadius_radialExtension", _wrap_FormFactorSphereGaussianRadius_radialExtension, METH_O, "\n"
 		"FormFactorSphereGaussianRadius_radialExtension(FormFactorSphereGaussianRadius self) -> double\n"
-		"double FormFactorSphereGaussianRadius::radialExtension() const final\n"
+		"double FormFactorSphereGaussianRadius::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorSphereGaussianRadius_evaluate_for_q", _wrap_FormFactorSphereGaussianRadius_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorSphereGaussianRadius_evaluate_for_q(FormFactorSphereGaussianRadius self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorSphereGaussianRadius::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorSphereGaussianRadius::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -75474,26 +75474,26 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorSphereLogNormalRadius_clone", _wrap_FormFactorSphereLogNormalRadius_clone, METH_O, "\n"
 		"FormFactorSphereLogNormalRadius_clone(FormFactorSphereLogNormalRadius self) -> FormFactorSphereLogNormalRadius\n"
-		"FormFactorSphereLogNormalRadius * FormFactorSphereLogNormalRadius::clone() const final\n"
+		"FormFactorSphereLogNormalRadius * FormFactorSphereLogNormalRadius::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorSphereLogNormalRadius_accept", _wrap_FormFactorSphereLogNormalRadius_accept, METH_VARARGS, "\n"
 		"FormFactorSphereLogNormalRadius_accept(FormFactorSphereLogNormalRadius self, INodeVisitor * visitor)\n"
-		"void FormFactorSphereLogNormalRadius::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorSphereLogNormalRadius::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorSphereLogNormalRadius_radialExtension", _wrap_FormFactorSphereLogNormalRadius_radialExtension, METH_O, "\n"
 		"FormFactorSphereLogNormalRadius_radialExtension(FormFactorSphereLogNormalRadius self) -> double\n"
-		"double FormFactorSphereLogNormalRadius::radialExtension() const final\n"
+		"double FormFactorSphereLogNormalRadius::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorSphereLogNormalRadius_evaluate_for_q", _wrap_FormFactorSphereLogNormalRadius_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorSphereLogNormalRadius_evaluate_for_q(FormFactorSphereLogNormalRadius self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorSphereLogNormalRadius::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorSphereLogNormalRadius::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -75692,27 +75692,27 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "BasicLattice2D_accept", _wrap_BasicLattice2D_accept, METH_VARARGS, "\n"
 		"BasicLattice2D_accept(BasicLattice2D self, INodeVisitor * visitor)\n"
-		"void BasicLattice2D::accept(INodeVisitor *visitor) const final\n"
+		"void BasicLattice2D::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "BasicLattice2D_length1", _wrap_BasicLattice2D_length1, METH_O, "\n"
 		"BasicLattice2D_length1(BasicLattice2D self) -> double\n"
-		"virtual double BasicLattice2D::length1() const\n"
+		"double BasicLattice2D::length1() const override\n"
 		"\n"
 		""},
 	 { "BasicLattice2D_length2", _wrap_BasicLattice2D_length2, METH_O, "\n"
 		"BasicLattice2D_length2(BasicLattice2D self) -> double\n"
-		"virtual double BasicLattice2D::length2() const\n"
+		"double BasicLattice2D::length2() const override\n"
 		"\n"
 		""},
 	 { "BasicLattice2D_latticeAngle", _wrap_BasicLattice2D_latticeAngle, METH_O, "\n"
 		"BasicLattice2D_latticeAngle(BasicLattice2D self) -> double\n"
-		"virtual double BasicLattice2D::latticeAngle() const\n"
+		"double BasicLattice2D::latticeAngle() const override\n"
 		"\n"
 		""},
 	 { "BasicLattice2D_unitCellArea", _wrap_BasicLattice2D_unitCellArea, METH_O, "\n"
 		"BasicLattice2D_unitCellArea(BasicLattice2D self) -> double\n"
-		"double BasicLattice2D::unitCellArea() const\n"
+		"double BasicLattice2D::unitCellArea() const override\n"
 		"\n"
 		""},
 	 { "delete_BasicLattice2D", _wrap_delete_BasicLattice2D, METH_O, "delete_BasicLattice2D(BasicLattice2D self)"},
@@ -75730,27 +75730,27 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "SquareLattice2D_accept", _wrap_SquareLattice2D_accept, METH_VARARGS, "\n"
 		"SquareLattice2D_accept(SquareLattice2D self, INodeVisitor * visitor)\n"
-		"void SquareLattice2D::accept(INodeVisitor *visitor) const final\n"
+		"void SquareLattice2D::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "SquareLattice2D_length1", _wrap_SquareLattice2D_length1, METH_O, "\n"
 		"SquareLattice2D_length1(SquareLattice2D self) -> double\n"
-		"virtual double SquareLattice2D::length1() const\n"
+		"double SquareLattice2D::length1() const override\n"
 		"\n"
 		""},
 	 { "SquareLattice2D_length2", _wrap_SquareLattice2D_length2, METH_O, "\n"
 		"SquareLattice2D_length2(SquareLattice2D self) -> double\n"
-		"virtual double SquareLattice2D::length2() const\n"
+		"double SquareLattice2D::length2() const override\n"
 		"\n"
 		""},
 	 { "SquareLattice2D_latticeAngle", _wrap_SquareLattice2D_latticeAngle, METH_O, "\n"
 		"SquareLattice2D_latticeAngle(SquareLattice2D self) -> double\n"
-		"double SquareLattice2D::latticeAngle() const\n"
+		"double SquareLattice2D::latticeAngle() const override\n"
 		"\n"
 		""},
 	 { "SquareLattice2D_unitCellArea", _wrap_SquareLattice2D_unitCellArea, METH_O, "\n"
 		"SquareLattice2D_unitCellArea(SquareLattice2D self) -> double\n"
-		"double SquareLattice2D::unitCellArea() const\n"
+		"double SquareLattice2D::unitCellArea() const override\n"
 		"\n"
 		""},
 	 { "delete_SquareLattice2D", _wrap_delete_SquareLattice2D, METH_O, "delete_SquareLattice2D(SquareLattice2D self)"},
@@ -75768,27 +75768,27 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "HexagonalLattice2D_accept", _wrap_HexagonalLattice2D_accept, METH_VARARGS, "\n"
 		"HexagonalLattice2D_accept(HexagonalLattice2D self, INodeVisitor * visitor)\n"
-		"void HexagonalLattice2D::accept(INodeVisitor *visitor) const final\n"
+		"void HexagonalLattice2D::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "HexagonalLattice2D_length1", _wrap_HexagonalLattice2D_length1, METH_O, "\n"
 		"HexagonalLattice2D_length1(HexagonalLattice2D self) -> double\n"
-		"virtual double HexagonalLattice2D::length1() const\n"
+		"double HexagonalLattice2D::length1() const override\n"
 		"\n"
 		""},
 	 { "HexagonalLattice2D_length2", _wrap_HexagonalLattice2D_length2, METH_O, "\n"
 		"HexagonalLattice2D_length2(HexagonalLattice2D self) -> double\n"
-		"virtual double HexagonalLattice2D::length2() const\n"
+		"double HexagonalLattice2D::length2() const override\n"
 		"\n"
 		""},
 	 { "HexagonalLattice2D_latticeAngle", _wrap_HexagonalLattice2D_latticeAngle, METH_O, "\n"
 		"HexagonalLattice2D_latticeAngle(HexagonalLattice2D self) -> double\n"
-		"double HexagonalLattice2D::latticeAngle() const\n"
+		"double HexagonalLattice2D::latticeAngle() const override\n"
 		"\n"
 		""},
 	 { "HexagonalLattice2D_unitCellArea", _wrap_HexagonalLattice2D_unitCellArea, METH_O, "\n"
 		"HexagonalLattice2D_unitCellArea(HexagonalLattice2D self) -> double\n"
-		"double HexagonalLattice2D::unitCellArea() const\n"
+		"double HexagonalLattice2D::unitCellArea() const override\n"
 		"\n"
 		""},
 	 { "delete_HexagonalLattice2D", _wrap_delete_HexagonalLattice2D, METH_O, "delete_HexagonalLattice2D(HexagonalLattice2D self)"},
-- 
GitLab


From 00d2a26a17b17d2bbdb2f3572edec30cdc30d935 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Fri, 23 Apr 2021 21:40:40 +0200
Subject: [PATCH 4/4] replace 'final' by 'override', and fix missing
 'override's

---
 Device/Instrument/Instrument.h                |   2 +-
 .../ConvolutionDetectorResolution.h           |   7 +-
 Device/Resolution/IDetectorResolution.h       |   3 +-
 .../Resolution/ResolutionFunction2DGaussian.h |   6 +-
 GUI/coregui/Models/DomainObjectBuilder.cpp    |   2 +-
 GUI/coregui/Models/InstrumentItems.cpp        |   2 +-
 Param/Distrib/Distributions.h                 |   3 +-
 Sample/Aggregate/IInterferenceFunction.h      |   2 +-
 Sample/Correlations/FTDecay1D.h               |  10 +-
 Sample/Correlations/FTDecay2D.h               |   9 +-
 Sample/HardParticle/FormFactorAnisoPyramid.h  |   2 +-
 .../HardParticle/FormFactorCantellatedCube.h  |   2 +-
 Sample/HardParticle/FormFactorCone.h          |   5 +-
 Sample/HardParticle/FormFactorCone6.h         |   2 +-
 Sample/HardParticle/FormFactorCuboctahedron.h |   2 +-
 Sample/HardParticle/FormFactorCylinder.h      |   5 +-
 .../FormFactorEllipsoidalCylinder.h           |   2 +-
 Sample/HardParticle/FormFactorFullSphere.h    |   2 +-
 Sample/HardParticle/FormFactorFullSpheroid.h  |   2 +-
 Sample/HardParticle/FormFactorHemiEllipsoid.h |   2 +-
 Sample/HardParticle/FormFactorHollowSphere.h  |   2 +-
 Sample/HardParticle/FormFactorLongBoxGauss.h  |   2 +-
 .../HardParticle/FormFactorLongBoxLorentz.h   |   2 +-
 Sample/HardParticle/FormFactorPyramid.h       |   2 +-
 Sample/HardParticle/FormFactorTetrahedron.h   |   2 +-
 Sample/HardParticle/FormFactorTruncatedCube.h |   2 +-
 .../HardParticle/FormFactorTruncatedSphere.h  |   2 +-
 .../FormFactorTruncatedSpheroid.h             |   2 +-
 Sample/Lattice/Lattice2D.h                    |  13 +-
 .../FormFactorDecoratorPositionFactor.h       |   2 +-
 Sample/Slice/LayerInterface.h                 |   6 +-
 Sample/SoftParticle/FormFactorGauss.h         |   7 +-
 .../FormFactorSphereGaussianRadius.h          |   2 +-
 Tests/UnitTests/Core/Sample/INodeTest.cpp     |   2 +-
 Tests/UnitTests/Core/Sample/Lattice2DTest.cpp |   2 +-
 .../Core/Sample/SampleProviderTest.cpp        |   2 +-
 auto/Wrap/doxygenDevice.i                     |  24 +--
 auto/Wrap/doxygenParam.i                      |   8 +-
 auto/Wrap/doxygenSample.i                     |  70 ++++-----
 auto/Wrap/libBornAgainDevice.py               |  34 ++---
 auto/Wrap/libBornAgainDevice_wrap.cpp         | 142 +++++++++---------
 auto/Wrap/libBornAgainParam.py                |   8 +-
 auto/Wrap/libBornAgainParam_wrap.cpp          |   8 +-
 auto/Wrap/libBornAgainSample.py               |  62 ++++----
 auto/Wrap/libBornAgainSample_wrap.cpp         |  62 ++++----
 45 files changed, 275 insertions(+), 267 deletions(-)

diff --git a/Device/Instrument/Instrument.h b/Device/Instrument/Instrument.h
index 5e53de265e4..3ee6f560bad 100644
--- a/Device/Instrument/Instrument.h
+++ b/Device/Instrument/Instrument.h
@@ -58,7 +58,7 @@ public:
     //! init detector with beam settings
     void initDetector();
 
-    std::vector<const INode*> getChildren() const;
+    std::vector<const INode*> getChildren() const override;
 
 protected:
     Beam m_beam;
diff --git a/Device/Resolution/ConvolutionDetectorResolution.h b/Device/Resolution/ConvolutionDetectorResolution.h
index 1cbc74895f4..20d74046443 100644
--- a/Device/Resolution/ConvolutionDetectorResolution.h
+++ b/Device/Resolution/ConvolutionDetectorResolution.h
@@ -40,16 +40,17 @@ public:
 
     virtual ~ConvolutionDetectorResolution();
 
+    ConvolutionDetectorResolution* clone() const override;
+
     //! Convolve given intensities with the encapsulated resolution.
-    virtual void applyDetectorResolution(OutputData<double>* p_intensity_map) const;
+    void applyDetectorResolution(OutputData<double>* p_intensity_map) const override;
 
-    virtual ConvolutionDetectorResolution* clone() const;
 
     void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     const IResolutionFunction2D* getResolutionFunction2D() const;
 
-    std::vector<const INode*> getChildren() const;
+    std::vector<const INode*> getChildren() const override;
 
 protected:
     ConvolutionDetectorResolution(const ConvolutionDetectorResolution& other);
diff --git a/Device/Resolution/IDetectorResolution.h b/Device/Resolution/IDetectorResolution.h
index 9226d4bbe48..b57da5bad75 100644
--- a/Device/Resolution/IDetectorResolution.h
+++ b/Device/Resolution/IDetectorResolution.h
@@ -26,13 +26,14 @@
 class IDetectorResolution : public ICloneable, public INode {
 public:
     virtual ~IDetectorResolution() {}
+    IDetectorResolution* clone() const override = 0;
+
     //! Apply the resolution function to the intensity data
     virtual void applyDetectorResolution(OutputData<double>* p_intensity_map) const = 0;
 #ifndef SWIG
     //! Applies the detector resolution to the matrix-valued intensity data
     void applyDetectorResolutionPol(OutputData<Eigen::Matrix2d>* p_matrix_intensity) const;
 #endif
-    virtual IDetectorResolution* clone() const = 0;
 };
 
 #endif // BORNAGAIN_DEVICE_RESOLUTION_IDETECTORRESOLUTION_H
diff --git a/Device/Resolution/ResolutionFunction2DGaussian.h b/Device/Resolution/ResolutionFunction2DGaussian.h
index 2ce7bdc1f26..a835c904023 100644
--- a/Device/Resolution/ResolutionFunction2DGaussian.h
+++ b/Device/Resolution/ResolutionFunction2DGaussian.h
@@ -24,15 +24,15 @@ class ResolutionFunction2DGaussian : public IResolutionFunction2D {
 public:
     ResolutionFunction2DGaussian(double sigma_x, double sigma_y);
 
-    virtual double evaluateCDF(double x, double y) const;
-
-    ResolutionFunction2DGaussian* clone() const
+    ResolutionFunction2DGaussian* clone() const override
     {
         return new ResolutionFunction2DGaussian(m_sigma_x, m_sigma_y);
     }
 
     void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
+    double evaluateCDF(double x, double y) const override;
+
     double getSigmaX() const { return m_sigma_x; }
     double getSigmaY() const { return m_sigma_y; }
 
diff --git a/GUI/coregui/Models/DomainObjectBuilder.cpp b/GUI/coregui/Models/DomainObjectBuilder.cpp
index de7c3e3671b..f253359b7b6 100644
--- a/GUI/coregui/Models/DomainObjectBuilder.cpp
+++ b/GUI/coregui/Models/DomainObjectBuilder.cpp
@@ -19,8 +19,8 @@
 #include "Device/Detector/UnitConverter2D.h"
 #include "GUI/coregui/Models/AxesItems.h"
 #include "GUI/coregui/Models/ComboProperty.h"
-#include "GUI/coregui/Models/InterferenceFunctionItems.h"
 #include "GUI/coregui/Models/InstrumentItems.h"
+#include "GUI/coregui/Models/InterferenceFunctionItems.h"
 #include "GUI/coregui/Models/LayerItem.h"
 #include "GUI/coregui/Models/ParticleDistributionItem.h"
 #include "GUI/coregui/Models/ParticleLayoutItem.h"
diff --git a/GUI/coregui/Models/InstrumentItems.cpp b/GUI/coregui/Models/InstrumentItems.cpp
index b12bf5eedc3..2c6d99ed8f2 100644
--- a/GUI/coregui/Models/InstrumentItems.cpp
+++ b/GUI/coregui/Models/InstrumentItems.cpp
@@ -363,7 +363,7 @@ std::unique_ptr<IUnitConverter> OffSpecularInstrumentItem::createUnitConverter()
     auto axis_item = item<BasicAxisItem>(OffSpecularInstrumentItem::P_ALPHA_AXIS);
     const auto detector2d = dynamic_cast<const IDetector2D*>(instrument->getDetector());
     return std::make_unique<OffSpecularConverter>(*detector2d, instrument->beam(),
-                                                      *axis_item->createAxis(Units::deg));
+                                                  *axis_item->createAxis(Units::deg));
 }
 
 //  ************************************************************************************************
diff --git a/Param/Distrib/Distributions.h b/Param/Distrib/Distributions.h
index b38d62bdd2a..feda0bba0cd 100644
--- a/Param/Distrib/Distributions.h
+++ b/Param/Distrib/Distributions.h
@@ -34,8 +34,7 @@ class ParameterSample;
 class IDistribution1D : public ICloneable, public INode {
 public:
     IDistribution1D(const NodeMeta& meta, const std::vector<double>& PValues);
-
-    virtual IDistribution1D* clone() const = 0;
+    IDistribution1D* clone() const override = 0;
 
     //! Returns the distribution-specific probability density for value x.
     virtual double probabilityDensity(double x) const = 0;
diff --git a/Sample/Aggregate/IInterferenceFunction.h b/Sample/Aggregate/IInterferenceFunction.h
index ff50ef578ed..cc94d506815 100644
--- a/Sample/Aggregate/IInterferenceFunction.h
+++ b/Sample/Aggregate/IInterferenceFunction.h
@@ -26,7 +26,7 @@ public:
     IInterferenceFunction(const NodeMeta& meta, const std::vector<double>& PValues);
     IInterferenceFunction(double position_var);
 
-    virtual IInterferenceFunction* clone() const = 0;
+    IInterferenceFunction* clone() const override = 0;
 
     //! Evaluates the interference function for a given wavevector transfer
     virtual double evaluate(const kvector_t q, double outer_iff = 1.0) const;
diff --git a/Sample/Correlations/FTDecay1D.h b/Sample/Correlations/FTDecay1D.h
index 18a2deab0f3..c2c9ce8e3f9 100644
--- a/Sample/Correlations/FTDecay1D.h
+++ b/Sample/Correlations/FTDecay1D.h
@@ -29,8 +29,8 @@
 class IFTDecayFunction1D : public ICloneable, public INode {
 public:
     IFTDecayFunction1D(const NodeMeta& meta, const std::vector<double>& PValues);
+    IFTDecayFunction1D* clone() const override = 0;
 
-    virtual IFTDecayFunction1D* clone() const = 0;
     virtual double evaluate(double q) const = 0;
     double decayLength() const { return m_decay_length; }
 
@@ -48,7 +48,7 @@ public:
     FTDecayFunction1DCauchy(const std::vector<double> P);
     FTDecayFunction1DCauchy(double decay_length);
 
-    FTDecayFunction1DCauchy* clone() const;
+    FTDecayFunction1DCauchy* clone() const override;
     void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
     double evaluate(double q) const override;
 };
@@ -61,7 +61,7 @@ public:
     FTDecayFunction1DGauss(const std::vector<double> P);
     FTDecayFunction1DGauss(double decay_length);
 
-    FTDecayFunction1DGauss* clone() const;
+    FTDecayFunction1DGauss* clone() const override;
     void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
     double evaluate(double q) const override;
 };
@@ -74,7 +74,7 @@ public:
     FTDecayFunction1DTriangle(const std::vector<double> P);
     FTDecayFunction1DTriangle(double decay_length);
 
-    FTDecayFunction1DTriangle* clone() const;
+    FTDecayFunction1DTriangle* clone() const override;
     void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
     double evaluate(double q) const override;
 };
@@ -87,7 +87,7 @@ public:
     FTDecayFunction1DVoigt(const std::vector<double> P);
     FTDecayFunction1DVoigt(double decay_length, double eta);
 
-    FTDecayFunction1DVoigt* clone() const;
+    FTDecayFunction1DVoigt* clone() const override;
     void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
     double evaluate(double q) const override;
     double eEta() const { return m_eta; }
diff --git a/Sample/Correlations/FTDecay2D.h b/Sample/Correlations/FTDecay2D.h
index 7a3aa16bcd6..72341728733 100644
--- a/Sample/Correlations/FTDecay2D.h
+++ b/Sample/Correlations/FTDecay2D.h
@@ -27,8 +27,7 @@
 class IFTDecayFunction2D : public ICloneable, public INode {
 public:
     IFTDecayFunction2D(const NodeMeta& meta, const std::vector<double>& PValues);
-
-    virtual IFTDecayFunction2D* clone() const = 0;
+    IFTDecayFunction2D* clone() const override = 0;
 
     //! get decay length in distribution's X-direction
     double decayLengthX() const { return m_decay_length_x; }
@@ -67,7 +66,7 @@ public:
     FTDecayFunction2DCauchy(const std::vector<double> P);
     FTDecayFunction2DCauchy(double decay_length_x, double decay_length_y, double gamma);
 
-    FTDecayFunction2DCauchy* clone() const;
+    FTDecayFunction2DCauchy* clone() const override;
     void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
     double evaluate(double qx, double qy) const override;
 };
@@ -81,7 +80,7 @@ public:
     FTDecayFunction2DGauss(const std::vector<double> P);
     FTDecayFunction2DGauss(double decay_length_x, double decay_length_y, double gamma);
 
-    FTDecayFunction2DGauss* clone() const;
+    FTDecayFunction2DGauss* clone() const override;
     void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
     double evaluate(double qx, double qy) const override;
 };
@@ -94,7 +93,7 @@ public:
     FTDecayFunction2DVoigt(const std::vector<double> P);
     FTDecayFunction2DVoigt(double decay_length_x, double decay_length_y, double gamma, double eta);
 
-    FTDecayFunction2DVoigt* clone() const;
+    FTDecayFunction2DVoigt* clone() const override;
     void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
     double evaluate(double qx, double qy) const override;
     double eta() const { return m_eta; }
diff --git a/Sample/HardParticle/FormFactorAnisoPyramid.h b/Sample/HardParticle/FormFactorAnisoPyramid.h
index 5979dfc196b..eee0b77109a 100644
--- a/Sample/HardParticle/FormFactorAnisoPyramid.h
+++ b/Sample/HardParticle/FormFactorAnisoPyramid.h
@@ -25,7 +25,7 @@ public:
     FormFactorAnisoPyramid(const std::vector<double> P);
     FormFactorAnisoPyramid(double length, double width, double height, double alpha);
 
-    FormFactorAnisoPyramid* clone() const final
+    FormFactorAnisoPyramid* clone() const override
     {
         return new FormFactorAnisoPyramid(m_length, m_width, m_height, m_alpha);
     }
diff --git a/Sample/HardParticle/FormFactorCantellatedCube.h b/Sample/HardParticle/FormFactorCantellatedCube.h
index 7fec2e8f18b..efe80b2c62e 100644
--- a/Sample/HardParticle/FormFactorCantellatedCube.h
+++ b/Sample/HardParticle/FormFactorCantellatedCube.h
@@ -25,7 +25,7 @@ public:
     FormFactorCantellatedCube(const std::vector<double> P);
     FormFactorCantellatedCube(double length, double removed_length);
 
-    FormFactorCantellatedCube* clone() const final
+    FormFactorCantellatedCube* clone() const override
     {
         return new FormFactorCantellatedCube(m_length, m_removed_length);
     }
diff --git a/Sample/HardParticle/FormFactorCone.h b/Sample/HardParticle/FormFactorCone.h
index c1a7effec99..afff880f847 100644
--- a/Sample/HardParticle/FormFactorCone.h
+++ b/Sample/HardParticle/FormFactorCone.h
@@ -25,7 +25,10 @@ public:
     FormFactorCone(const std::vector<double> P);
     FormFactorCone(double radius, double height, double alpha);
 
-    FormFactorCone* clone() const override { return new FormFactorCone(m_radius, m_height, m_alpha); }
+    FormFactorCone* clone() const override
+    {
+        return new FormFactorCone(m_radius, m_height, m_alpha);
+    }
     void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getHeight() const { return m_height; }
diff --git a/Sample/HardParticle/FormFactorCone6.h b/Sample/HardParticle/FormFactorCone6.h
index dc0acb4ffd7..92d20fb0457 100644
--- a/Sample/HardParticle/FormFactorCone6.h
+++ b/Sample/HardParticle/FormFactorCone6.h
@@ -25,7 +25,7 @@ public:
     FormFactorCone6(const std::vector<double> P);
     FormFactorCone6(double base_edge, double height, double alpha);
 
-    FormFactorCone6* clone() const final
+    FormFactorCone6* clone() const override
     {
         return new FormFactorCone6(m_base_edge, m_height, m_alpha);
     }
diff --git a/Sample/HardParticle/FormFactorCuboctahedron.h b/Sample/HardParticle/FormFactorCuboctahedron.h
index 690ebf17047..783a0f4795d 100644
--- a/Sample/HardParticle/FormFactorCuboctahedron.h
+++ b/Sample/HardParticle/FormFactorCuboctahedron.h
@@ -25,7 +25,7 @@ public:
     FormFactorCuboctahedron(const std::vector<double> P);
     FormFactorCuboctahedron(double length, double height, double height_ratio, double alpha);
 
-    FormFactorCuboctahedron* clone() const final
+    FormFactorCuboctahedron* clone() const override
     {
         return new FormFactorCuboctahedron(m_length, m_height, m_height_ratio, m_alpha);
     }
diff --git a/Sample/HardParticle/FormFactorCylinder.h b/Sample/HardParticle/FormFactorCylinder.h
index 2ce0d5de923..60940ce52de 100644
--- a/Sample/HardParticle/FormFactorCylinder.h
+++ b/Sample/HardParticle/FormFactorCylinder.h
@@ -25,7 +25,10 @@ public:
     FormFactorCylinder(const std::vector<double> P);
     FormFactorCylinder(double radius, double height);
 
-    FormFactorCylinder* clone() const override { return new FormFactorCylinder(m_radius, m_height); }
+    FormFactorCylinder* clone() const override
+    {
+        return new FormFactorCylinder(m_radius, m_height);
+    }
     void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getHeight() const { return m_height; }
diff --git a/Sample/HardParticle/FormFactorEllipsoidalCylinder.h b/Sample/HardParticle/FormFactorEllipsoidalCylinder.h
index cfc89d02220..bb893a98215 100644
--- a/Sample/HardParticle/FormFactorEllipsoidalCylinder.h
+++ b/Sample/HardParticle/FormFactorEllipsoidalCylinder.h
@@ -25,7 +25,7 @@ public:
     FormFactorEllipsoidalCylinder(const std::vector<double> P);
     FormFactorEllipsoidalCylinder(double radius_x, double radius_y, double height);
 
-    FormFactorEllipsoidalCylinder* clone() const final
+    FormFactorEllipsoidalCylinder* clone() const override
     {
         return new FormFactorEllipsoidalCylinder(m_radius_x, m_radius_y, m_height);
     }
diff --git a/Sample/HardParticle/FormFactorFullSphere.h b/Sample/HardParticle/FormFactorFullSphere.h
index 068b2faaa2c..8186e89b313 100644
--- a/Sample/HardParticle/FormFactorFullSphere.h
+++ b/Sample/HardParticle/FormFactorFullSphere.h
@@ -25,7 +25,7 @@ public:
     FormFactorFullSphere(const std::vector<double> P, bool position_at_center = false);
     FormFactorFullSphere(double radius, bool position_at_center = false);
 
-    FormFactorFullSphere* clone() const final
+    FormFactorFullSphere* clone() const override
     {
         return new FormFactorFullSphere(m_radius, m_position_at_center);
     }
diff --git a/Sample/HardParticle/FormFactorFullSpheroid.h b/Sample/HardParticle/FormFactorFullSpheroid.h
index 93d0f140da0..0491f23c3cc 100644
--- a/Sample/HardParticle/FormFactorFullSpheroid.h
+++ b/Sample/HardParticle/FormFactorFullSpheroid.h
@@ -25,7 +25,7 @@ public:
     FormFactorFullSpheroid(const std::vector<double> P);
     FormFactorFullSpheroid(double radius, double height);
 
-    FormFactorFullSpheroid* clone() const final
+    FormFactorFullSpheroid* clone() const override
     {
         return new FormFactorFullSpheroid(m_radius, m_height);
     }
diff --git a/Sample/HardParticle/FormFactorHemiEllipsoid.h b/Sample/HardParticle/FormFactorHemiEllipsoid.h
index a37ce1a7be1..6a44010021e 100644
--- a/Sample/HardParticle/FormFactorHemiEllipsoid.h
+++ b/Sample/HardParticle/FormFactorHemiEllipsoid.h
@@ -27,7 +27,7 @@ public:
     FormFactorHemiEllipsoid(double radius_x, double radius_y, double height);
     virtual ~FormFactorHemiEllipsoid() {}
 
-    FormFactorHemiEllipsoid* clone() const final
+    FormFactorHemiEllipsoid* clone() const override
     {
         return new FormFactorHemiEllipsoid(m_radius_x, m_radius_y, m_height);
     }
diff --git a/Sample/HardParticle/FormFactorHollowSphere.h b/Sample/HardParticle/FormFactorHollowSphere.h
index d04fee540c7..7c410eb5456 100644
--- a/Sample/HardParticle/FormFactorHollowSphere.h
+++ b/Sample/HardParticle/FormFactorHollowSphere.h
@@ -25,7 +25,7 @@ public:
     FormFactorHollowSphere(const std::vector<double> P);
     FormFactorHollowSphere(double mean, double full_width);
 
-    FormFactorHollowSphere* clone() const final
+    FormFactorHollowSphere* clone() const override
     {
         return new FormFactorHollowSphere(m_mean, m_full_width);
     }
diff --git a/Sample/HardParticle/FormFactorLongBoxGauss.h b/Sample/HardParticle/FormFactorLongBoxGauss.h
index c303c41962b..cc6f69ebbed 100644
--- a/Sample/HardParticle/FormFactorLongBoxGauss.h
+++ b/Sample/HardParticle/FormFactorLongBoxGauss.h
@@ -25,7 +25,7 @@ public:
     FormFactorLongBoxGauss(const std::vector<double> P);
     FormFactorLongBoxGauss(double length, double width, double height);
 
-    FormFactorLongBoxGauss* clone() const final
+    FormFactorLongBoxGauss* clone() const override
     {
         return new FormFactorLongBoxGauss(m_length, m_width, m_height);
     }
diff --git a/Sample/HardParticle/FormFactorLongBoxLorentz.h b/Sample/HardParticle/FormFactorLongBoxLorentz.h
index ca83b73220a..a4189928349 100644
--- a/Sample/HardParticle/FormFactorLongBoxLorentz.h
+++ b/Sample/HardParticle/FormFactorLongBoxLorentz.h
@@ -25,7 +25,7 @@ public:
     FormFactorLongBoxLorentz(const std::vector<double> P);
     FormFactorLongBoxLorentz(double length, double width, double height);
 
-    FormFactorLongBoxLorentz* clone() const final
+    FormFactorLongBoxLorentz* clone() const override
     {
         return new FormFactorLongBoxLorentz(m_length, m_width, m_height);
     }
diff --git a/Sample/HardParticle/FormFactorPyramid.h b/Sample/HardParticle/FormFactorPyramid.h
index 6962d633cc0..24a4be2b186 100644
--- a/Sample/HardParticle/FormFactorPyramid.h
+++ b/Sample/HardParticle/FormFactorPyramid.h
@@ -25,7 +25,7 @@ public:
     FormFactorPyramid(const std::vector<double> P);
     FormFactorPyramid(double base_edge, double height, double alpha);
 
-    FormFactorPyramid* clone() const final
+    FormFactorPyramid* clone() const override
     {
         return new FormFactorPyramid(m_base_edge, m_height, m_alpha);
     }
diff --git a/Sample/HardParticle/FormFactorTetrahedron.h b/Sample/HardParticle/FormFactorTetrahedron.h
index 967b13e60bb..d74d0dcd2d5 100644
--- a/Sample/HardParticle/FormFactorTetrahedron.h
+++ b/Sample/HardParticle/FormFactorTetrahedron.h
@@ -25,7 +25,7 @@ public:
     FormFactorTetrahedron(const std::vector<double> P);
     FormFactorTetrahedron(double base_edge, double height, double alpha);
 
-    FormFactorTetrahedron* clone() const final
+    FormFactorTetrahedron* clone() const override
     {
         return new FormFactorTetrahedron(m_base_edge, m_height, m_alpha);
     }
diff --git a/Sample/HardParticle/FormFactorTruncatedCube.h b/Sample/HardParticle/FormFactorTruncatedCube.h
index dc32159ba98..dcef16e6d23 100644
--- a/Sample/HardParticle/FormFactorTruncatedCube.h
+++ b/Sample/HardParticle/FormFactorTruncatedCube.h
@@ -25,7 +25,7 @@ public:
     FormFactorTruncatedCube(const std::vector<double> P);
     FormFactorTruncatedCube(double length, double removed_length);
 
-    FormFactorTruncatedCube* clone() const final
+    FormFactorTruncatedCube* clone() const override
     {
         return new FormFactorTruncatedCube(m_length, m_removed_length);
     }
diff --git a/Sample/HardParticle/FormFactorTruncatedSphere.h b/Sample/HardParticle/FormFactorTruncatedSphere.h
index cd5570e75b6..92c6b5b5b6f 100644
--- a/Sample/HardParticle/FormFactorTruncatedSphere.h
+++ b/Sample/HardParticle/FormFactorTruncatedSphere.h
@@ -25,7 +25,7 @@ public:
     FormFactorTruncatedSphere(const std::vector<double> P);
     FormFactorTruncatedSphere(double radius, double height, double dh);
 
-    FormFactorTruncatedSphere* clone() const final
+    FormFactorTruncatedSphere* clone() const override
     {
         return new FormFactorTruncatedSphere(m_radius, m_height, m_dh);
     }
diff --git a/Sample/HardParticle/FormFactorTruncatedSpheroid.h b/Sample/HardParticle/FormFactorTruncatedSpheroid.h
index b31818a9606..e6d339561e9 100644
--- a/Sample/HardParticle/FormFactorTruncatedSpheroid.h
+++ b/Sample/HardParticle/FormFactorTruncatedSpheroid.h
@@ -26,7 +26,7 @@ public:
     FormFactorTruncatedSpheroid(const std::vector<double> P);
     FormFactorTruncatedSpheroid(double radius, double height, double height_flattening, double dh);
 
-    FormFactorTruncatedSpheroid* clone() const final
+    FormFactorTruncatedSpheroid* clone() const override
     {
         return new FormFactorTruncatedSpheroid(m_radius, m_height, m_height_flattening, m_dh);
     }
diff --git a/Sample/Lattice/Lattice2D.h b/Sample/Lattice/Lattice2D.h
index 7ef30a3d310..6024c3206cb 100644
--- a/Sample/Lattice/Lattice2D.h
+++ b/Sample/Lattice/Lattice2D.h
@@ -24,8 +24,7 @@ class Lattice2D : public ICloneable, public INode {
 public:
     Lattice2D(const NodeMeta& meta, const std::vector<double>& PValues);
     explicit Lattice2D(double xi);
-
-    virtual Lattice2D* clone() const = 0;
+    Lattice2D* clone() const override = 0;
 
     struct ReciprocalBases {
         double m_asx, m_asy; //!< x,y coordinates of a*
@@ -54,7 +53,7 @@ class BasicLattice2D : public Lattice2D {
 public:
     BasicLattice2D(double length1, double length2, double angle, double xi);
 
-    BasicLattice2D* clone() const;
+    BasicLattice2D* clone() const override;
 
     void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
@@ -74,14 +73,14 @@ class SquareLattice2D : public Lattice2D {
 public:
     SquareLattice2D(double length, double xi = 0.0);
 
-    SquareLattice2D* clone() const;
+    SquareLattice2D* clone() const override;
 
     void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double length1() const override { return m_length; }
     double length2() const override { return m_length; }
-    double latticeAngle() const override ;
-    double unitCellArea() const override ;
+    double latticeAngle() const override;
+    double unitCellArea() const override;
 
 private:
     double m_length;
@@ -93,7 +92,7 @@ class HexagonalLattice2D : public Lattice2D {
 public:
     HexagonalLattice2D(double length, double xi);
 
-    HexagonalLattice2D* clone() const;
+    HexagonalLattice2D* clone() const override;
 
     void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
diff --git a/Sample/Scattering/FormFactorDecoratorPositionFactor.h b/Sample/Scattering/FormFactorDecoratorPositionFactor.h
index 268e73f0d8c..0f86f33ad5a 100644
--- a/Sample/Scattering/FormFactorDecoratorPositionFactor.h
+++ b/Sample/Scattering/FormFactorDecoratorPositionFactor.h
@@ -29,7 +29,7 @@ class FormFactorDecoratorPositionFactor : public IFormFactorDecorator {
 public:
     FormFactorDecoratorPositionFactor(const IFormFactor& ff, const kvector_t& position);
 
-    FormFactorDecoratorPositionFactor* clone() const final
+    FormFactorDecoratorPositionFactor* clone() const override
     {
         return new FormFactorDecoratorPositionFactor(*m_ff, m_position);
     }
diff --git a/Sample/Slice/LayerInterface.h b/Sample/Slice/LayerInterface.h
index e0474b420bb..c4d5962ba81 100644
--- a/Sample/Slice/LayerInterface.h
+++ b/Sample/Slice/LayerInterface.h
@@ -32,9 +32,9 @@ class LayerInterface : public ISampleNode {
 public:
     virtual ~LayerInterface();
 
-    LayerInterface* clone() const;
+    LayerInterface* clone() const override;
 
-    virtual void accept(INodeVisitor* visitor) const { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     //! Creates smooth interface between two layers
     static LayerInterface* createSmoothInterface(const Layer* top_layer, const Layer* bottom_layer);
@@ -53,7 +53,7 @@ public:
 
     const Layer* bottomLayer() const;
 
-    std::vector<const INode*> getChildren() const;
+    std::vector<const INode*> getChildren() const override;
 
 private:
     void setLayersTopBottom(const Layer* top_layer, const Layer* bottom_layer);
diff --git a/Sample/SoftParticle/FormFactorGauss.h b/Sample/SoftParticle/FormFactorGauss.h
index b05215c23fb..50cc313a536 100644
--- a/Sample/SoftParticle/FormFactorGauss.h
+++ b/Sample/SoftParticle/FormFactorGauss.h
@@ -25,7 +25,10 @@ public:
     FormFactorGaussSphere(const std::vector<double> P);
     FormFactorGaussSphere(double mean_radius);
 
-    FormFactorGaussSphere* clone() const override { return new FormFactorGaussSphere(m_mean_radius); }
+    FormFactorGaussSphere* clone() const override
+    {
+        return new FormFactorGaussSphere(m_mean_radius);
+    }
     void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getMeanRadius() const { return m_mean_radius; }
@@ -35,7 +38,7 @@ public:
     complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
-    void onChange() final{};
+    void onChange() override{};
 
 private:
     const double& m_mean_radius;
diff --git a/Sample/SoftParticle/FormFactorSphereGaussianRadius.h b/Sample/SoftParticle/FormFactorSphereGaussianRadius.h
index d7430d31b98..d9aa09bb283 100644
--- a/Sample/SoftParticle/FormFactorSphereGaussianRadius.h
+++ b/Sample/SoftParticle/FormFactorSphereGaussianRadius.h
@@ -26,7 +26,7 @@ public:
     FormFactorSphereGaussianRadius(const std::vector<double> P);
     FormFactorSphereGaussianRadius(double mean, double sigma);
 
-    FormFactorSphereGaussianRadius* clone() const final
+    FormFactorSphereGaussianRadius* clone() const override
     {
         return new FormFactorSphereGaussianRadius(m_mean, m_sigma);
     }
diff --git a/Tests/UnitTests/Core/Sample/INodeTest.cpp b/Tests/UnitTests/Core/Sample/INodeTest.cpp
index 75444167977..31d65d8355b 100644
--- a/Tests/UnitTests/Core/Sample/INodeTest.cpp
+++ b/Tests/UnitTests/Core/Sample/INodeTest.cpp
@@ -35,7 +35,7 @@ public:
             registerChild(node);
         }
 
-        virtual std::vector<const INode*> getChildren() const
+        std::vector<const INode*> getChildren() const override
         {
             return {m_nodes.begin(), m_nodes.end()};
         }
diff --git a/Tests/UnitTests/Core/Sample/Lattice2DTest.cpp b/Tests/UnitTests/Core/Sample/Lattice2DTest.cpp
index d5099d6968a..0eff5c03e17 100644
--- a/Tests/UnitTests/Core/Sample/Lattice2DTest.cpp
+++ b/Tests/UnitTests/Core/Sample/Lattice2DTest.cpp
@@ -83,7 +83,7 @@ TEST_F(Lattice2DTest, onChange)
     public:
         Parent() : m_changed(false) {}
         void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-        virtual void onChange() { m_changed = true; }
+        void onChange() override { m_changed = true; }
         bool m_changed;
     };
 
diff --git a/Tests/UnitTests/Core/Sample/SampleProviderTest.cpp b/Tests/UnitTests/Core/Sample/SampleProviderTest.cpp
index 5bb76eaeb77..7c4f6035684 100644
--- a/Tests/UnitTests/Core/Sample/SampleProviderTest.cpp
+++ b/Tests/UnitTests/Core/Sample/SampleProviderTest.cpp
@@ -33,7 +33,7 @@ public:
 
         void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-        std::vector<const INode*> getChildren() const { return m_provider.getChildren(); }
+        std::vector<const INode*> getChildren() const override { return m_provider.getChildren(); }
 
         void setContainer(const SampleProvider& provider) { m_provider = provider; }
         SampleProvider m_provider;
diff --git a/auto/Wrap/doxygenDevice.i b/auto/Wrap/doxygenDevice.i
index ff54d9ec613..32a13e22ea2 100644
--- a/auto/Wrap/doxygenDevice.i
+++ b/auto/Wrap/doxygenDevice.i
@@ -128,12 +128,12 @@ Constructor taking a 2 dimensional resolution function as argument.
 %feature("docstring")  ConvolutionDetectorResolution::~ConvolutionDetectorResolution "ConvolutionDetectorResolution::~ConvolutionDetectorResolution()
 ";
 
-%feature("docstring")  ConvolutionDetectorResolution::applyDetectorResolution "void ConvolutionDetectorResolution::applyDetectorResolution(OutputData< double > *p_intensity_map) const
-
-Convolve given intensities with the encapsulated resolution. 
+%feature("docstring")  ConvolutionDetectorResolution::clone "ConvolutionDetectorResolution * ConvolutionDetectorResolution::clone() const override
 ";
 
-%feature("docstring")  ConvolutionDetectorResolution::clone "ConvolutionDetectorResolution * ConvolutionDetectorResolution::clone() const
+%feature("docstring")  ConvolutionDetectorResolution::applyDetectorResolution "void ConvolutionDetectorResolution::applyDetectorResolution(OutputData< double > *p_intensity_map) const override
+
+Convolve given intensities with the encapsulated resolution. 
 ";
 
 %feature("docstring")  ConvolutionDetectorResolution::accept "void ConvolutionDetectorResolution::accept(INodeVisitor *visitor) const override
@@ -142,7 +142,7 @@ Convolve given intensities with the encapsulated resolution.
 %feature("docstring")  ConvolutionDetectorResolution::getResolutionFunction2D "const IResolutionFunction2D * ConvolutionDetectorResolution::getResolutionFunction2D() const
 ";
 
-%feature("docstring")  ConvolutionDetectorResolution::getChildren "std::vector< const INode * > ConvolutionDetectorResolution::getChildren() const
+%feature("docstring")  ConvolutionDetectorResolution::getChildren "std::vector< const INode * > ConvolutionDetectorResolution::getChildren() const override
 ";
 
 
@@ -988,6 +988,9 @@ C++ includes: IDetectorResolution.h
 %feature("docstring")  IDetectorResolution::~IDetectorResolution "virtual IDetectorResolution::~IDetectorResolution()
 ";
 
+%feature("docstring")  IDetectorResolution::clone "IDetectorResolution* IDetectorResolution::clone() const override=0
+";
+
 %feature("docstring")  IDetectorResolution::applyDetectorResolution "virtual void IDetectorResolution::applyDetectorResolution(OutputData< double > *p_intensity_map) const =0
 
 Apply the resolution function to the intensity data. 
@@ -998,9 +1001,6 @@ Apply the resolution function to the intensity data.
 Applies the detector resolution to the matrix-valued intensity data. 
 ";
 
-%feature("docstring")  IDetectorResolution::clone "virtual IDetectorResolution* IDetectorResolution::clone() const =0
-";
-
 
 // File: classIFootprintFactor.xml
 %feature("docstring") IFootprintFactor "
@@ -1362,7 +1362,7 @@ Sets the detector (axes can be overwritten later)
 init detector with beam settings 
 ";
 
-%feature("docstring")  Instrument::getChildren "std::vector< const INode * > Instrument::getChildren() const
+%feature("docstring")  Instrument::getChildren "std::vector< const INode * > Instrument::getChildren() const override
 ";
 
 
@@ -2336,13 +2336,13 @@ C++ includes: ResolutionFunction2DGaussian.h
 %feature("docstring")  ResolutionFunction2DGaussian::ResolutionFunction2DGaussian "ResolutionFunction2DGaussian::ResolutionFunction2DGaussian(double sigma_x, double sigma_y)
 ";
 
-%feature("docstring")  ResolutionFunction2DGaussian::evaluateCDF "double ResolutionFunction2DGaussian::evaluateCDF(double x, double y) const
+%feature("docstring")  ResolutionFunction2DGaussian::clone "ResolutionFunction2DGaussian* ResolutionFunction2DGaussian::clone() const override
 ";
 
-%feature("docstring")  ResolutionFunction2DGaussian::clone "ResolutionFunction2DGaussian* ResolutionFunction2DGaussian::clone() const
+%feature("docstring")  ResolutionFunction2DGaussian::accept "void ResolutionFunction2DGaussian::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  ResolutionFunction2DGaussian::accept "void ResolutionFunction2DGaussian::accept(INodeVisitor *visitor) const override
+%feature("docstring")  ResolutionFunction2DGaussian::evaluateCDF "double ResolutionFunction2DGaussian::evaluateCDF(double x, double y) const
 ";
 
 %feature("docstring")  ResolutionFunction2DGaussian::getSigmaX "double ResolutionFunction2DGaussian::getSigmaX() const
diff --git a/auto/Wrap/doxygenParam.i b/auto/Wrap/doxygenParam.i
index f5afff15150..cae7dff55ab 100644
--- a/auto/Wrap/doxygenParam.i
+++ b/auto/Wrap/doxygenParam.i
@@ -119,7 +119,7 @@ C++ includes: Distributions.h
 %feature("docstring")  DistributionGaussian::DistributionGaussian "DistributionGaussian::DistributionGaussian()
 ";
 
-%feature("docstring")  DistributionGaussian::clone "DistributionGaussian* DistributionGaussian::clone() const final
+%feature("docstring")  DistributionGaussian::clone "DistributionGaussian* DistributionGaussian::clone() const override
 ";
 
 %feature("docstring")  DistributionGaussian::probabilityDensity "double DistributionGaussian::probabilityDensity(double x) const override
@@ -209,7 +209,7 @@ C++ includes: Distributions.h
 %feature("docstring")  DistributionLogNormal::DistributionLogNormal "DistributionLogNormal::DistributionLogNormal()=delete
 ";
 
-%feature("docstring")  DistributionLogNormal::clone "DistributionLogNormal* DistributionLogNormal::clone() const final
+%feature("docstring")  DistributionLogNormal::clone "DistributionLogNormal* DistributionLogNormal::clone() const override
 ";
 
 %feature("docstring")  DistributionLogNormal::probabilityDensity "double DistributionLogNormal::probabilityDensity(double x) const override
@@ -315,7 +315,7 @@ C++ includes: Distributions.h
 %feature("docstring")  DistributionTrapezoid::DistributionTrapezoid "DistributionTrapezoid::DistributionTrapezoid()
 ";
 
-%feature("docstring")  DistributionTrapezoid::clone "DistributionTrapezoid* DistributionTrapezoid::clone() const final
+%feature("docstring")  DistributionTrapezoid::clone "DistributionTrapezoid* DistributionTrapezoid::clone() const override
 ";
 
 %feature("docstring")  DistributionTrapezoid::probabilityDensity "double DistributionTrapezoid::probabilityDensity(double x) const override
@@ -376,7 +376,7 @@ C++ includes: Distributions.h
 %feature("docstring")  IDistribution1D::IDistribution1D "IDistribution1D::IDistribution1D(const NodeMeta &meta, const std::vector< double > &PValues)
 ";
 
-%feature("docstring")  IDistribution1D::clone "virtual IDistribution1D* IDistribution1D::clone() const =0
+%feature("docstring")  IDistribution1D::clone "IDistribution1D* IDistribution1D::clone() const override=0
 ";
 
 %feature("docstring")  IDistribution1D::probabilityDensity "virtual double IDistribution1D::probabilityDensity(double x) const =0
diff --git a/auto/Wrap/doxygenSample.i b/auto/Wrap/doxygenSample.i
index 04633f6fd54..5d7dd8d4edd 100644
--- a/auto/Wrap/doxygenSample.i
+++ b/auto/Wrap/doxygenSample.i
@@ -150,7 +150,7 @@ C++ includes: Lattice2D.h
 %feature("docstring")  BasicLattice2D::BasicLattice2D "BasicLattice2D::BasicLattice2D(double length1, double length2, double angle, double xi)
 ";
 
-%feature("docstring")  BasicLattice2D::clone "BasicLattice2D * BasicLattice2D::clone() const
+%feature("docstring")  BasicLattice2D::clone "BasicLattice2D * BasicLattice2D::clone() const override
 ";
 
 %feature("docstring")  BasicLattice2D::accept "void BasicLattice2D::accept(INodeVisitor *visitor) const override
@@ -743,7 +743,7 @@ C++ includes: FormFactorAnisoPyramid.h
 %feature("docstring")  FormFactorAnisoPyramid::FormFactorAnisoPyramid "FormFactorAnisoPyramid::FormFactorAnisoPyramid(double length, double width, double height, double alpha)
 ";
 
-%feature("docstring")  FormFactorAnisoPyramid::clone "FormFactorAnisoPyramid* FormFactorAnisoPyramid::clone() const final
+%feature("docstring")  FormFactorAnisoPyramid::clone "FormFactorAnisoPyramid* FormFactorAnisoPyramid::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
@@ -868,7 +868,7 @@ C++ includes: FormFactorCantellatedCube.h
 %feature("docstring")  FormFactorCantellatedCube::FormFactorCantellatedCube "FormFactorCantellatedCube::FormFactorCantellatedCube(double length, double removed_length)
 ";
 
-%feature("docstring")  FormFactorCantellatedCube::clone "FormFactorCantellatedCube* FormFactorCantellatedCube::clone() const final
+%feature("docstring")  FormFactorCantellatedCube::clone "FormFactorCantellatedCube* FormFactorCantellatedCube::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
@@ -1014,7 +1014,7 @@ C++ includes: FormFactorCone6.h
 %feature("docstring")  FormFactorCone6::FormFactorCone6 "FormFactorCone6::FormFactorCone6(double base_edge, double height, double alpha)
 ";
 
-%feature("docstring")  FormFactorCone6::clone "FormFactorCone6* FormFactorCone6::clone() const final
+%feature("docstring")  FormFactorCone6::clone "FormFactorCone6* FormFactorCone6::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
@@ -1228,7 +1228,7 @@ C++ includes: FormFactorCuboctahedron.h
 %feature("docstring")  FormFactorCuboctahedron::FormFactorCuboctahedron "FormFactorCuboctahedron::FormFactorCuboctahedron(double length, double height, double height_ratio, double alpha)
 ";
 
-%feature("docstring")  FormFactorCuboctahedron::clone "FormFactorCuboctahedron* FormFactorCuboctahedron::clone() const final
+%feature("docstring")  FormFactorCuboctahedron::clone "FormFactorCuboctahedron* FormFactorCuboctahedron::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
@@ -1342,7 +1342,7 @@ C++ includes: FormFactorDecoratorPositionFactor.h
 %feature("docstring")  FormFactorDecoratorPositionFactor::FormFactorDecoratorPositionFactor "FormFactorDecoratorPositionFactor::FormFactorDecoratorPositionFactor(const IFormFactor &ff, const kvector_t &position)
 ";
 
-%feature("docstring")  FormFactorDecoratorPositionFactor::clone "FormFactorDecoratorPositionFactor* FormFactorDecoratorPositionFactor::clone() const final
+%feature("docstring")  FormFactorDecoratorPositionFactor::clone "FormFactorDecoratorPositionFactor* FormFactorDecoratorPositionFactor::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
@@ -1499,7 +1499,7 @@ C++ includes: FormFactorEllipsoidalCylinder.h
 %feature("docstring")  FormFactorEllipsoidalCylinder::FormFactorEllipsoidalCylinder "FormFactorEllipsoidalCylinder::FormFactorEllipsoidalCylinder(double radius_x, double radius_y, double height)
 ";
 
-%feature("docstring")  FormFactorEllipsoidalCylinder::clone "FormFactorEllipsoidalCylinder* FormFactorEllipsoidalCylinder::clone() const final
+%feature("docstring")  FormFactorEllipsoidalCylinder::clone "FormFactorEllipsoidalCylinder* FormFactorEllipsoidalCylinder::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
@@ -1541,7 +1541,7 @@ C++ includes: FormFactorFullSphere.h
 %feature("docstring")  FormFactorFullSphere::FormFactorFullSphere "FormFactorFullSphere::FormFactorFullSphere(double radius, bool position_at_center=false)
 ";
 
-%feature("docstring")  FormFactorFullSphere::clone "FormFactorFullSphere* FormFactorFullSphere::clone() const final
+%feature("docstring")  FormFactorFullSphere::clone "FormFactorFullSphere* FormFactorFullSphere::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
@@ -1587,7 +1587,7 @@ C++ includes: FormFactorFullSpheroid.h
 %feature("docstring")  FormFactorFullSpheroid::FormFactorFullSpheroid "FormFactorFullSpheroid::FormFactorFullSpheroid(double radius, double height)
 ";
 
-%feature("docstring")  FormFactorFullSpheroid::clone "FormFactorFullSpheroid* FormFactorFullSpheroid::clone() const final
+%feature("docstring")  FormFactorFullSpheroid::clone "FormFactorFullSpheroid* FormFactorFullSpheroid::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
@@ -1665,7 +1665,7 @@ C++ includes: FormFactorHemiEllipsoid.h
 %feature("docstring")  FormFactorHemiEllipsoid::~FormFactorHemiEllipsoid "virtual FormFactorHemiEllipsoid::~FormFactorHemiEllipsoid()
 ";
 
-%feature("docstring")  FormFactorHemiEllipsoid::clone "FormFactorHemiEllipsoid* FormFactorHemiEllipsoid::clone() const final
+%feature("docstring")  FormFactorHemiEllipsoid::clone "FormFactorHemiEllipsoid* FormFactorHemiEllipsoid::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
@@ -1707,7 +1707,7 @@ C++ includes: FormFactorHollowSphere.h
 %feature("docstring")  FormFactorHollowSphere::FormFactorHollowSphere "FormFactorHollowSphere::FormFactorHollowSphere(double mean, double full_width)
 ";
 
-%feature("docstring")  FormFactorHollowSphere::clone "FormFactorHollowSphere* FormFactorHollowSphere::clone() const final
+%feature("docstring")  FormFactorHollowSphere::clone "FormFactorHollowSphere* FormFactorHollowSphere::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
@@ -1766,7 +1766,7 @@ C++ includes: FormFactorLongBoxGauss.h
 %feature("docstring")  FormFactorLongBoxGauss::FormFactorLongBoxGauss "FormFactorLongBoxGauss::FormFactorLongBoxGauss(double length, double width, double height)
 ";
 
-%feature("docstring")  FormFactorLongBoxGauss::clone "FormFactorLongBoxGauss* FormFactorLongBoxGauss::clone() const final
+%feature("docstring")  FormFactorLongBoxGauss::clone "FormFactorLongBoxGauss* FormFactorLongBoxGauss::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
@@ -1808,7 +1808,7 @@ C++ includes: FormFactorLongBoxLorentz.h
 %feature("docstring")  FormFactorLongBoxLorentz::FormFactorLongBoxLorentz "FormFactorLongBoxLorentz::FormFactorLongBoxLorentz(double length, double width, double height)
 ";
 
-%feature("docstring")  FormFactorLongBoxLorentz::clone "FormFactorLongBoxLorentz* FormFactorLongBoxLorentz::clone() const final
+%feature("docstring")  FormFactorLongBoxLorentz::clone "FormFactorLongBoxLorentz* FormFactorLongBoxLorentz::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
@@ -1902,7 +1902,7 @@ C++ includes: FormFactorPyramid.h
 %feature("docstring")  FormFactorPyramid::FormFactorPyramid "FormFactorPyramid::FormFactorPyramid(double base_edge, double height, double alpha)
 ";
 
-%feature("docstring")  FormFactorPyramid::clone "FormFactorPyramid* FormFactorPyramid::clone() const final
+%feature("docstring")  FormFactorPyramid::clone "FormFactorPyramid* FormFactorPyramid::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
@@ -2003,7 +2003,7 @@ C++ includes: FormFactorSphereGaussianRadius.h
 %feature("docstring")  FormFactorSphereGaussianRadius::FormFactorSphereGaussianRadius "FormFactorSphereGaussianRadius::FormFactorSphereGaussianRadius(double mean, double sigma)
 ";
 
-%feature("docstring")  FormFactorSphereGaussianRadius::clone "FormFactorSphereGaussianRadius* FormFactorSphereGaussianRadius::clone() const final
+%feature("docstring")  FormFactorSphereGaussianRadius::clone "FormFactorSphereGaussianRadius* FormFactorSphereGaussianRadius::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
@@ -2069,7 +2069,7 @@ C++ includes: FormFactorTetrahedron.h
 %feature("docstring")  FormFactorTetrahedron::FormFactorTetrahedron "FormFactorTetrahedron::FormFactorTetrahedron(double base_edge, double height, double alpha)
 ";
 
-%feature("docstring")  FormFactorTetrahedron::clone "FormFactorTetrahedron* FormFactorTetrahedron::clone() const final
+%feature("docstring")  FormFactorTetrahedron::clone "FormFactorTetrahedron* FormFactorTetrahedron::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
@@ -2101,7 +2101,7 @@ C++ includes: FormFactorTruncatedCube.h
 %feature("docstring")  FormFactorTruncatedCube::FormFactorTruncatedCube "FormFactorTruncatedCube::FormFactorTruncatedCube(double length, double removed_length)
 ";
 
-%feature("docstring")  FormFactorTruncatedCube::clone "FormFactorTruncatedCube* FormFactorTruncatedCube::clone() const final
+%feature("docstring")  FormFactorTruncatedCube::clone "FormFactorTruncatedCube* FormFactorTruncatedCube::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
@@ -2130,7 +2130,7 @@ C++ includes: FormFactorTruncatedSphere.h
 %feature("docstring")  FormFactorTruncatedSphere::FormFactorTruncatedSphere "FormFactorTruncatedSphere::FormFactorTruncatedSphere(double radius, double height, double dh)
 ";
 
-%feature("docstring")  FormFactorTruncatedSphere::clone "FormFactorTruncatedSphere* FormFactorTruncatedSphere::clone() const final
+%feature("docstring")  FormFactorTruncatedSphere::clone "FormFactorTruncatedSphere* FormFactorTruncatedSphere::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
@@ -2172,7 +2172,7 @@ C++ includes: FormFactorTruncatedSpheroid.h
 %feature("docstring")  FormFactorTruncatedSpheroid::FormFactorTruncatedSpheroid "FormFactorTruncatedSpheroid::FormFactorTruncatedSpheroid(double radius, double height, double height_flattening, double dh)
 ";
 
-%feature("docstring")  FormFactorTruncatedSpheroid::clone "FormFactorTruncatedSpheroid* FormFactorTruncatedSpheroid::clone() const final
+%feature("docstring")  FormFactorTruncatedSpheroid::clone "FormFactorTruncatedSpheroid* FormFactorTruncatedSpheroid::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
@@ -2275,7 +2275,7 @@ C++ includes: FTDecay1D.h
 %feature("docstring")  FTDecayFunction1DCauchy::FTDecayFunction1DCauchy "FTDecayFunction1DCauchy::FTDecayFunction1DCauchy(double decay_length)
 ";
 
-%feature("docstring")  FTDecayFunction1DCauchy::clone "FTDecayFunction1DCauchy * FTDecayFunction1DCauchy::clone() const
+%feature("docstring")  FTDecayFunction1DCauchy::clone "FTDecayFunction1DCauchy * FTDecayFunction1DCauchy::clone() const override
 ";
 
 %feature("docstring")  FTDecayFunction1DCauchy::accept "void FTDecayFunction1DCauchy::accept(INodeVisitor *visitor) const override
@@ -2299,7 +2299,7 @@ C++ includes: FTDecay1D.h
 %feature("docstring")  FTDecayFunction1DGauss::FTDecayFunction1DGauss "FTDecayFunction1DGauss::FTDecayFunction1DGauss(double decay_length)
 ";
 
-%feature("docstring")  FTDecayFunction1DGauss::clone "FTDecayFunction1DGauss * FTDecayFunction1DGauss::clone() const
+%feature("docstring")  FTDecayFunction1DGauss::clone "FTDecayFunction1DGauss * FTDecayFunction1DGauss::clone() const override
 ";
 
 %feature("docstring")  FTDecayFunction1DGauss::accept "void FTDecayFunction1DGauss::accept(INodeVisitor *visitor) const override
@@ -2323,7 +2323,7 @@ C++ includes: FTDecay1D.h
 %feature("docstring")  FTDecayFunction1DTriangle::FTDecayFunction1DTriangle "FTDecayFunction1DTriangle::FTDecayFunction1DTriangle(double decay_length)
 ";
 
-%feature("docstring")  FTDecayFunction1DTriangle::clone "FTDecayFunction1DTriangle * FTDecayFunction1DTriangle::clone() const
+%feature("docstring")  FTDecayFunction1DTriangle::clone "FTDecayFunction1DTriangle * FTDecayFunction1DTriangle::clone() const override
 ";
 
 %feature("docstring")  FTDecayFunction1DTriangle::accept "void FTDecayFunction1DTriangle::accept(INodeVisitor *visitor) const override
@@ -2347,7 +2347,7 @@ C++ includes: FTDecay1D.h
 %feature("docstring")  FTDecayFunction1DVoigt::FTDecayFunction1DVoigt "FTDecayFunction1DVoigt::FTDecayFunction1DVoigt(double decay_length, double eta)
 ";
 
-%feature("docstring")  FTDecayFunction1DVoigt::clone "FTDecayFunction1DVoigt * FTDecayFunction1DVoigt::clone() const
+%feature("docstring")  FTDecayFunction1DVoigt::clone "FTDecayFunction1DVoigt * FTDecayFunction1DVoigt::clone() const override
 ";
 
 %feature("docstring")  FTDecayFunction1DVoigt::accept "void FTDecayFunction1DVoigt::accept(INodeVisitor *visitor) const override
@@ -2374,7 +2374,7 @@ C++ includes: FTDecay2D.h
 %feature("docstring")  FTDecayFunction2DCauchy::FTDecayFunction2DCauchy "FTDecayFunction2DCauchy::FTDecayFunction2DCauchy(double decay_length_x, double decay_length_y, double gamma)
 ";
 
-%feature("docstring")  FTDecayFunction2DCauchy::clone "FTDecayFunction2DCauchy * FTDecayFunction2DCauchy::clone() const
+%feature("docstring")  FTDecayFunction2DCauchy::clone "FTDecayFunction2DCauchy * FTDecayFunction2DCauchy::clone() const override
 ";
 
 %feature("docstring")  FTDecayFunction2DCauchy::accept "void FTDecayFunction2DCauchy::accept(INodeVisitor *visitor) const override
@@ -2400,7 +2400,7 @@ C++ includes: FTDecay2D.h
 %feature("docstring")  FTDecayFunction2DGauss::FTDecayFunction2DGauss "FTDecayFunction2DGauss::FTDecayFunction2DGauss(double decay_length_x, double decay_length_y, double gamma)
 ";
 
-%feature("docstring")  FTDecayFunction2DGauss::clone "FTDecayFunction2DGauss * FTDecayFunction2DGauss::clone() const
+%feature("docstring")  FTDecayFunction2DGauss::clone "FTDecayFunction2DGauss * FTDecayFunction2DGauss::clone() const override
 ";
 
 %feature("docstring")  FTDecayFunction2DGauss::accept "void FTDecayFunction2DGauss::accept(INodeVisitor *visitor) const override
@@ -2426,7 +2426,7 @@ C++ includes: FTDecay2D.h
 %feature("docstring")  FTDecayFunction2DVoigt::FTDecayFunction2DVoigt "FTDecayFunction2DVoigt::FTDecayFunction2DVoigt(double decay_length_x, double decay_length_y, double gamma, double eta)
 ";
 
-%feature("docstring")  FTDecayFunction2DVoigt::clone "FTDecayFunction2DVoigt * FTDecayFunction2DVoigt::clone() const
+%feature("docstring")  FTDecayFunction2DVoigt::clone "FTDecayFunction2DVoigt * FTDecayFunction2DVoigt::clone() const override
 ";
 
 %feature("docstring")  FTDecayFunction2DVoigt::accept "void FTDecayFunction2DVoigt::accept(INodeVisitor *visitor) const override
@@ -2870,7 +2870,7 @@ C++ includes: Lattice2D.h
 %feature("docstring")  HexagonalLattice2D::HexagonalLattice2D "HexagonalLattice2D::HexagonalLattice2D(double length, double xi)
 ";
 
-%feature("docstring")  HexagonalLattice2D::clone "HexagonalLattice2D * HexagonalLattice2D::clone() const
+%feature("docstring")  HexagonalLattice2D::clone "HexagonalLattice2D * HexagonalLattice2D::clone() const override
 ";
 
 %feature("docstring")  HexagonalLattice2D::accept "void HexagonalLattice2D::accept(INodeVisitor *visitor) const override
@@ -3411,7 +3411,7 @@ C++ includes: FTDecay1D.h
 %feature("docstring")  IFTDecayFunction1D::IFTDecayFunction1D "IFTDecayFunction1D::IFTDecayFunction1D(const NodeMeta &meta, const std::vector< double > &PValues)
 ";
 
-%feature("docstring")  IFTDecayFunction1D::clone "virtual IFTDecayFunction1D* IFTDecayFunction1D::clone() const =0
+%feature("docstring")  IFTDecayFunction1D::clone "IFTDecayFunction1D* IFTDecayFunction1D::clone() const override=0
 ";
 
 %feature("docstring")  IFTDecayFunction1D::evaluate "virtual double IFTDecayFunction1D::evaluate(double q) const =0
@@ -3432,7 +3432,7 @@ C++ includes: FTDecay2D.h
 %feature("docstring")  IFTDecayFunction2D::IFTDecayFunction2D "IFTDecayFunction2D::IFTDecayFunction2D(const NodeMeta &meta, const std::vector< double > &PValues)
 ";
 
-%feature("docstring")  IFTDecayFunction2D::clone "virtual IFTDecayFunction2D* IFTDecayFunction2D::clone() const =0
+%feature("docstring")  IFTDecayFunction2D::clone "IFTDecayFunction2D* IFTDecayFunction2D::clone() const override=0
 ";
 
 %feature("docstring")  IFTDecayFunction2D::decayLengthX "double IFTDecayFunction2D::decayLengthX() const
@@ -3545,7 +3545,7 @@ C++ includes: IInterferenceFunction.h
 %feature("docstring")  IInterferenceFunction::IInterferenceFunction "IInterferenceFunction::IInterferenceFunction(double position_var)
 ";
 
-%feature("docstring")  IInterferenceFunction::clone "virtual IInterferenceFunction* IInterferenceFunction::clone() const =0
+%feature("docstring")  IInterferenceFunction::clone "IInterferenceFunction* IInterferenceFunction::clone() const override=0
 
 Returns a clone of this  ISampleNode object. 
 ";
@@ -4730,7 +4730,7 @@ C++ includes: Lattice2D.h
 %feature("docstring")  Lattice2D::Lattice2D "Lattice2D::Lattice2D(double xi)
 ";
 
-%feature("docstring")  Lattice2D::clone "virtual Lattice2D* Lattice2D::clone() const =0
+%feature("docstring")  Lattice2D::clone "Lattice2D* Lattice2D::clone() const override=0
 ";
 
 %feature("docstring")  Lattice2D::length1 "virtual double Lattice2D::length1() const =0
@@ -4939,12 +4939,12 @@ C++ includes: LayerInterface.h
 %feature("docstring")  LayerInterface::~LayerInterface "LayerInterface::~LayerInterface()
 ";
 
-%feature("docstring")  LayerInterface::clone "LayerInterface * LayerInterface::clone() const
+%feature("docstring")  LayerInterface::clone "LayerInterface * LayerInterface::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  LayerInterface::accept "virtual void LayerInterface::accept(INodeVisitor *visitor) const
+%feature("docstring")  LayerInterface::accept "void LayerInterface::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  LayerInterface::setRoughness "void LayerInterface::setRoughness(const LayerRoughness &roughness)
@@ -4963,7 +4963,7 @@ Returns roughness of the interface.
 %feature("docstring")  LayerInterface::bottomLayer "const Layer * LayerInterface::bottomLayer() const
 ";
 
-%feature("docstring")  LayerInterface::getChildren "std::vector< const INode * > LayerInterface::getChildren() const
+%feature("docstring")  LayerInterface::getChildren "std::vector< const INode * > LayerInterface::getChildren() const override
 ";
 
 
@@ -7277,7 +7277,7 @@ C++ includes: Lattice2D.h
 %feature("docstring")  SquareLattice2D::SquareLattice2D "SquareLattice2D::SquareLattice2D(double length, double xi=0.0)
 ";
 
-%feature("docstring")  SquareLattice2D::clone "SquareLattice2D * SquareLattice2D::clone() const
+%feature("docstring")  SquareLattice2D::clone "SquareLattice2D * SquareLattice2D::clone() const override
 ";
 
 %feature("docstring")  SquareLattice2D::accept "void SquareLattice2D::accept(INodeVisitor *visitor) const override
diff --git a/auto/Wrap/libBornAgainDevice.py b/auto/Wrap/libBornAgainDevice.py
index 2005f659088..714de2af31e 100644
--- a/auto/Wrap/libBornAgainDevice.py
+++ b/auto/Wrap/libBornAgainDevice.py
@@ -3511,6 +3511,14 @@ class IDetectorResolution(libBornAgainBase.ICloneable, libBornAgainParam.INode):
     __repr__ = _swig_repr
     __swig_destroy__ = _libBornAgainDevice.delete_IDetectorResolution
 
+    def clone(self):
+        r"""
+        clone(IDetectorResolution self) -> IDetectorResolution
+        IDetectorResolution* IDetectorResolution::clone() const override=0
+
+        """
+        return _libBornAgainDevice.IDetectorResolution_clone(self)
+
     def applyDetectorResolution(self, p_intensity_map):
         r"""
         applyDetectorResolution(IDetectorResolution self, IntensityData p_intensity_map)
@@ -3521,14 +3529,6 @@ class IDetectorResolution(libBornAgainBase.ICloneable, libBornAgainParam.INode):
         """
         return _libBornAgainDevice.IDetectorResolution_applyDetectorResolution(self, p_intensity_map)
 
-    def clone(self):
-        r"""
-        clone(IDetectorResolution self) -> IDetectorResolution
-        virtual IDetectorResolution* IDetectorResolution::clone() const =0
-
-        """
-        return _libBornAgainDevice.IDetectorResolution_clone(self)
-
 # Register IDetectorResolution in _libBornAgainDevice:
 _libBornAgainDevice.IDetectorResolution_swigregister(IDetectorResolution)
 
@@ -3589,18 +3589,10 @@ class ResolutionFunction2DGaussian(IResolutionFunction2D):
         """
         _libBornAgainDevice.ResolutionFunction2DGaussian_swiginit(self, _libBornAgainDevice.new_ResolutionFunction2DGaussian(sigma_x, sigma_y))
 
-    def evaluateCDF(self, x, y):
-        r"""
-        evaluateCDF(ResolutionFunction2DGaussian self, double x, double y) -> double
-        double ResolutionFunction2DGaussian::evaluateCDF(double x, double y) const
-
-        """
-        return _libBornAgainDevice.ResolutionFunction2DGaussian_evaluateCDF(self, x, y)
-
     def clone(self):
         r"""
         clone(ResolutionFunction2DGaussian self) -> ResolutionFunction2DGaussian
-        ResolutionFunction2DGaussian* ResolutionFunction2DGaussian::clone() const
+        ResolutionFunction2DGaussian* ResolutionFunction2DGaussian::clone() const override
 
         """
         return _libBornAgainDevice.ResolutionFunction2DGaussian_clone(self)
@@ -3613,6 +3605,14 @@ class ResolutionFunction2DGaussian(IResolutionFunction2D):
         """
         return _libBornAgainDevice.ResolutionFunction2DGaussian_accept(self, visitor)
 
+    def evaluateCDF(self, x, y):
+        r"""
+        evaluateCDF(ResolutionFunction2DGaussian self, double x, double y) -> double
+        double ResolutionFunction2DGaussian::evaluateCDF(double x, double y) const
+
+        """
+        return _libBornAgainDevice.ResolutionFunction2DGaussian_evaluateCDF(self, x, y)
+
     def getSigmaX(self):
         r"""
         getSigmaX(ResolutionFunction2DGaussian self) -> double
diff --git a/auto/Wrap/libBornAgainDevice_wrap.cpp b/auto/Wrap/libBornAgainDevice_wrap.cpp
index f875c08430b..4196be66008 100644
--- a/auto/Wrap/libBornAgainDevice_wrap.cpp
+++ b/auto/Wrap/libBornAgainDevice_wrap.cpp
@@ -34267,52 +34267,52 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_IDetectorResolution_applyDetectorResolution(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IDetectorResolution_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IDetectorResolution *arg1 = (IDetectorResolution *) 0 ;
-  OutputData< double > *arg2 = (OutputData< double > *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
-  PyObject *swig_obj[2] ;
+  PyObject *swig_obj[1] ;
+  IDetectorResolution *result = 0 ;
   
-  if (!SWIG_Python_UnpackTuple(args, "IDetectorResolution_applyDetectorResolution", 2, 2, swig_obj)) SWIG_fail;
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
   res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IDetectorResolution, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IDetectorResolution_applyDetectorResolution" "', argument " "1"" of type '" "IDetectorResolution const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IDetectorResolution_clone" "', argument " "1"" of type '" "IDetectorResolution const *""'"); 
   }
   arg1 = reinterpret_cast< IDetectorResolution * >(argp1);
-  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_OutputDataT_double_t, 0 |  0 );
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IDetectorResolution_applyDetectorResolution" "', argument " "2"" of type '" "OutputData< double > *""'"); 
-  }
-  arg2 = reinterpret_cast< OutputData< double > * >(argp2);
-  ((IDetectorResolution const *)arg1)->applyDetectorResolution(arg2);
-  resultobj = SWIG_Py_Void();
+  result = (IDetectorResolution *)((IDetectorResolution const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IDetectorResolution, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_IDetectorResolution_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IDetectorResolution_applyDetectorResolution(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IDetectorResolution *arg1 = (IDetectorResolution *) 0 ;
+  OutputData< double > *arg2 = (OutputData< double > *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  IDetectorResolution *result = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
   
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
+  if (!SWIG_Python_UnpackTuple(args, "IDetectorResolution_applyDetectorResolution", 2, 2, swig_obj)) SWIG_fail;
   res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IDetectorResolution, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IDetectorResolution_clone" "', argument " "1"" of type '" "IDetectorResolution const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IDetectorResolution_applyDetectorResolution" "', argument " "1"" of type '" "IDetectorResolution const *""'"); 
   }
   arg1 = reinterpret_cast< IDetectorResolution * >(argp1);
-  result = (IDetectorResolution *)((IDetectorResolution const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IDetectorResolution, 0 |  0 );
+  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_OutputDataT_double_t, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IDetectorResolution_applyDetectorResolution" "', argument " "2"" of type '" "OutputData< double > *""'"); 
+  }
+  arg2 = reinterpret_cast< OutputData< double > * >(argp2);
+  ((IDetectorResolution const *)arg1)->applyDetectorResolution(arg2);
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
@@ -34446,44 +34446,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_ResolutionFunction2DGaussian_evaluateCDF(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  ResolutionFunction2DGaussian *arg1 = (ResolutionFunction2DGaussian *) 0 ;
-  double arg2 ;
-  double arg3 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  double val3 ;
-  int ecode3 = 0 ;
-  PyObject *swig_obj[3] ;
-  double result;
-  
-  if (!SWIG_Python_UnpackTuple(args, "ResolutionFunction2DGaussian_evaluateCDF", 3, 3, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ResolutionFunction2DGaussian, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ResolutionFunction2DGaussian_evaluateCDF" "', argument " "1"" of type '" "ResolutionFunction2DGaussian const *""'"); 
-  }
-  arg1 = reinterpret_cast< ResolutionFunction2DGaussian * >(argp1);
-  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "ResolutionFunction2DGaussian_evaluateCDF" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "ResolutionFunction2DGaussian_evaluateCDF" "', argument " "3"" of type '" "double""'");
-  } 
-  arg3 = static_cast< double >(val3);
-  result = (double)((ResolutionFunction2DGaussian const *)arg1)->evaluateCDF(arg2,arg3);
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_ResolutionFunction2DGaussian_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   ResolutionFunction2DGaussian *arg1 = (ResolutionFunction2DGaussian *) 0 ;
@@ -34536,6 +34498,44 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_ResolutionFunction2DGaussian_evaluateCDF(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  ResolutionFunction2DGaussian *arg1 = (ResolutionFunction2DGaussian *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject *swig_obj[3] ;
+  double result;
+  
+  if (!SWIG_Python_UnpackTuple(args, "ResolutionFunction2DGaussian_evaluateCDF", 3, 3, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ResolutionFunction2DGaussian, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ResolutionFunction2DGaussian_evaluateCDF" "', argument " "1"" of type '" "ResolutionFunction2DGaussian const *""'"); 
+  }
+  arg1 = reinterpret_cast< ResolutionFunction2DGaussian * >(argp1);
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "ResolutionFunction2DGaussian_evaluateCDF" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "ResolutionFunction2DGaussian_evaluateCDF" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (double)((ResolutionFunction2DGaussian const *)arg1)->evaluateCDF(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_ResolutionFunction2DGaussian_getSigmaX(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   ResolutionFunction2DGaussian *arg1 = (ResolutionFunction2DGaussian *) 0 ;
@@ -44923,6 +44923,11 @@ static PyMethodDef SwigMethods[] = {
 		"virtual IDetectorResolution::~IDetectorResolution()\n"
 		"\n"
 		""},
+	 { "IDetectorResolution_clone", _wrap_IDetectorResolution_clone, METH_O, "\n"
+		"IDetectorResolution_clone(IDetectorResolution self) -> IDetectorResolution\n"
+		"IDetectorResolution* IDetectorResolution::clone() const override=0\n"
+		"\n"
+		""},
 	 { "IDetectorResolution_applyDetectorResolution", _wrap_IDetectorResolution_applyDetectorResolution, METH_VARARGS, "\n"
 		"IDetectorResolution_applyDetectorResolution(IDetectorResolution self, IntensityData p_intensity_map)\n"
 		"virtual void IDetectorResolution::applyDetectorResolution(OutputData< double > *p_intensity_map) const =0\n"
@@ -44930,11 +44935,6 @@ static PyMethodDef SwigMethods[] = {
 		"Apply the resolution function to the intensity data. \n"
 		"\n"
 		""},
-	 { "IDetectorResolution_clone", _wrap_IDetectorResolution_clone, METH_O, "\n"
-		"IDetectorResolution_clone(IDetectorResolution self) -> IDetectorResolution\n"
-		"virtual IDetectorResolution* IDetectorResolution::clone() const =0\n"
-		"\n"
-		""},
 	 { "IDetectorResolution_swigregister", IDetectorResolution_swigregister, METH_O, NULL},
 	 { "delete_IResolutionFunction2D", _wrap_delete_IResolutionFunction2D, METH_O, "\n"
 		"delete_IResolutionFunction2D(IResolutionFunction2D self)\n"
@@ -44957,14 +44957,9 @@ static PyMethodDef SwigMethods[] = {
 		"ResolutionFunction2DGaussian::ResolutionFunction2DGaussian(double sigma_x, double sigma_y)\n"
 		"\n"
 		""},
-	 { "ResolutionFunction2DGaussian_evaluateCDF", _wrap_ResolutionFunction2DGaussian_evaluateCDF, METH_VARARGS, "\n"
-		"ResolutionFunction2DGaussian_evaluateCDF(ResolutionFunction2DGaussian self, double x, double y) -> double\n"
-		"double ResolutionFunction2DGaussian::evaluateCDF(double x, double y) const\n"
-		"\n"
-		""},
 	 { "ResolutionFunction2DGaussian_clone", _wrap_ResolutionFunction2DGaussian_clone, METH_O, "\n"
 		"ResolutionFunction2DGaussian_clone(ResolutionFunction2DGaussian self) -> ResolutionFunction2DGaussian\n"
-		"ResolutionFunction2DGaussian* ResolutionFunction2DGaussian::clone() const\n"
+		"ResolutionFunction2DGaussian* ResolutionFunction2DGaussian::clone() const override\n"
 		"\n"
 		""},
 	 { "ResolutionFunction2DGaussian_accept", _wrap_ResolutionFunction2DGaussian_accept, METH_VARARGS, "\n"
@@ -44972,6 +44967,11 @@ static PyMethodDef SwigMethods[] = {
 		"void ResolutionFunction2DGaussian::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
+	 { "ResolutionFunction2DGaussian_evaluateCDF", _wrap_ResolutionFunction2DGaussian_evaluateCDF, METH_VARARGS, "\n"
+		"ResolutionFunction2DGaussian_evaluateCDF(ResolutionFunction2DGaussian self, double x, double y) -> double\n"
+		"double ResolutionFunction2DGaussian::evaluateCDF(double x, double y) const\n"
+		"\n"
+		""},
 	 { "ResolutionFunction2DGaussian_getSigmaX", _wrap_ResolutionFunction2DGaussian_getSigmaX, METH_O, "\n"
 		"ResolutionFunction2DGaussian_getSigmaX(ResolutionFunction2DGaussian self) -> double\n"
 		"double ResolutionFunction2DGaussian::getSigmaX() const\n"
diff --git a/auto/Wrap/libBornAgainParam.py b/auto/Wrap/libBornAgainParam.py
index 9980f8cff19..cbc4f56b4b3 100644
--- a/auto/Wrap/libBornAgainParam.py
+++ b/auto/Wrap/libBornAgainParam.py
@@ -3510,7 +3510,7 @@ class IDistribution1D(libBornAgainBase.ICloneable, INode):
     def clone(self):
         r"""
         clone(IDistribution1D self) -> IDistribution1D
-        virtual IDistribution1D* IDistribution1D::clone() const =0
+        IDistribution1D* IDistribution1D::clone() const override=0
 
         """
         return _libBornAgainParam.IDistribution1D_clone(self)
@@ -3819,7 +3819,7 @@ class DistributionGaussian(IDistribution1D):
     def clone(self):
         r"""
         clone(DistributionGaussian self) -> DistributionGaussian
-        DistributionGaussian* DistributionGaussian::clone() const final
+        DistributionGaussian* DistributionGaussian::clone() const override
 
         """
         return _libBornAgainParam.DistributionGaussian_clone(self)
@@ -3911,7 +3911,7 @@ class DistributionLogNormal(IDistribution1D):
     def clone(self):
         r"""
         clone(DistributionLogNormal self) -> DistributionLogNormal
-        DistributionLogNormal* DistributionLogNormal::clone() const final
+        DistributionLogNormal* DistributionLogNormal::clone() const override
 
         """
         return _libBornAgainParam.DistributionLogNormal_clone(self)
@@ -4115,7 +4115,7 @@ class DistributionTrapezoid(IDistribution1D):
     def clone(self):
         r"""
         clone(DistributionTrapezoid self) -> DistributionTrapezoid
-        DistributionTrapezoid* DistributionTrapezoid::clone() const final
+        DistributionTrapezoid* DistributionTrapezoid::clone() const override
 
         """
         return _libBornAgainParam.DistributionTrapezoid_clone(self)
diff --git a/auto/Wrap/libBornAgainParam_wrap.cpp b/auto/Wrap/libBornAgainParam_wrap.cpp
index d7f39b09f2e..125f5e7d28f 100644
--- a/auto/Wrap/libBornAgainParam_wrap.cpp
+++ b/auto/Wrap/libBornAgainParam_wrap.cpp
@@ -51415,7 +51415,7 @@ static PyMethodDef SwigMethods[] = {
 	 { "INodeVisitor_swiginit", INodeVisitor_swiginit, METH_VARARGS, NULL},
 	 { "IDistribution1D_clone", _wrap_IDistribution1D_clone, METH_O, "\n"
 		"IDistribution1D_clone(IDistribution1D self) -> IDistribution1D\n"
-		"virtual IDistribution1D* IDistribution1D::clone() const =0\n"
+		"IDistribution1D* IDistribution1D::clone() const override=0\n"
 		"\n"
 		""},
 	 { "IDistribution1D_probabilityDensity", _wrap_IDistribution1D_probabilityDensity, METH_VARARGS, "\n"
@@ -51600,7 +51600,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionGaussian_clone", _wrap_DistributionGaussian_clone, METH_O, "\n"
 		"DistributionGaussian_clone(DistributionGaussian self) -> DistributionGaussian\n"
-		"DistributionGaussian* DistributionGaussian::clone() const final\n"
+		"DistributionGaussian* DistributionGaussian::clone() const override\n"
 		"\n"
 		""},
 	 { "DistributionGaussian_probabilityDensity", _wrap_DistributionGaussian_probabilityDensity, METH_VARARGS, "\n"
@@ -51654,7 +51654,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionLogNormal_clone", _wrap_DistributionLogNormal_clone, METH_O, "\n"
 		"DistributionLogNormal_clone(DistributionLogNormal self) -> DistributionLogNormal\n"
-		"DistributionLogNormal* DistributionLogNormal::clone() const final\n"
+		"DistributionLogNormal* DistributionLogNormal::clone() const override\n"
 		"\n"
 		""},
 	 { "DistributionLogNormal_probabilityDensity", _wrap_DistributionLogNormal_probabilityDensity, METH_VARARGS, "\n"
@@ -51776,7 +51776,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionTrapezoid_clone", _wrap_DistributionTrapezoid_clone, METH_O, "\n"
 		"DistributionTrapezoid_clone(DistributionTrapezoid self) -> DistributionTrapezoid\n"
-		"DistributionTrapezoid* DistributionTrapezoid::clone() const final\n"
+		"DistributionTrapezoid* DistributionTrapezoid::clone() const override\n"
 		"\n"
 		""},
 	 { "DistributionTrapezoid_probabilityDensity", _wrap_DistributionTrapezoid_probabilityDensity, METH_VARARGS, "\n"
diff --git a/auto/Wrap/libBornAgainSample.py b/auto/Wrap/libBornAgainSample.py
index fc008f750c8..3cd6c673226 100644
--- a/auto/Wrap/libBornAgainSample.py
+++ b/auto/Wrap/libBornAgainSample.py
@@ -5153,7 +5153,7 @@ class IFTDecayFunction1D(libBornAgainBase.ICloneable, libBornAgainParam.INode):
     def clone(self):
         r"""
         clone(IFTDecayFunction1D self) -> IFTDecayFunction1D
-        virtual IFTDecayFunction1D* IFTDecayFunction1D::clone() const =0
+        IFTDecayFunction1D* IFTDecayFunction1D::clone() const override=0
 
         """
         return _libBornAgainSample.IFTDecayFunction1D_clone(self)
@@ -5203,7 +5203,7 @@ class FTDecayFunction1DCauchy(IFTDecayFunction1D):
     def clone(self):
         r"""
         clone(FTDecayFunction1DCauchy self) -> FTDecayFunction1DCauchy
-        FTDecayFunction1DCauchy * FTDecayFunction1DCauchy::clone() const
+        FTDecayFunction1DCauchy * FTDecayFunction1DCauchy::clone() const override
 
         """
         return _libBornAgainSample.FTDecayFunction1DCauchy_clone(self)
@@ -5253,7 +5253,7 @@ class FTDecayFunction1DGauss(IFTDecayFunction1D):
     def clone(self):
         r"""
         clone(FTDecayFunction1DGauss self) -> FTDecayFunction1DGauss
-        FTDecayFunction1DGauss * FTDecayFunction1DGauss::clone() const
+        FTDecayFunction1DGauss * FTDecayFunction1DGauss::clone() const override
 
         """
         return _libBornAgainSample.FTDecayFunction1DGauss_clone(self)
@@ -5303,7 +5303,7 @@ class FTDecayFunction1DTriangle(IFTDecayFunction1D):
     def clone(self):
         r"""
         clone(FTDecayFunction1DTriangle self) -> FTDecayFunction1DTriangle
-        FTDecayFunction1DTriangle * FTDecayFunction1DTriangle::clone() const
+        FTDecayFunction1DTriangle * FTDecayFunction1DTriangle::clone() const override
 
         """
         return _libBornAgainSample.FTDecayFunction1DTriangle_clone(self)
@@ -5353,7 +5353,7 @@ class FTDecayFunction1DVoigt(IFTDecayFunction1D):
     def clone(self):
         r"""
         clone(FTDecayFunction1DVoigt self) -> FTDecayFunction1DVoigt
-        FTDecayFunction1DVoigt * FTDecayFunction1DVoigt::clone() const
+        FTDecayFunction1DVoigt * FTDecayFunction1DVoigt::clone() const override
 
         """
         return _libBornAgainSample.FTDecayFunction1DVoigt_clone(self)
@@ -5405,7 +5405,7 @@ class IFTDecayFunction2D(libBornAgainBase.ICloneable, libBornAgainParam.INode):
     def clone(self):
         r"""
         clone(IFTDecayFunction2D self) -> IFTDecayFunction2D
-        virtual IFTDecayFunction2D* IFTDecayFunction2D::clone() const =0
+        IFTDecayFunction2D* IFTDecayFunction2D::clone() const override=0
 
         """
         return _libBornAgainSample.IFTDecayFunction2D_clone(self)
@@ -5491,7 +5491,7 @@ class FTDecayFunction2DCauchy(IFTDecayFunction2D):
     def clone(self):
         r"""
         clone(FTDecayFunction2DCauchy self) -> FTDecayFunction2DCauchy
-        FTDecayFunction2DCauchy * FTDecayFunction2DCauchy::clone() const
+        FTDecayFunction2DCauchy * FTDecayFunction2DCauchy::clone() const override
 
         """
         return _libBornAgainSample.FTDecayFunction2DCauchy_clone(self)
@@ -5543,7 +5543,7 @@ class FTDecayFunction2DGauss(IFTDecayFunction2D):
     def clone(self):
         r"""
         clone(FTDecayFunction2DGauss self) -> FTDecayFunction2DGauss
-        FTDecayFunction2DGauss * FTDecayFunction2DGauss::clone() const
+        FTDecayFunction2DGauss * FTDecayFunction2DGauss::clone() const override
 
         """
         return _libBornAgainSample.FTDecayFunction2DGauss_clone(self)
@@ -5595,7 +5595,7 @@ class FTDecayFunction2DVoigt(IFTDecayFunction2D):
     def clone(self):
         r"""
         clone(FTDecayFunction2DVoigt self) -> FTDecayFunction2DVoigt
-        FTDecayFunction2DVoigt * FTDecayFunction2DVoigt::clone() const
+        FTDecayFunction2DVoigt * FTDecayFunction2DVoigt::clone() const override
 
         """
         return _libBornAgainSample.FTDecayFunction2DVoigt_clone(self)
@@ -6833,7 +6833,7 @@ class IInterferenceFunction(ISampleNode):
     def clone(self):
         r"""
         clone(IInterferenceFunction self) -> IInterferenceFunction
-        virtual IInterferenceFunction* IInterferenceFunction::clone() const =0
+        IInterferenceFunction* IInterferenceFunction::clone() const override=0
 
         Returns a clone of this  ISampleNode object. 
 
@@ -8995,7 +8995,7 @@ class FormFactorAnisoPyramid(IFormFactorPolyhedron):
     def clone(self):
         r"""
         clone(FormFactorAnisoPyramid self) -> FormFactorAnisoPyramid
-        FormFactorAnisoPyramid* FormFactorAnisoPyramid::clone() const final
+        FormFactorAnisoPyramid* FormFactorAnisoPyramid::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -9161,7 +9161,7 @@ class FormFactorCantellatedCube(IFormFactorPolyhedron):
     def clone(self):
         r"""
         clone(FormFactorCantellatedCube self) -> FormFactorCantellatedCube
-        FormFactorCantellatedCube* FormFactorCantellatedCube::clone() const final
+        FormFactorCantellatedCube* FormFactorCantellatedCube::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -9309,7 +9309,7 @@ class FormFactorCone6(IFormFactorPolyhedron):
     def clone(self):
         r"""
         clone(FormFactorCone6 self) -> FormFactorCone6
-        FormFactorCone6* FormFactorCone6::clone() const final
+        FormFactorCone6* FormFactorCone6::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -9509,7 +9509,7 @@ class FormFactorCuboctahedron(IFormFactorPolyhedron):
     def clone(self):
         r"""
         clone(FormFactorCuboctahedron self) -> FormFactorCuboctahedron
-        FormFactorCuboctahedron* FormFactorCuboctahedron::clone() const final
+        FormFactorCuboctahedron* FormFactorCuboctahedron::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -9809,7 +9809,7 @@ class FormFactorEllipsoidalCylinder(IBornFF):
     def clone(self):
         r"""
         clone(FormFactorEllipsoidalCylinder self) -> FormFactorEllipsoidalCylinder
-        FormFactorEllipsoidalCylinder* FormFactorEllipsoidalCylinder::clone() const final
+        FormFactorEllipsoidalCylinder* FormFactorEllipsoidalCylinder::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -9897,7 +9897,7 @@ class FormFactorFullSphere(IBornFF):
     def clone(self):
         r"""
         clone(FormFactorFullSphere self) -> FormFactorFullSphere
-        FormFactorFullSphere* FormFactorFullSphere::clone() const final
+        FormFactorFullSphere* FormFactorFullSphere::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -9989,7 +9989,7 @@ class FormFactorFullSpheroid(IBornFF):
     def clone(self):
         r"""
         clone(FormFactorFullSpheroid self) -> FormFactorFullSpheroid
-        FormFactorFullSpheroid* FormFactorFullSpheroid::clone() const final
+        FormFactorFullSpheroid* FormFactorFullSpheroid::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -10070,7 +10070,7 @@ class FormFactorHemiEllipsoid(IBornFF):
     def clone(self):
         r"""
         clone(FormFactorHemiEllipsoid self) -> FormFactorHemiEllipsoid
-        FormFactorHemiEllipsoid* FormFactorHemiEllipsoid::clone() const final
+        FormFactorHemiEllipsoid* FormFactorHemiEllipsoid::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -10157,7 +10157,7 @@ class FormFactorHollowSphere(IBornFF):
     def clone(self):
         r"""
         clone(FormFactorHollowSphere self) -> FormFactorHollowSphere
-        FormFactorHollowSphere* FormFactorHollowSphere::clone() const final
+        FormFactorHollowSphere* FormFactorHollowSphere::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -10273,7 +10273,7 @@ class FormFactorLongBoxGauss(IBornFF):
     def clone(self):
         r"""
         clone(FormFactorLongBoxGauss self) -> FormFactorLongBoxGauss
-        FormFactorLongBoxGauss* FormFactorLongBoxGauss::clone() const final
+        FormFactorLongBoxGauss* FormFactorLongBoxGauss::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -10361,7 +10361,7 @@ class FormFactorLongBoxLorentz(IBornFF):
     def clone(self):
         r"""
         clone(FormFactorLongBoxLorentz self) -> FormFactorLongBoxLorentz
-        FormFactorLongBoxLorentz* FormFactorLongBoxLorentz::clone() const final
+        FormFactorLongBoxLorentz* FormFactorLongBoxLorentz::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -10553,7 +10553,7 @@ class FormFactorPyramid(IFormFactorPolyhedron):
     def clone(self):
         r"""
         clone(FormFactorPyramid self) -> FormFactorPyramid
-        FormFactorPyramid* FormFactorPyramid::clone() const final
+        FormFactorPyramid* FormFactorPyramid::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -10753,7 +10753,7 @@ class FormFactorTetrahedron(IFormFactorPolyhedron):
     def clone(self):
         r"""
         clone(FormFactorTetrahedron self) -> FormFactorTetrahedron
-        FormFactorTetrahedron* FormFactorTetrahedron::clone() const final
+        FormFactorTetrahedron* FormFactorTetrahedron::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -10821,7 +10821,7 @@ class FormFactorTruncatedCube(IFormFactorPolyhedron):
     def clone(self):
         r"""
         clone(FormFactorTruncatedCube self) -> FormFactorTruncatedCube
-        FormFactorTruncatedCube* FormFactorTruncatedCube::clone() const final
+        FormFactorTruncatedCube* FormFactorTruncatedCube::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -10881,7 +10881,7 @@ class FormFactorTruncatedSphere(IBornFF):
     def clone(self):
         r"""
         clone(FormFactorTruncatedSphere self) -> FormFactorTruncatedSphere
-        FormFactorTruncatedSphere* FormFactorTruncatedSphere::clone() const final
+        FormFactorTruncatedSphere* FormFactorTruncatedSphere::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -10969,7 +10969,7 @@ class FormFactorTruncatedSpheroid(IBornFF):
     def clone(self):
         r"""
         clone(FormFactorTruncatedSpheroid self) -> FormFactorTruncatedSpheroid
-        FormFactorTruncatedSpheroid* FormFactorTruncatedSpheroid::clone() const final
+        FormFactorTruncatedSpheroid* FormFactorTruncatedSpheroid::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -11137,7 +11137,7 @@ class FormFactorSphereGaussianRadius(IBornFF):
     def clone(self):
         r"""
         clone(FormFactorSphereGaussianRadius self) -> FormFactorSphereGaussianRadius
-        FormFactorSphereGaussianRadius* FormFactorSphereGaussianRadius::clone() const final
+        FormFactorSphereGaussianRadius* FormFactorSphereGaussianRadius::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -11484,7 +11484,7 @@ class Lattice2D(libBornAgainBase.ICloneable, libBornAgainParam.INode):
     def clone(self):
         r"""
         clone(Lattice2D self) -> Lattice2D
-        virtual Lattice2D* Lattice2D::clone() const =0
+        Lattice2D* Lattice2D::clone() const override=0
 
         """
         return _libBornAgainSample.Lattice2D_clone(self)
@@ -11573,7 +11573,7 @@ class BasicLattice2D(Lattice2D):
     def clone(self):
         r"""
         clone(BasicLattice2D self) -> BasicLattice2D
-        BasicLattice2D * BasicLattice2D::clone() const
+        BasicLattice2D * BasicLattice2D::clone() const override
 
         """
         return _libBornAgainSample.BasicLattice2D_clone(self)
@@ -11646,7 +11646,7 @@ class SquareLattice2D(Lattice2D):
     def clone(self):
         r"""
         clone(SquareLattice2D self) -> SquareLattice2D
-        SquareLattice2D * SquareLattice2D::clone() const
+        SquareLattice2D * SquareLattice2D::clone() const override
 
         """
         return _libBornAgainSample.SquareLattice2D_clone(self)
@@ -11719,7 +11719,7 @@ class HexagonalLattice2D(Lattice2D):
     def clone(self):
         r"""
         clone(HexagonalLattice2D self) -> HexagonalLattice2D
-        HexagonalLattice2D * HexagonalLattice2D::clone() const
+        HexagonalLattice2D * HexagonalLattice2D::clone() const override
 
         """
         return _libBornAgainSample.HexagonalLattice2D_clone(self)
diff --git a/auto/Wrap/libBornAgainSample_wrap.cpp b/auto/Wrap/libBornAgainSample_wrap.cpp
index 3bad3745673..c8a4a9bcf3f 100644
--- a/auto/Wrap/libBornAgainSample_wrap.cpp
+++ b/auto/Wrap/libBornAgainSample_wrap.cpp
@@ -72069,7 +72069,7 @@ static PyMethodDef SwigMethods[] = {
 	 { "ParticleDistribution_swiginit", ParticleDistribution_swiginit, METH_VARARGS, NULL},
 	 { "IFTDecayFunction1D_clone", _wrap_IFTDecayFunction1D_clone, METH_O, "\n"
 		"IFTDecayFunction1D_clone(IFTDecayFunction1D self) -> IFTDecayFunction1D\n"
-		"virtual IFTDecayFunction1D* IFTDecayFunction1D::clone() const =0\n"
+		"IFTDecayFunction1D* IFTDecayFunction1D::clone() const override=0\n"
 		"\n"
 		""},
 	 { "IFTDecayFunction1D_evaluate", _wrap_IFTDecayFunction1D_evaluate, METH_VARARGS, "\n"
@@ -72092,7 +72092,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDecayFunction1DCauchy_clone", _wrap_FTDecayFunction1DCauchy_clone, METH_O, "\n"
 		"FTDecayFunction1DCauchy_clone(FTDecayFunction1DCauchy self) -> FTDecayFunction1DCauchy\n"
-		"FTDecayFunction1DCauchy * FTDecayFunction1DCauchy::clone() const\n"
+		"FTDecayFunction1DCauchy * FTDecayFunction1DCauchy::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDecayFunction1DCauchy_accept", _wrap_FTDecayFunction1DCauchy_accept, METH_VARARGS, "\n"
@@ -72116,7 +72116,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDecayFunction1DGauss_clone", _wrap_FTDecayFunction1DGauss_clone, METH_O, "\n"
 		"FTDecayFunction1DGauss_clone(FTDecayFunction1DGauss self) -> FTDecayFunction1DGauss\n"
-		"FTDecayFunction1DGauss * FTDecayFunction1DGauss::clone() const\n"
+		"FTDecayFunction1DGauss * FTDecayFunction1DGauss::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDecayFunction1DGauss_accept", _wrap_FTDecayFunction1DGauss_accept, METH_VARARGS, "\n"
@@ -72140,7 +72140,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDecayFunction1DTriangle_clone", _wrap_FTDecayFunction1DTriangle_clone, METH_O, "\n"
 		"FTDecayFunction1DTriangle_clone(FTDecayFunction1DTriangle self) -> FTDecayFunction1DTriangle\n"
-		"FTDecayFunction1DTriangle * FTDecayFunction1DTriangle::clone() const\n"
+		"FTDecayFunction1DTriangle * FTDecayFunction1DTriangle::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDecayFunction1DTriangle_accept", _wrap_FTDecayFunction1DTriangle_accept, METH_VARARGS, "\n"
@@ -72164,7 +72164,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDecayFunction1DVoigt_clone", _wrap_FTDecayFunction1DVoigt_clone, METH_O, "\n"
 		"FTDecayFunction1DVoigt_clone(FTDecayFunction1DVoigt self) -> FTDecayFunction1DVoigt\n"
-		"FTDecayFunction1DVoigt * FTDecayFunction1DVoigt::clone() const\n"
+		"FTDecayFunction1DVoigt * FTDecayFunction1DVoigt::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDecayFunction1DVoigt_accept", _wrap_FTDecayFunction1DVoigt_accept, METH_VARARGS, "\n"
@@ -72187,7 +72187,7 @@ static PyMethodDef SwigMethods[] = {
 	 { "FTDecayFunction1DVoigt_swiginit", FTDecayFunction1DVoigt_swiginit, METH_VARARGS, NULL},
 	 { "IFTDecayFunction2D_clone", _wrap_IFTDecayFunction2D_clone, METH_O, "\n"
 		"IFTDecayFunction2D_clone(IFTDecayFunction2D self) -> IFTDecayFunction2D\n"
-		"virtual IFTDecayFunction2D* IFTDecayFunction2D::clone() const =0\n"
+		"IFTDecayFunction2D* IFTDecayFunction2D::clone() const override=0\n"
 		"\n"
 		""},
 	 { "IFTDecayFunction2D_decayLengthX", _wrap_IFTDecayFunction2D_decayLengthX, METH_O, "\n"
@@ -72237,7 +72237,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDecayFunction2DCauchy_clone", _wrap_FTDecayFunction2DCauchy_clone, METH_O, "\n"
 		"FTDecayFunction2DCauchy_clone(FTDecayFunction2DCauchy self) -> FTDecayFunction2DCauchy\n"
-		"FTDecayFunction2DCauchy * FTDecayFunction2DCauchy::clone() const\n"
+		"FTDecayFunction2DCauchy * FTDecayFunction2DCauchy::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDecayFunction2DCauchy_accept", _wrap_FTDecayFunction2DCauchy_accept, METH_VARARGS, "\n"
@@ -72263,7 +72263,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDecayFunction2DGauss_clone", _wrap_FTDecayFunction2DGauss_clone, METH_O, "\n"
 		"FTDecayFunction2DGauss_clone(FTDecayFunction2DGauss self) -> FTDecayFunction2DGauss\n"
-		"FTDecayFunction2DGauss * FTDecayFunction2DGauss::clone() const\n"
+		"FTDecayFunction2DGauss * FTDecayFunction2DGauss::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDecayFunction2DGauss_accept", _wrap_FTDecayFunction2DGauss_accept, METH_VARARGS, "\n"
@@ -72289,7 +72289,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDecayFunction2DVoigt_clone", _wrap_FTDecayFunction2DVoigt_clone, METH_O, "\n"
 		"FTDecayFunction2DVoigt_clone(FTDecayFunction2DVoigt self) -> FTDecayFunction2DVoigt\n"
-		"FTDecayFunction2DVoigt * FTDecayFunction2DVoigt::clone() const\n"
+		"FTDecayFunction2DVoigt * FTDecayFunction2DVoigt::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDecayFunction2DVoigt_accept", _wrap_FTDecayFunction2DVoigt_accept, METH_VARARGS, "\n"
@@ -72955,7 +72955,7 @@ static PyMethodDef SwigMethods[] = {
 	 { "MisesGaussPeakShape_swiginit", MisesGaussPeakShape_swiginit, METH_VARARGS, NULL},
 	 { "IInterferenceFunction_clone", _wrap_IInterferenceFunction_clone, METH_O, "\n"
 		"IInterferenceFunction_clone(IInterferenceFunction self) -> IInterferenceFunction\n"
-		"virtual IInterferenceFunction* IInterferenceFunction::clone() const =0\n"
+		"IInterferenceFunction* IInterferenceFunction::clone() const override=0\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
@@ -74273,7 +74273,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorAnisoPyramid_clone", _wrap_FormFactorAnisoPyramid_clone, METH_O, "\n"
 		"FormFactorAnisoPyramid_clone(FormFactorAnisoPyramid self) -> FormFactorAnisoPyramid\n"
-		"FormFactorAnisoPyramid* FormFactorAnisoPyramid::clone() const final\n"
+		"FormFactorAnisoPyramid* FormFactorAnisoPyramid::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
@@ -74366,7 +74366,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorCantellatedCube_clone", _wrap_FormFactorCantellatedCube_clone, METH_O, "\n"
 		"FormFactorCantellatedCube_clone(FormFactorCantellatedCube self) -> FormFactorCantellatedCube\n"
-		"FormFactorCantellatedCube* FormFactorCantellatedCube::clone() const final\n"
+		"FormFactorCantellatedCube* FormFactorCantellatedCube::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
@@ -74447,7 +74447,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorCone6_clone", _wrap_FormFactorCone6_clone, METH_O, "\n"
 		"FormFactorCone6_clone(FormFactorCone6 self) -> FormFactorCone6\n"
-		"FormFactorCone6* FormFactorCone6::clone() const final\n"
+		"FormFactorCone6* FormFactorCone6::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
@@ -74546,7 +74546,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorCuboctahedron_clone", _wrap_FormFactorCuboctahedron_clone, METH_O, "\n"
 		"FormFactorCuboctahedron_clone(FormFactorCuboctahedron self) -> FormFactorCuboctahedron\n"
-		"FormFactorCuboctahedron* FormFactorCuboctahedron::clone() const final\n"
+		"FormFactorCuboctahedron* FormFactorCuboctahedron::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
@@ -74712,7 +74712,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorEllipsoidalCylinder_clone", _wrap_FormFactorEllipsoidalCylinder_clone, METH_O, "\n"
 		"FormFactorEllipsoidalCylinder_clone(FormFactorEllipsoidalCylinder self) -> FormFactorEllipsoidalCylinder\n"
-		"FormFactorEllipsoidalCylinder* FormFactorEllipsoidalCylinder::clone() const final\n"
+		"FormFactorEllipsoidalCylinder* FormFactorEllipsoidalCylinder::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
@@ -74762,7 +74762,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorFullSphere_clone", _wrap_FormFactorFullSphere_clone, METH_O, "\n"
 		"FormFactorFullSphere_clone(FormFactorFullSphere self) -> FormFactorFullSphere\n"
-		"FormFactorFullSphere* FormFactorFullSphere::clone() const final\n"
+		"FormFactorFullSphere* FormFactorFullSphere::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
@@ -74816,7 +74816,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorFullSpheroid_clone", _wrap_FormFactorFullSpheroid_clone, METH_O, "\n"
 		"FormFactorFullSpheroid_clone(FormFactorFullSpheroid self) -> FormFactorFullSpheroid\n"
-		"FormFactorFullSpheroid* FormFactorFullSpheroid::clone() const final\n"
+		"FormFactorFullSpheroid* FormFactorFullSpheroid::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
@@ -74866,7 +74866,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorHemiEllipsoid_clone", _wrap_FormFactorHemiEllipsoid_clone, METH_O, "\n"
 		"FormFactorHemiEllipsoid_clone(FormFactorHemiEllipsoid self) -> FormFactorHemiEllipsoid\n"
-		"FormFactorHemiEllipsoid* FormFactorHemiEllipsoid::clone() const final\n"
+		"FormFactorHemiEllipsoid* FormFactorHemiEllipsoid::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
@@ -74915,7 +74915,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorHollowSphere_clone", _wrap_FormFactorHollowSphere_clone, METH_O, "\n"
 		"FormFactorHollowSphere_clone(FormFactorHollowSphere self) -> FormFactorHollowSphere\n"
-		"FormFactorHollowSphere* FormFactorHollowSphere::clone() const final\n"
+		"FormFactorHollowSphere* FormFactorHollowSphere::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
@@ -74976,7 +74976,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorLongBoxGauss_clone", _wrap_FormFactorLongBoxGauss_clone, METH_O, "\n"
 		"FormFactorLongBoxGauss_clone(FormFactorLongBoxGauss self) -> FormFactorLongBoxGauss\n"
-		"FormFactorLongBoxGauss* FormFactorLongBoxGauss::clone() const final\n"
+		"FormFactorLongBoxGauss* FormFactorLongBoxGauss::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
@@ -75026,7 +75026,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorLongBoxLorentz_clone", _wrap_FormFactorLongBoxLorentz_clone, METH_O, "\n"
 		"FormFactorLongBoxLorentz_clone(FormFactorLongBoxLorentz self) -> FormFactorLongBoxLorentz\n"
-		"FormFactorLongBoxLorentz* FormFactorLongBoxLorentz::clone() const final\n"
+		"FormFactorLongBoxLorentz* FormFactorLongBoxLorentz::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
@@ -75128,7 +75128,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorPyramid_clone", _wrap_FormFactorPyramid_clone, METH_O, "\n"
 		"FormFactorPyramid_clone(FormFactorPyramid self) -> FormFactorPyramid\n"
-		"FormFactorPyramid* FormFactorPyramid::clone() const final\n"
+		"FormFactorPyramid* FormFactorPyramid::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
@@ -75227,7 +75227,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorTetrahedron_clone", _wrap_FormFactorTetrahedron_clone, METH_O, "\n"
 		"FormFactorTetrahedron_clone(FormFactorTetrahedron self) -> FormFactorTetrahedron\n"
-		"FormFactorTetrahedron* FormFactorTetrahedron::clone() const final\n"
+		"FormFactorTetrahedron* FormFactorTetrahedron::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
@@ -75263,7 +75263,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorTruncatedCube_clone", _wrap_FormFactorTruncatedCube_clone, METH_O, "\n"
 		"FormFactorTruncatedCube_clone(FormFactorTruncatedCube self) -> FormFactorTruncatedCube\n"
-		"FormFactorTruncatedCube* FormFactorTruncatedCube::clone() const final\n"
+		"FormFactorTruncatedCube* FormFactorTruncatedCube::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
@@ -75294,7 +75294,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorTruncatedSphere_clone", _wrap_FormFactorTruncatedSphere_clone, METH_O, "\n"
 		"FormFactorTruncatedSphere_clone(FormFactorTruncatedSphere self) -> FormFactorTruncatedSphere\n"
-		"FormFactorTruncatedSphere* FormFactorTruncatedSphere::clone() const final\n"
+		"FormFactorTruncatedSphere* FormFactorTruncatedSphere::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
@@ -75344,7 +75344,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorTruncatedSpheroid_clone", _wrap_FormFactorTruncatedSpheroid_clone, METH_O, "\n"
 		"FormFactorTruncatedSpheroid_clone(FormFactorTruncatedSpheroid self) -> FormFactorTruncatedSpheroid\n"
-		"FormFactorTruncatedSpheroid* FormFactorTruncatedSpheroid::clone() const final\n"
+		"FormFactorTruncatedSpheroid* FormFactorTruncatedSpheroid::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
@@ -75439,7 +75439,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorSphereGaussianRadius_clone", _wrap_FormFactorSphereGaussianRadius_clone, METH_O, "\n"
 		"FormFactorSphereGaussianRadius_clone(FormFactorSphereGaussianRadius self) -> FormFactorSphereGaussianRadius\n"
-		"FormFactorSphereGaussianRadius* FormFactorSphereGaussianRadius::clone() const final\n"
+		"FormFactorSphereGaussianRadius* FormFactorSphereGaussianRadius::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
@@ -75640,7 +75640,7 @@ static PyMethodDef SwigMethods[] = {
 	 { "Lattice3D_swiginit", Lattice3D_swiginit, METH_VARARGS, NULL},
 	 { "Lattice2D_clone", _wrap_Lattice2D_clone, METH_O, "\n"
 		"Lattice2D_clone(Lattice2D self) -> Lattice2D\n"
-		"virtual Lattice2D* Lattice2D::clone() const =0\n"
+		"Lattice2D* Lattice2D::clone() const override=0\n"
 		"\n"
 		""},
 	 { "Lattice2D_length1", _wrap_Lattice2D_length1, METH_O, "\n"
@@ -75687,7 +75687,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "BasicLattice2D_clone", _wrap_BasicLattice2D_clone, METH_O, "\n"
 		"BasicLattice2D_clone(BasicLattice2D self) -> BasicLattice2D\n"
-		"BasicLattice2D * BasicLattice2D::clone() const\n"
+		"BasicLattice2D * BasicLattice2D::clone() const override\n"
 		"\n"
 		""},
 	 { "BasicLattice2D_accept", _wrap_BasicLattice2D_accept, METH_VARARGS, "\n"
@@ -75725,7 +75725,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "SquareLattice2D_clone", _wrap_SquareLattice2D_clone, METH_O, "\n"
 		"SquareLattice2D_clone(SquareLattice2D self) -> SquareLattice2D\n"
-		"SquareLattice2D * SquareLattice2D::clone() const\n"
+		"SquareLattice2D * SquareLattice2D::clone() const override\n"
 		"\n"
 		""},
 	 { "SquareLattice2D_accept", _wrap_SquareLattice2D_accept, METH_VARARGS, "\n"
@@ -75763,7 +75763,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "HexagonalLattice2D_clone", _wrap_HexagonalLattice2D_clone, METH_O, "\n"
 		"HexagonalLattice2D_clone(HexagonalLattice2D self) -> HexagonalLattice2D\n"
-		"HexagonalLattice2D * HexagonalLattice2D::clone() const\n"
+		"HexagonalLattice2D * HexagonalLattice2D::clone() const override\n"
 		"\n"
 		""},
 	 { "HexagonalLattice2D_accept", _wrap_HexagonalLattice2D_accept, METH_VARARGS, "\n"
-- 
GitLab