From 3a746cb52261d023df7b6746185ae402c877f2e3 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (l)" <j.wuttke@fz-juelich.de>
Date: Wed, 17 Aug 2016 23:51:01 +0200
Subject: [PATCH] 11ify IShape2D and children (intended to enable automatic
 Python export, which however is impossible because these classes are not
 IParameterized).

---
 Core/Export/PythonFormatting.cpp      |  63 ++++----
 Core/Mask/Ellipse.cpp                 |  35 ++--
 Core/Mask/Ellipse.h                   |  16 +-
 Core/Mask/IShape2D.h                  |  27 ++--
 Core/Mask/InfinitePlane.cpp           |  40 -----
 Core/Mask/InfinitePlane.h             |  18 +--
 Core/Mask/Line.cpp                    |  57 ++-----
 Core/Mask/Line.h                      |  45 ++----
 Core/Mask/MaskCoordinateFunction.h    |   9 +-
 Core/Mask/Polygon.cpp                 |  67 ++++----
 Core/Mask/Polygon.h                   |  37 ++---
 Core/Mask/Rectangle.cpp               |  42 +----
 Core/Mask/Rectangle.h                 |  27 +---
 Doc/Doxygen/defgroups.dox             |   3 +
 Doc/Doxygen/userapi.dox               |   3 +
 Fit/Parameters/FitSuiteParameters.cpp |   3 -
 Fit/Parameters/FitSuiteParameters.h   |   2 +-
 auto/Wrap/doxygen_core.i              | 221 ++++++++------------------
 auto/Wrap/doxygen_fit.i               | 201 ++++++++++-------------
 auto/Wrap/libBornAgainCore.py         | 107 ++++++++-----
 auto/Wrap/libBornAgainCore_wrap.cpp   | 117 ++++++++------
 auto/Wrap/libBornAgainFit.py          |  97 +++++++----
 auto/Wrap/libBornAgainFit_wrap.cpp    |  91 ++++++++---
 23 files changed, 572 insertions(+), 756 deletions(-)
 delete mode 100644 Core/Mask/InfinitePlane.cpp

diff --git a/Core/Export/PythonFormatting.cpp b/Core/Export/PythonFormatting.cpp
index b61eb67d58d..945bc69d038 100644
--- a/Core/Export/PythonFormatting.cpp
+++ b/Core/Export/PythonFormatting.cpp
@@ -92,20 +92,36 @@ std::string getRepresentation(const IDistribution1D* distribution)
                 << printDouble(d->getMean()) << ", "
                 << printDouble(d->getSigma()) << ")";
      }
-     else {
+     else
          throw Exceptions::RuntimeErrorException(
             "getRepresentation(const IDistribution1D* distribution) "
             "-> Error. Unknown distribution type");
-     }
      return result.str();
 }
 
 std::string getRepresentation(
     const std::string& indent, const Geometry::IShape2D* ishape, bool mask_value)
-{     std::ostringstream result;
-      result << std::setprecision(12);
+{
+    std::ostringstream result;
+    result << std::setprecision(12);
+
+    if (const Geometry::Polygon* shape = dynamic_cast<const Geometry::Polygon*>(ishape)) {
+        std::vector<double> xpos, ypos;
+        shape->getPoints(xpos, ypos);
+        result << indent << "points = [";
+        for(size_t i=0; i<xpos.size(); ++i) {
+            result << "[" << printDegrees(xpos[i]) << ", " <<
+                printDegrees(ypos[i]) << "]";
+            if(i!= xpos.size()-1) result << ", ";
+        }
+        result << "]\n";
+        result << indent << "simulation.addMask(" <<
+            "ba.Polygon(points), " << printBool(mask_value) << ")\n";
+
+    } else if(dynamic_cast<const Geometry::InfinitePlane*>(ishape)) {
+        result << indent << "simulation.maskAll()\n";
 
-    if(const Geometry::Ellipse* shape = dynamic_cast<const Geometry::Ellipse*>(ishape)) {
+    } else if(const Geometry::Ellipse* shape = dynamic_cast<const Geometry::Ellipse*>(ishape)) {
         result << indent << "simulation.addMask(";
         result << "ba.Ellipse("
                << printDegrees(shape->getCenterX()) << ", "
@@ -126,20 +142,6 @@ std::string getRepresentation(
                << printBool(mask_value) << ")\n";
     }
 
-    else if(const Geometry::Polygon* shape = dynamic_cast<const Geometry::Polygon*>(ishape)) {
-        std::vector<double> xpos, ypos;
-        shape->getPoints(xpos, ypos);
-        result << indent << "points = [";
-        for(size_t i=0; i<xpos.size(); ++i) {
-            result << "[" << printDegrees(xpos[i]) << ", " <<
-                printDegrees(ypos[i]) << "]";
-            if(i!= xpos.size()-1) result << ", ";
-        }
-        result << "]\n";
-        result << indent << "simulation.addMask(" <<
-            "ba.Polygon(points), " << printBool(mask_value) << ")\n";
-    }
-
     else if(const Geometry::VerticalLine* shape =
             dynamic_cast<const Geometry::VerticalLine*>(ishape)) {
         result << indent << "simulation.addMask(";
@@ -154,11 +156,11 @@ std::string getRepresentation(
         result << "ba.HorizontalLine("
                << printDegrees(shape->getYpos()) << "), "
                << printBool(mask_value) << ")\n";
-    }
 
-    else if(dynamic_cast<const Geometry::InfinitePlane*>(ishape)) {
-        result << indent << "simulation.maskAll()\n";
-    }
+    } else
+        throw Exceptions::RuntimeErrorException(
+            "getRepresentation(const IShape2D*) -> Error. Unknown shape");
+
     return result.str();
 }
 
@@ -176,7 +178,7 @@ std::string printDouble(double input)
         return inter.str();
     }
     inter << input;
-    if(inter.str().find('e') == std::string::npos && inter.str().find('.') == std::string::npos)
+    if (inter.str().find('e') == std::string::npos && inter.str().find('.') == std::string::npos)
         inter << ".0";
     return inter.str();
 }
@@ -197,13 +199,14 @@ std::string printScientificDouble(double input)
     inter << input;
 
     std::string::size_type pos = inter.str().find('e');
-    if(pos == std::string::npos) return inter.str();
+    if (pos == std::string::npos)
+        return inter.str();
 
     std::string part1 = inter.str().substr(0, pos);
     std::string part2 = inter.str().substr(pos, std::string::npos);
 
     part1.erase(part1.find_last_not_of('0') + 1, std::string::npos);
-    if(part1.back() == '.') part1 += "0";
+    if (part1.back() == '.') part1 += "0";
 
     return part1+part2;
 }
@@ -211,9 +214,8 @@ std::string printScientificDouble(double input)
 std::string printDegrees(double input)
 {
     std::ostringstream inter;
-    inter << std::setprecision(11);
-    inter << Units::rad2deg(input);
-    if(inter.str().find('e') == std::string::npos && inter.str().find('.') == std::string::npos)
+    inter << std::setprecision(11) << Units::rad2deg(input);
+    if (inter.str().find('e') == std::string::npos && inter.str().find('.') == std::string::npos)
         inter << ".0";
     inter << "*deg";
     return inter.str();
@@ -232,7 +234,8 @@ bool isHexagonal(double length1, double length2, double angle)
 std::string printKvector(const kvector_t value)
 {
     std::ostringstream result;
-    result << "kvector_t(" << printDouble(value.x()) << ", "
+    result << "kvector_t("
+           << printDouble(value.x()) << ", "
            << printDouble(value.y()) << ", "
            << printDouble(value.z()) << ")";
     return result.str();
diff --git a/Core/Mask/Ellipse.cpp b/Core/Mask/Ellipse.cpp
index 9aea28775a7..3a6d1c6e49a 100644
--- a/Core/Mask/Ellipse.cpp
+++ b/Core/Mask/Ellipse.cpp
@@ -19,25 +19,23 @@
 
 namespace Geometry {
 
+//! @param xcenter x-coordinate of Ellipse's center
+//! @param ycenter y-coordinate of Ellipse's center
+//! @param xradius Radius along x-axis
+//! @param yradius Radius along y-axis
+//! @param theta Angle of Ellipse rotation in radians
 Ellipse::Ellipse(double xcenter, double ycenter, double xradius, double yradius, double theta)
-    : m_xc(xcenter)
+    : IShape2D("Ellipse")
+    , m_xc(xcenter)
     , m_yc(ycenter)
     , m_xr(xradius)
     , m_yr(yradius)
     , m_theta(theta)
 {
-    if(xradius <= 0.0 || yradius <= 0.0) {
-        std::ostringstream message;
-        message <<
+    if(xradius <= 0.0 || yradius <= 0.0)
+        throw Exceptions::LogicErrorException(
             "Ellipse::Ellipse(double xcenter, double ycenter, double xradius, double yradius) "
-            "-> Error. Radius can't be negative\n";
-        throw Exceptions::LogicErrorException(message.str());
-    }
-}
-
-Ellipse* Ellipse::clone() const
-{
-    return new Ellipse(*this);
+            "-> Error. Radius can't be negative\n");
 }
 
 bool Ellipse::contains(double x, double y) const
@@ -45,21 +43,14 @@ bool Ellipse::contains(double x, double y) const
     double u = std::cos(m_theta)*(x-m_xc) + std::sin(m_theta)*(y-m_yc);
     double v = -std::sin(m_theta)*(x-m_xc) + std::cos(m_theta)*(y-m_yc);
     double d = (u/m_xr)*(u/m_xr) + (v/m_yr)*(v/m_yr);
-    return (d<=1 ? true : false);
+    return d<=1;
 }
 
+//! Returns true if area defined by two bins is inside or on border of ellipse;
+//! more precisely, if mid point of two bins satisfy this condition.
 bool Ellipse::contains(const Bin1D &binx, const Bin1D &biny) const
 {
     return contains(binx.getMidPoint(), biny.getMidPoint());
 }
 
-Ellipse::Ellipse(const Ellipse &other)
-    : m_xc(other.m_xc)
-    , m_yc(other.m_yc)
-    , m_xr(other.m_xr)
-    , m_yr(other.m_yr)
-    , m_theta(other.m_theta)
-{
-}
-
 } // namespace Geometry
diff --git a/Core/Mask/Ellipse.h b/Core/Mask/Ellipse.h
index 8a87be4a312..b47cbf30e2b 100644
--- a/Core/Mask/Ellipse.h
+++ b/Core/Mask/Ellipse.h
@@ -26,31 +26,19 @@ namespace Geometry {
 
 class  BA_CORE_API_ Ellipse : public IShape2D {
 public:
-    //! Ellipse constructor
-    //! @param xcenter x-coordinate of Ellipse's center
-    //! @param ycenter y-coordinate of Ellipse's center
-    //! @param xradius Radius along x-axis
-    //! @param yradius Radius along y-axis
-    //! @param theta Angle of Ellipse rotation in radians
     Ellipse(double xcenter, double ycenter, double xradius, double yradius, double theta = 0.0);
+    Ellipse *clone() const { return new Ellipse(m_xc, m_yc, m_xr, m_yr, m_theta); }
 
-    Ellipse *clone() const;
-
-    //! Returns true if given point is inside or on border of ellipse
     bool contains(double x, double y) const;
-
-    //! Returns true if area defined by two bins is inside or on border of ellipse.
-    //! More precisely, if mid point of two bins satisfy this condition.
     bool contains(const Bin1D &binx, const Bin1D &biny) const;
 
     double getCenterX() const { return m_xc; }
     double getCenterY() const { return m_yc; }
     double getRadiusX() const { return m_xr; }
     double getRadiusY() const { return m_yr; }
-    double getTheta() const { return m_theta; }
+    double getTheta()   const { return m_theta; }
 
 private:
-    Ellipse(const Ellipse& other);
     double m_xc, m_yc, m_xr, m_yr, m_theta;
 };
 
diff --git a/Core/Mask/IShape2D.h b/Core/Mask/IShape2D.h
index d6df66af82c..16a551cbcf2 100644
--- a/Core/Mask/IShape2D.h
+++ b/Core/Mask/IShape2D.h
@@ -17,40 +17,33 @@
 #define ISHAPE2D_H
 
 #include "ICloneable.h"
+#include "INamed.h"
 #include <iostream>
 
 struct Bin1D;
 
 namespace Geometry {
 
-//! @class IShape2D
+//! Basic class for all shapes in 2D.
 //! @ingroup tools
-//! @brief Basic class for all shapes in 2D
 
-class BA_CORE_API_ IShape2D : public ICloneable {
+class BA_CORE_API_ IShape2D : public ICloneable, public INamed {
 public:
-
+    IShape2D(const std::string& name) : INamed(name) {}
     virtual IShape2D *clone() const = 0;
 
-    //! Returns true if point with given coordinates is inside or on border of the shape
+    //! Returns true if point with given coordinates is inside or on border of the shape.
     virtual bool contains(double x, double y) const = 0;
 
-    //! Returns true if area defined by two bins is inside or on border of the shape
+    //! Returns true if area defined by two bins is inside or on border of polygon
+    //! (more precisely, if mid point of two bins satisfy this condition).
     virtual bool contains(const Bin1D &binx, const Bin1D &biny) const = 0;
 
-    friend std::ostream &operator<<(std::ostream &ostr, const IShape2D &shape)
-    {
-        shape.print(ostr);
-        return ostr;
-    }
+    friend std::ostream &operator<<(std::ostream &ostr, const IShape2D &shape) {
+        shape.print(ostr); return ostr; }
 
 protected:
-
-    virtual void print(std::ostream &ostr) const
-    {
-        ostr << "IShape2D";
-    }
-
+    virtual void print(std::ostream &ostr) const { ostr << getName(); }
 };
 
 } // namespace Geometry
diff --git a/Core/Mask/InfinitePlane.cpp b/Core/Mask/InfinitePlane.cpp
deleted file mode 100644
index b41d0e3b539..00000000000
--- a/Core/Mask/InfinitePlane.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Core/Mask/InfinitePlane.cpp
-//! @brief     Implements class InfinitePlane.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2015
-//! @authors   Scientific Computing Group at MLZ Garching
-//! @authors   C. Durniak, M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke
-//
-// ************************************************************************** //
-
-#include "InfinitePlane.h"
-
-namespace Geometry {
-
-InfinitePlane *InfinitePlane::clone() const
-{
-    return new InfinitePlane();
-}
-
-bool InfinitePlane::contains(double x, double y) const
-{
-    (void)x;
-    (void)y;
-    return true;
-}
-
-bool InfinitePlane::contains(const Bin1D &binx, const Bin1D &biny) const
-{
-    (void)binx;
-    (void)biny;
-    return true;
-}
-
-
-} // namespace Geometry
diff --git a/Core/Mask/InfinitePlane.h b/Core/Mask/InfinitePlane.h
index 27ae4cec079..653aa504c56 100644
--- a/Core/Mask/InfinitePlane.h
+++ b/Core/Mask/InfinitePlane.h
@@ -20,22 +20,16 @@
 
 namespace Geometry {
 
-
-//! @class InfinitePlane
+//! The infinite plane is used for masking everything once and forever.
 //! @ingroup tools
-//! @brief The infinite plane is used in masking to mask everythin once and forever.
 
-class BA_CORE_API_  InfinitePlane : public IShape2D {
+class BA_CORE_API_ InfinitePlane : public IShape2D {
 public:
-    InfinitePlane(){}
-
-    InfinitePlane *clone() const;
-
-    //! Returns true if given point is inside or on border of rectangle
-    bool contains(double x, double y) const;
+    InfinitePlane() : IShape2D("InfinitePlane") {}
+    InfinitePlane *clone() const { return new InfinitePlane(); }
 
-    //! Returns true if mid point of two bins is inside rectangle.
-    bool contains(const Bin1D &binx, const Bin1D &biny) const;
+    bool contains(double, double) const { return true; }
+    bool contains(const Bin1D&, const Bin1D&) const { return true; }
 };
 
 } // namespace Geometry
diff --git a/Core/Mask/Line.cpp b/Core/Mask/Line.cpp
index cd50aba2012..3b6191d83c4 100644
--- a/Core/Mask/Line.cpp
+++ b/Core/Mask/Line.cpp
@@ -30,14 +30,8 @@ typedef model::linestring<point_t> line_t;
 namespace Geometry {
 
 Line::Line(double x1, double y1, double x2, double y2)
-    : m_x1(x1), m_y1(y1), m_x2(x2), m_y2(y2)
-{
-}
-
-Line *Line::clone() const
-{
-    return new Line(*this);
-}
+    : IShape2D("Line"), m_x1(x1), m_y1(y1), m_x2(x2), m_y2(y2)
+{}
 
 bool Line::contains(double x, double y) const
 {
@@ -48,12 +42,12 @@ bool Line::contains(double x, double y) const
 
     double d = distance(p, line);
 
-    return (d<Numeric::double_epsilon ? true : false);
+    return d<Numeric::double_epsilon;
 }
 
 // Calculates if line crosses the box made out of our bins.
 // Ugly implementation, see discussion at http://stackoverflow.com/questions/21408977
-bool Line::contains(const Bin1D &binx, const Bin1D &biny) const
+bool Line::contains(const Bin1D& binx, const Bin1D& biny) const
 {
     std::vector<point_t> box_points;
     box_points.push_back(point_t(binx.m_lower, biny.m_lower));
@@ -70,22 +64,13 @@ bool Line::contains(const Bin1D &binx, const Bin1D &biny) const
                       line_t(line_points.begin(),line_points.end()));
 }
 
-Line::Line(const Line &other)
-    : m_x1(other.m_x1), m_y1(other.m_y1), m_x2(other.m_x2), m_y2(other.m_y2)
-{
-}
 
 // ------------------------------------------------------------------------- //
 
+//! @param x The value at which it crosses x-axes
 VerticalLine::VerticalLine(double x)
-    : m_x(x)
-{
-}
-
-VerticalLine *VerticalLine::clone() const
-{
-    return new VerticalLine(*this);
-}
+    : IShape2D("VerticalLine"), m_x(x)
+{}
 
 bool VerticalLine::contains(double x, double /*y*/) const
 {
@@ -94,26 +79,16 @@ bool VerticalLine::contains(double x, double /*y*/) const
 
 bool VerticalLine::contains(const Bin1D& binx, const Bin1D& /*biny*/) const
 {
-    if(m_x>=binx.m_lower && m_x <= binx.m_upper) return true;
-    return false;
+    return m_x>=binx.m_lower && m_x <= binx.m_upper;
 }
 
-VerticalLine::VerticalLine(const VerticalLine &other)
-    : m_x(other.m_x)
-{
-}
 
 // ------------------------------------------------------------------------- //
 
+//! @param y The value at which it crosses y-axes
 HorizontalLine::HorizontalLine(double y)
-    : m_y(y)
-{
-}
-
-HorizontalLine *HorizontalLine::clone() const
-{
-    return new HorizontalLine(*this);
-}
+    : IShape2D("HorizontalLine"), m_y(y)
+{}
 
 bool HorizontalLine::contains(double /*x*/, double y) const
 {
@@ -122,15 +97,7 @@ bool HorizontalLine::contains(double /*x*/, double y) const
 
 bool HorizontalLine::contains(const Bin1D& /*binx*/, const Bin1D& biny) const
 {
-    if(m_y>=biny.m_lower && m_y <= biny.m_upper) return true;
-    return false;
-}
-
-HorizontalLine::HorizontalLine(const HorizontalLine &other)
-    : m_y(other.m_y)
-{
+    return m_y>=biny.m_lower && m_y <= biny.m_upper;
 }
 
-
-
 } // namespace Geometry
diff --git a/Core/Mask/Line.h b/Core/Mask/Line.h
index 121a24cc4ca..c3c88b20f94 100644
--- a/Core/Mask/Line.h
+++ b/Core/Mask/Line.h
@@ -20,80 +20,57 @@
 
 namespace Geometry {
 
-
-//! @class Line
-//! @ingroup tools
-//! @brief The line segment
+//! A line segment.
+//! @ingroup mask
 
 class  BA_CORE_API_ Line : public IShape2D {
 public:
-    //! Line segment constructor
     Line(double x1, double y1, double x2, double y2);
+    Line *clone() const { return new Line(m_x1, m_y1, m_x2, m_y2); }
 
-    Line *clone() const;
-
-    //! Returns true if given point is on this line segment
     bool contains(double x, double y) const;
-
-    //! Returns true if the line crosses the area defined by two given bins
     bool contains(const Bin1D &binx, const Bin1D &biny) const;
 
 private:
-    Line(const Line& other);
     double m_x1, m_y1, m_x2, m_y2;
 };
 
-//! @class VerticalLine
-//! @ingroup tools
-//! @brief Vertical infinite line
+
+//! An infinite vertical line.
+//! @ingroup mask
 
 class BA_CORE_API_ VerticalLine : public IShape2D {
 public:
-    //! Infinite vertical line constructor
-    //! @param x The value at which it crosses x-axes
     VerticalLine(double x);
+    VerticalLine *clone() const { return new VerticalLine(m_x); }
 
-    VerticalLine *clone() const;
-
-    //! Returns true if given point is on this line segment (y is unused)
     bool contains(double x, double y) const;
-
-    //! Returns true if the line crosses the area defined by two given bins
     bool contains(const Bin1D &binx, const Bin1D &biny) const;
 
     double getXpos() const { return m_x; }
 
 private:
-    VerticalLine(const VerticalLine& other);
     double m_x;
 };
 
-//! @class HorizontalLine
-//! @ingroup tools
-//! @brief Horizontal infinite line
+
+//! An infinite horizontal line.
+//! @ingroup mask
 
 class BA_CORE_API_ HorizontalLine : public IShape2D {
 public:
-    //! Infinite vertical line constructor
-    //! @param y The value at which it crosses y-axes
     HorizontalLine(double y);
+    HorizontalLine *clone() const { return new HorizontalLine(m_y); }
 
-    HorizontalLine *clone() const;
-
-    //! Returns true if given point is on this line segment
     bool contains(double x, double y) const;
-
-    //! Returns true if the line crosses the area defined by two given bins
     bool contains(const Bin1D &binx, const Bin1D &biny) const;
 
     double getYpos() const { return m_y; }
 
 private:
-    HorizontalLine(const HorizontalLine& other);
     double m_y;
 };
 
-
 } // namespace Geometry
 
 #endif // LINE_H
diff --git a/Core/Mask/MaskCoordinateFunction.h b/Core/Mask/MaskCoordinateFunction.h
index 835f407e128..64440a7421b 100644
--- a/Core/Mask/MaskCoordinateFunction.h
+++ b/Core/Mask/MaskCoordinateFunction.h
@@ -22,9 +22,8 @@
 
 using std::size_t;
 
-//! @class MaskCoordinateFunction
+//! Base class for all kind of OutputData's masks.
 //! @ingroup simulation_internal
-//! @brief Base class for all kind of OutputData's masks
 
 class BA_CORE_API_ MaskCoordinateFunction : public ICloneable
 {
@@ -42,9 +41,8 @@ protected:
 };
 
 
-//! @class MaskCoordinateRectangleFunction
+//! Rectangular mask for OutputData.
 //! @ingroup simulation_internal
-//! @brief Rectangular mask for OutputData
 
 class BA_CORE_API_ MaskCoordinateRectangleFunction : public MaskCoordinateFunction
 {
@@ -61,9 +59,8 @@ private:
     int* m_maxima;
 };
 
-//! @class MaskCoordinateEllipseFunction
+//! Ellipse shaped mask for OutputData.
 //! @ingroup simulation_internal
-//! @brief Ellipse shaped mask for OutputData
 
 class BA_CORE_API_ MaskCoordinateEllipseFunction : public MaskCoordinateFunction
 {
diff --git a/Core/Mask/Polygon.cpp b/Core/Mask/Polygon.cpp
index f20cc17ee50..cbb28587491 100644
--- a/Core/Mask/Polygon.cpp
+++ b/Core/Mask/Polygon.cpp
@@ -32,34 +32,29 @@ public:
     typedef model::d2::point_xy<double> point_t;
     typedef model::polygon<point_t> polygon_t;
     polygon_t polygon;
-    void init_from(const std::vector<double> &x, const std::vector<double> &y);
-    void get_points(std::vector<double> &xpos, std::vector<double> &ypos);
-
+    void init_from(const std::vector<double>& x, const std::vector<double>& y);
+    void get_points(std::vector<double>& xpos, std::vector<double>& ypos);
 };
 
 
-void PolygonPrivate::init_from(const std::vector<double> &x, const std::vector<double> &y)
+void PolygonPrivate::init_from(const std::vector<double>& x, const std::vector<double>& y)
 {
-    if(x.size() != y.size()) {
-        std::ostringstream message;
-        message << "Polygon::Polygon(const std::vector<double> &x, const std::vector<double> &y) "
-                << "Error. Sizes of arrays must conincide." << std::endl;
-        throw Exceptions::LogicErrorException(message.str());
-    }
+    if(x.size() != y.size())
+        throw Exceptions::LogicErrorException(
+            "Polygon::Polygon(const std::vector<double>& x, const std::vector<double>& y) "
+            "Error. Sizes of arrays must conincide.");
     std::vector<point_t> points;
-    for(size_t i=0; i<x.size(); ++i) {
+    for(size_t i=0; i<x.size(); ++i)
         points.push_back(point_t(x[i], y[i]));
-    }
     assign_points(polygon, points);
     correct(polygon);
 }
 
-void PolygonPrivate::get_points(std::vector<double> &xpos, std::vector<double> &ypos)
+void PolygonPrivate::get_points(std::vector<double>& xpos, std::vector<double>& ypos)
 {
     xpos.clear();
     ypos.clear();
-    for(auto it = polygon.outer().begin(); it != polygon.outer().end(); ++it )
-    {
+    for(auto it = polygon.outer().begin(); it != polygon.outer().end(); ++it ) {
          // for vectors of x and y, extract the x/y from the point
          xpos.push_back( boost::geometry::get<0>( *it ) );
          ypos.push_back( boost::geometry::get<1>( *it ) );
@@ -67,47 +62,48 @@ void PolygonPrivate::get_points(std::vector<double> &xpos, std::vector<double> &
 }
 
 
+//! @param x Vector of x-coordinates of polygon points.
+//! @param y Vector of y-coordinates of polygon points.
 
 // IMPORTANT Input parameters are not "const reference" to be able to work from python
 // (auto convertion of python list to vector<double>).
-Polygon::Polygon(std::vector<double> x, std::vector<double> y)
-    : m_d(new PolygonPrivate)
+Polygon::Polygon(const std::vector<double>& x, const std::vector<double>& y)
+    : IShape2D("Polygon"), m_d(new PolygonPrivate)
 {
     m_d->init_from(x, y);
 }
 
 // IMPORTANT Input parameter is not "const reference" to be able to work from python
 // (auto convertion of python list to vector<vector<double>>).
-Polygon::Polygon(std::vector<std::vector<double> > points)
-    : m_d(new PolygonPrivate)
+    //! Polygon defined by two  dimensional array with (x,y) coordinates of polygon points.
+    //! The size of second dimension should be 2. If polygon is unclosed (the last point
+    //! doesn't repeat the first one), it will be closed automatically.
+    //! @param points Two dimensional vector of (x,y) coordinates of polygon points.
+Polygon::Polygon(const std::vector<std::vector<double>>& points)
+    : IShape2D("Polygon"), m_d(new PolygonPrivate)
 {
     std::vector<double> x;
     std::vector<double> y;
     for(size_t i=0; i<points.size(); ++i) {
-        if(points[i].size() != 2) {
-            std::ostringstream message;
-            message << "Polygon(const std::vector<std::vector<double> > &points) -> Error. "
-                    << " Should be two-dimensional array with second dimension of 2 size."
-                    << std::endl;
-            throw Exceptions::LogicErrorException(message.str());
-        }
+        if(points[i].size() != 2)
+            throw Exceptions::LogicErrorException(
+                "Polygon(const std::vector<std::vector<double> >& points) -> Error. "
+                " Should be two-dimensional array with second dimension of 2 size.");
         x.push_back(points[i][0]);
         y.push_back(points[i][1]);
     }
-
     m_d->init_from(x, y);
 }
 
+Polygon::Polygon(const PolygonPrivate* d)
+    : IShape2D("Polygon"), m_d(new PolygonPrivate(*d))
+{}
+
 Polygon::~Polygon()
 {
     delete m_d;
 }
 
-Polygon *Polygon::clone() const
-{
-    return new Polygon(*this);
-}
-
 bool Polygon::contains(double x, double y) const
 {
 //    return within(PolygonPrivate::point_t(x, y), m_d->polygon); // not including borders
@@ -124,7 +120,7 @@ double Polygon::getArea() const
     return area(m_d->polygon);
 }
 
-void Polygon::getPoints(std::vector<double> &xpos, std::vector<double> &ypos) const
+void Polygon::getPoints(std::vector<double>& xpos, std::vector<double>& ypos) const
 {
     m_d->get_points(xpos, ypos);
 }
@@ -134,9 +130,4 @@ void Polygon::print(std::ostream &ostr) const
     ostr << wkt<PolygonPrivate::polygon_t>(m_d->polygon);
 }
 
-Polygon::Polygon(const Polygon &other)
-{
-    m_d = new PolygonPrivate(*other.m_d);
-}
-
 } // namespace Geometry
diff --git a/Core/Mask/Polygon.h b/Core/Mask/Polygon.h
index a0844e04c91..c307b512993 100644
--- a/Core/Mask/Polygon.h
+++ b/Core/Mask/Polygon.h
@@ -23,47 +23,34 @@ namespace Geometry {
 
 class PolygonPrivate;
 
-//! @class Polygon
-//! @ingroup tools
-//! @brief The polygon in 2D space
+//! A polygon in 2D space.
+//! @ingroup mask
+
+//! Polygon defined by two arrays with x and y coordinates of points.
+//! Sizes of arrays should coincide.  If polygon is unclosed (the last point
+//! doesn't repeat the first one), it will be closed automatically.
 
 class BA_CORE_API_ Polygon : public IShape2D {
 public:
-    //! Polygon defined by two arrays with x and y coordinates of points.
-    //! Sizes of arrays should coincide.  If polygon is unclosed (the last point
-    //! doesn't repeat the first one), it will be closed automatically.
-    //! @param x Vector of x-coordinates of polygon points.
-    //! @param y Vector of y-coordinates of polygon points.
-    Polygon(std::vector<double > x, std::vector<double> y);
-
-    //! Polygon defined by two  dimensional array with (x,y) coordinates of polygon points.
-    //! The size of second dimension should be 2. If polygon is unclosed (the last point
-    //! doesn't repeat the first one), it will be closed automatically.
-    //! @param points Two dimensional vector of (x,y) coordinates of polygon points.
-    Polygon(std::vector<std::vector<double> > points);
+    Polygon(const std::vector<double>& x, const std::vector<double>& y);
+    Polygon(const std::vector<std::vector<double>>& points);
+    Polygon(const PolygonPrivate* d);
 
     virtual ~Polygon();
 
-    virtual Polygon* clone() const;
+    virtual Polygon* clone() const { return new Polygon(m_d); }
 
-    //! Returns true if given point is inside or on border of polygon
     virtual bool contains(double x, double y) const;
-
-    //! Returns true if area defined by two bins is inside or on border of polygon.
-    //! More precisely, if mid point of two bins satisfy this condition.
     virtual bool contains(const Bin1D &binx, const Bin1D &biny) const;
 
     double getArea() const;
 
-    void getPoints(std::vector<double> &xpos, std::vector<double> &ypos) const;
+    void getPoints(std::vector<double>& xpos, std::vector<double>& ypos) const;
 
 protected:
-    virtual void print(std::ostream &ostr) const;
+    virtual void print(std::ostream& ostr) const;
 
 private:
-    Polygon(const Polygon& other);
-    const Polygon& operator=(const Polygon& );
-
     PolygonPrivate* m_d;
 };
 
diff --git a/Core/Mask/Rectangle.cpp b/Core/Mask/Rectangle.cpp
index 48443908c9e..eae931583d2 100644
--- a/Core/Mask/Rectangle.cpp
+++ b/Core/Mask/Rectangle.cpp
@@ -19,7 +19,12 @@
 
 namespace Geometry {
 
+//! @param xlow x-coordinate of lower left corner
+//! @param ylow y-coordinate of lower left corner
+//! @param xup x-coordinate of upper right corner
+//! @param yup y-coordinate of upper right corner
 Rectangle::Rectangle(double xlow, double ylow, double xup, double yup)
+    : IShape2D("Rectangle")
 {
     if(xup <= xlow) {
         std::ostringstream message;
@@ -39,15 +44,9 @@ Rectangle::Rectangle(double xlow, double ylow, double xup, double yup)
     m_yup = yup;
 }
 
-Rectangle *Rectangle::clone() const
-{
-    return new Rectangle(*this);
-}
-
 bool Rectangle::contains(double x, double y) const
 {
-    if(x <= m_xup && x >= m_xlow && y <= m_yup && y >= m_ylow) return true;
-    return false;
+    return x <= m_xup && x >= m_xlow && y <= m_yup && y >= m_ylow;
 }
 
 bool Rectangle::contains(const Bin1D &binx, const Bin1D &biny) const
@@ -60,33 +59,4 @@ double Rectangle::getArea() const
     return (m_xup-m_xlow)*(m_yup-m_ylow);
 }
 
-double Rectangle::getXlow() const
-{
-    return m_xlow;
-}
-
-double Rectangle::getYlow() const
-{
-    return m_ylow;
-}
-
-double Rectangle::getXup() const
-{
-    return m_xup;
-}
-
-double Rectangle::getYup() const
-{
-    return m_yup;
-}
-
-Rectangle::Rectangle(const Rectangle &other)
-    : m_xlow(other.m_xlow)
-    , m_ylow(other.m_ylow)
-    , m_xup(other.m_xup)
-    , m_yup(other.m_yup)
-{
-
-}
-
 } // namespace Geometry
diff --git a/Core/Mask/Rectangle.h b/Core/Mask/Rectangle.h
index b894c936096..123bf6b4d26 100644
--- a/Core/Mask/Rectangle.h
+++ b/Core/Mask/Rectangle.h
@@ -20,36 +20,25 @@
 
 namespace Geometry {
 
-//! @class Rectangle
-//! @ingroup tools
-//! @brief The rectangle shape having its axis aligned to the (non-rotated) coordinate system.
+//! The rectangle shape having its axis aligned to the (non-rotated) coordinate system.
+//! @ingroup mask
 
-class BA_CORE_API_  Rectangle : public IShape2D {
+class BA_CORE_API_ Rectangle : public IShape2D {
 public:
-    //! Rectangle constructor with lower left and upper right coordinates
-    //! @param xlow x-coordinate of lower left corner
-    //! @param ylow y-coordinate of lower left corner
-    //! @param xup x-coordinate of upper right corner
-    //! @param yup y-coordinate of upper right corner
     Rectangle(double xlow, double ylow, double xup, double yup);
+    Rectangle* clone() const { return new Rectangle(m_xlow, m_ylow, m_xup, m_yup); }
 
-    Rectangle* clone() const;
-
-    //! Returns true if given point is inside or on border of rectangle
     bool contains(double x, double y) const;
-
-    //! Returns true if mid point of two bins is inside rectangle.
     bool contains(const Bin1D &binx, const Bin1D &biny) const;
 
     double getArea() const;
 
-    double getXlow() const;
-    double getYlow() const;
-    double getXup() const;
-    double getYup() const;
+    double getXlow() const { return m_xlow; }
+    double getYlow() const { return m_ylow; }
+    double getXup()  const { return m_xup; }
+    double getYup()  const { return m_yup; }
 
 private:
-    Rectangle(const Rectangle& other);
     double m_xlow, m_ylow, m_xup, m_yup;
 };
 
diff --git a/Doc/Doxygen/defgroups.dox b/Doc/Doxygen/defgroups.dox
index 343836f68e1..0a4f0a1b785 100644
--- a/Doc/Doxygen/defgroups.dox
+++ b/Doc/Doxygen/defgroups.dox
@@ -3,6 +3,9 @@
 \defgroup simulation Simulation description
 @brief Classes to describe beam, detector and run the simulation.
 
+\defgroup mask Detector masks
+@brief Classes to construct a two-dimensional mask.
+
 \defgroup samples Samples
 @brief Classes to describe experimental sample.
 
diff --git a/Doc/Doxygen/userapi.dox b/Doc/Doxygen/userapi.dox
index 5de15bfce35..7e537366427 100644
--- a/Doc/Doxygen/userapi.dox
+++ b/Doc/Doxygen/userapi.dox
@@ -6,6 +6,9 @@ Here is a list of classes grouped in several categories to create the sample, de
 <ul>
 <li> \ref simulation "Simulation" <br>
 List of classes to describe beam, detector and run the simulation
+     <ul>
+     <li> \ref mask "Detector masks"
+     </ul>
 <li> \ref samples "Samples" <br>
 List of classes to describe scattering sample
 <li> \ref materials "Materials" <br>
diff --git a/Fit/Parameters/FitSuiteParameters.cpp b/Fit/Parameters/FitSuiteParameters.cpp
index 9ac27cc2480..e03a41f41e3 100644
--- a/Fit/Parameters/FitSuiteParameters.cpp
+++ b/Fit/Parameters/FitSuiteParameters.cpp
@@ -21,9 +21,6 @@
 #include <cmath>
 #include <iostream>
 
-FitSuiteParameters::FitSuiteParameters()
-{
-}
 
 FitSuiteParameters::~FitSuiteParameters()
 {
diff --git a/Fit/Parameters/FitSuiteParameters.h b/Fit/Parameters/FitSuiteParameters.h
index f2ecc6fae7e..375435e4e6a 100644
--- a/Fit/Parameters/FitSuiteParameters.h
+++ b/Fit/Parameters/FitSuiteParameters.h
@@ -30,7 +30,7 @@ class ParameterPool;
 class BA_CORE_API_ FitSuiteParameters
 {
  public:
-    FitSuiteParameters();
+    FitSuiteParameters() {}
     ~FitSuiteParameters();
 
     //! Clears all defined parameters.
diff --git a/auto/Wrap/doxygen_core.i b/auto/Wrap/doxygen_core.i
index 883fcd2a55b..db383239e36 100644
--- a/auto/Wrap/doxygen_core.i
+++ b/auto/Wrap/doxygen_core.i
@@ -1,24 +1,6 @@
 
 // File: index.xml
 
-// File: classAngle.xml
-%feature("docstring") Angle "
-
-A parameter of physical dimension \"angle\".
-
-C++ includes: DimensionedParameters.h
-";
-
-%feature("docstring")  Angle::Angle "Angle::Angle(const std::string &name, ParameterPool *parent, volatile double *par, const Limits &limits)
-";
-
-%feature("docstring")  Angle::clone "virtual Angle* Angle::clone(const std::string &new_name=\"\") const 
-";
-
-%feature("docstring")  Angle::unit "std::string Angle::unit() const final
-";
-
-
 // File: classAngularPixelMap.xml
 %feature("docstring") AngularPixelMap "";
 
@@ -1458,7 +1440,7 @@ yradius:
 Radius along y-axis
 
 theta: 
- Angle of  Ellipse rotation in radians 
+Angle of  Ellipse rotation in radians 
 ";
 
 %feature("docstring")  Geometry::Ellipse::clone "Ellipse * Geometry::Ellipse::clone() const 
@@ -2899,15 +2881,12 @@ Isotropic Debye-Waller factor.
 Anisotropic Debye-Waller factor. 
 ";
 
-%feature("docstring")  FormFactorDecoratorDebyeWaller::~FormFactorDecoratorDebyeWaller "virtual FormFactorDecoratorDebyeWaller::~FormFactorDecoratorDebyeWaller()
-";
-
-%feature("docstring")  FormFactorDecoratorDebyeWaller::clone "FormFactorDecoratorDebyeWaller * FormFactorDecoratorDebyeWaller::clone() const
+%feature("docstring")  FormFactorDecoratorDebyeWaller::clone "FormFactorDecoratorDebyeWaller* FormFactorDecoratorDebyeWaller::clone() const final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorDecoratorDebyeWaller::accept "void FormFactorDecoratorDebyeWaller::accept(ISampleVisitor *visitor) const
+%feature("docstring")  FormFactorDecoratorDebyeWaller::accept "void FormFactorDecoratorDebyeWaller::accept(ISampleVisitor *visitor) const final
 
 Calls the  ISampleVisitor's visit method. 
 ";
@@ -3828,8 +3807,6 @@ C++ includes: FormFactorLongRipple2Lorentz.h
 
 %feature("docstring")  FormFactorLongRipple2Lorentz::FormFactorLongRipple2Lorentz "FormFactorLongRipple2Lorentz::FormFactorLongRipple2Lorentz(double length, double width, double height, double asymmetry)
 
-FormFactorLongRipple2Lorentz constructor.
-
 Parameters:
 -----------
 
@@ -6138,12 +6115,7 @@ C++ includes: IFactory.h
 Creates object by calling creation function corresponded to given identifier. 
 ";
 
-%feature("docstring")  IFactory::registerItem "bool IFactory< Key, AbstractProduct >::registerItem(const Key &item_key, CreateItemCallback CreateFn)
-
-Registers object's creation function. 
-";
-
-%feature("docstring")  IFactory::registerItem "bool IFactory< Key, AbstractProduct >::registerItem(const Key &item_key, CreateItemCallback CreateFn, const std::string &itemDescription)
+%feature("docstring")  IFactory::registerItem "bool IFactory< Key, AbstractProduct >::registerItem(const Key &item_key, CreateItemCallback CreateFn, const std::string &itemDescription=\"\")
 
 Registers object's creation function and store object description. 
 ";
@@ -6156,15 +6128,9 @@ Registers object's creation function and store object description.
 Returns number of registered objects. 
 ";
 
-%feature("docstring")  IFactory::begin "iterator IFactory< Key, AbstractProduct >::begin()
-";
-
 %feature("docstring")  IFactory::begin "const_iterator IFactory< Key, AbstractProduct >::begin() const 
 ";
 
-%feature("docstring")  IFactory::end "iterator IFactory< Key, AbstractProduct >::end()
-";
-
 %feature("docstring")  IFactory::end "const_iterator IFactory< Key, AbstractProduct >::end() const 
 ";
 
@@ -7501,8 +7467,6 @@ C++ includes: InterferenceFunction2DLattice.h
 
 %feature("docstring")  InterferenceFunction2DLattice::InterferenceFunction2DLattice "InterferenceFunction2DLattice::InterferenceFunction2DLattice(double length_1, double length_2, double angle, double xi=0.0)
 
-contructor
-
 Parameters:
 -----------
 
@@ -7571,16 +7535,16 @@ Parameters:
 -----------
 
 length_1: 
- Length of first lattice basis vector.
+Length of first lattice basis vector.
 
 length_2: 
- Length of second lattice basis vector.
+Length of second lattice basis vector.
 
 alpha_lattice: 
- Angle between the lattice basis vectors.
+Angle between the lattice basis vectors.
 
 xi: 
- Angle between first basis vector and the x-axis of incoming beam.
+Angle between first basis vector and the x-axis of incoming beam.
 
 damping_length: 
 Damping length for removing delta function singularity at q=0. 
@@ -7856,28 +7820,7 @@ Creates new parameter pool, with all local parameters and those of its children.
 %feature("docstring")  IParameterized::printParameters "void IParameterized::printParameters()
 ";
 
-%feature("docstring")  IParameterized::registerUnlimitedAngle "void IParameterized::registerUnlimitedAngle(const std::string &name, double *parpointer)
-";
-
-%feature("docstring")  IParameterized::registerLimitedAngle "void IParameterized::registerLimitedAngle(const std::string &name, double *parpointer, double lower_limit, double upper_limit)
-";
-
-%feature("docstring")  IParameterized::registerUnlimitedLength "void IParameterized::registerUnlimitedLength(const std::string &name, double *parpointer)
-";
-
-%feature("docstring")  IParameterized::registerPositiveLength "void IParameterized::registerPositiveLength(const std::string &name, double *parpointer)
-";
-
-%feature("docstring")  IParameterized::registerNonnegativeLength "void IParameterized::registerNonnegativeLength(const std::string &name, double *parpointer)
-";
-
-%feature("docstring")  IParameterized::registerUnlimitedScalar "void IParameterized::registerUnlimitedScalar(const std::string &name, double *parpointer)
-";
-
-%feature("docstring")  IParameterized::registerPositiveScalar "void IParameterized::registerPositiveScalar(const std::string &name, double *parpointer)
-";
-
-%feature("docstring")  IParameterized::registerNonnegativeScalar "void IParameterized::registerNonnegativeScalar(const std::string &name, double *parpointer)
+%feature("docstring")  IParameterized::registerParameter "RealParameter & IParameterized::registerParameter(const std::string &name, double *parpointer)
 ";
 
 %feature("docstring")  IParameterized::setParameterValue "void IParameterized::setParameterValue(const std::string &name, double value)
@@ -8909,7 +8852,7 @@ Constructs layer made of  material with  thickness in nanometers and decoration.
 %feature("docstring")  Layer::~Layer "Layer::~Layer()
 ";
 
-%feature("docstring")  Layer::clone "Layer * Layer::clone() const
+%feature("docstring")  Layer::clone "Layer* Layer::clone() const final
 
 Returns a clone of this  ISample object. 
 ";
@@ -9227,24 +9170,6 @@ C++ includes: LayersWithAbsorptionBuilder.h
 ";
 
 
-// File: classLength.xml
-%feature("docstring") Length "
-
-A parameter of physical dimension \"length\". Values are in nm.
-
-C++ includes: DimensionedParameters.h
-";
-
-%feature("docstring")  Length::Length "Length::Length(const std::string &name, ParameterPool *parent, volatile double *par, const Limits &limits)
-";
-
-%feature("docstring")  Length::clone "virtual Length* Length::clone(const std::string &new_name=\"\") const 
-";
-
-%feature("docstring")  Length::unit "std::string Length::unit() const final
-";
-
-
 // File: classGeometry_1_1Line.xml
 %feature("docstring") Geometry::Line "
 
@@ -10595,7 +10520,9 @@ C++ includes: ParameterPattern.h
 // File: classParameterPool.xml
 %feature("docstring") ParameterPool "
 
-Holds a map of pointers to parameters (which must have different names).
+Holds a map of pointers to parameters.Used in  IParameterized, which has a member ParameterPool* m_pool. So this is pimpl (pointer to implementation) idiom, with  ParameterPool providing the implementation of all the nontrivial functionality of  IParameterized.
+
+Parameter names must be unique since we use them as map keys.
 
 C++ includes: ParameterPool.h
 ";
@@ -10618,19 +10545,17 @@ Returns a literal clone.
 
 %feature("docstring")  ParameterPool::cloneWithPrefix "ParameterPool * ParameterPool::cloneWithPrefix(const std::string &prefix) const
 
-Returns a clone with  prefix added to every parameter key. 
+Returns a clone with  prefix prepended to every parameter key. 
 ";
 
 %feature("docstring")  ParameterPool::copyToExternalPool "void ParameterPool::copyToExternalPool(const std::string &prefix, ParameterPool *external_pool) const
 
-Copies parameters to  external_pool, adding  prefix to every key.
-
-Copy parameters of given pool to the external pool while adding prefix to local parameter keys 
+Copies parameters of given pool to  other pool, prepeding  prefix to the parameter names. 
 ";
 
 %feature("docstring")  ParameterPool::clear "void ParameterPool::clear()
 
-Deletes parameter map. 
+Clears the parameter map. 
 ";
 
 %feature("docstring")  ParameterPool::getName "std::string ParameterPool::getName() const 
@@ -10641,25 +10566,21 @@ Deletes parameter map.
 Returns number of parameters in the pool. 
 ";
 
-%feature("docstring")  ParameterPool::addParameter "void ParameterPool::addParameter(RealParameter *par)
+%feature("docstring")  ParameterPool::addParameter "RealParameter & ParameterPool::addParameter(RealParameter *par)
 
-Adds parameter to the pool.
+Adds parameter to the pool, and returns reference to the input pointer.
 
-Low-level routine. 
+Returning the input pointer allows us to concatenate function calls like pool->addParameter( new  RealParameter(...) ).setLimits(-1,+1).setFixed().setUnit(\"nm\") 
 ";
 
 %feature("docstring")  ParameterPool::getParameter "RealParameter * ParameterPool::getParameter(const std::string &name)
 
-Returns parameter named  name.
-
-Returns parameter with given name. 
+Returns parameter with given  name. 
 ";
 
 %feature("docstring")  ParameterPool::getParameter "const RealParameter * ParameterPool::getParameter(const std::string &name) const
 
-Returns parameter named  name.
-
-Returns parameter with given name. 
+Returns parameter with given  name. 
 ";
 
 %feature("docstring")  ParameterPool::getParameters "const std::vector<RealParameter*> ParameterPool::getParameters() const
@@ -10669,7 +10590,7 @@ Returns full vector of parameters.
 
 %feature("docstring")  ParameterPool::getMatchedParameters "std::vector< RealParameter * > ParameterPool::getMatchedParameters(const std::string &wildcards) const
 
-Returns vector of parameters which fit pattern. 
+Returns vector of parameters that match the  pattern (wildcards '*' allowed). 
 ";
 
 %feature("docstring")  ParameterPool::setParameterValue "void ParameterPool::setParameterValue(const std::string &name, double value)
@@ -10679,14 +10600,10 @@ Sets parameter value.
 
 %feature("docstring")  ParameterPool::setMatchedParametersValue "int ParameterPool::setMatchedParametersValue(const std::string &wildcards, double value)
 
-Sets parameter value, return number of changed parameters.
-
 Sets parameter value. 
 ";
 
-%feature("docstring")  ParameterPool::getParameterNames "std::vector< std::string > ParameterPool::getParameterNames() const
-
-Returns all parameter names. 
+%feature("docstring")  ParameterPool::getParameterNames "std::vector< std::string > ParameterPool::getParameterNames() const 
 ";
 
 
@@ -11423,10 +11340,7 @@ C++ includes: RealParameter.h
 This constructor takes copies 'other' except for the name. 
 ";
 
-%feature("docstring")  RealParameter::~RealParameter "virtual RealParameter::~RealParameter()
-";
-
-%feature("docstring")  RealParameter::clone "virtual RealParameter* RealParameter::clone(const std::string &new_name=\"\") const =0
+%feature("docstring")  RealParameter::clone "RealParameter * RealParameter::clone(const std::string &new_name=\"\") const 
 ";
 
 %feature("docstring")  RealParameter::setValue "void RealParameter::setValue(double value)
@@ -11439,6 +11353,9 @@ Sets value of wrapped parameter and emit signal.
 Returns value of wrapped parameter. 
 ";
 
+%feature("docstring")  RealParameter::setUnit "RealParameter& RealParameter::setUnit(const std::string &name)
+";
+
 %feature("docstring")  RealParameter::isNull "bool RealParameter::isNull() const
 
 Returns true if wrapped parameter was not initialized with proper real value. 
@@ -11449,10 +11366,22 @@ Returns true if wrapped parameter was not initialized with proper real value.
 throw exception if parameter was not initialized with proper value 
 ";
 
+%feature("docstring")  RealParameter::setLimits "RealParameter& RealParameter::setLimits(const Limits &limits)
+";
+
 %feature("docstring")  RealParameter::getLimits "Limits RealParameter::getLimits() const 
 ";
 
-%feature("docstring")  RealParameter::unit "virtual std::string RealParameter::unit() const =0
+%feature("docstring")  RealParameter::setLimited "RealParameter & RealParameter::setLimited(double lower, double upper)
+";
+
+%feature("docstring")  RealParameter::setPositive "RealParameter & RealParameter::setPositive()
+";
+
+%feature("docstring")  RealParameter::setNonnegative "RealParameter & RealParameter::setNonnegative()
+";
+
+%feature("docstring")  RealParameter::unit "std::string RealParameter::unit() const 
 ";
 
 
@@ -12140,24 +12069,6 @@ C++ includes: SampleTreeIterator.h
 ";
 
 
-// File: classScalar.xml
-%feature("docstring") Scalar "
-
-A parameter of that is physically dimensionless.
-
-C++ includes: DimensionedParameters.h
-";
-
-%feature("docstring")  Scalar::Scalar "Scalar::Scalar(const std::string &name, ParameterPool *parent, volatile double *par, const Limits &limits)
-";
-
-%feature("docstring")  Scalar::clone "virtual Scalar* Scalar::clone(const std::string &new_name=\"\") const 
-";
-
-%feature("docstring")  Scalar::unit "std::string Scalar::unit() const final
-";
-
-
 // File: classScalarRTCoefficients.xml
 %feature("docstring") ScalarRTCoefficients "
 
@@ -13161,6 +13072,21 @@ C++ includes: ParticleDistributionsBuilder.h
 ";
 
 
+// File: classUnit.xml
+%feature("docstring") Unit "
+
+A physical unit.
+
+C++ includes: Unit.h
+";
+
+%feature("docstring")  Unit::Unit "Unit::Unit(const std::string &name=\"\")
+";
+
+%feature("docstring")  Unit::setUnit "void Unit::setUnit(const std::string &name)
+";
+
+
 // File: classExceptions_1_1UnknownClassRegistrationException.xml
 %feature("docstring") Exceptions::UnknownClassRegistrationException "";
 
@@ -13307,13 +13233,13 @@ C++ includes: WavevectorInfo.h
 // File: classMathFunctions_1_1Convolve_1_1Workspace.xml
 
 
-// File: namespace_0D296.xml
+// File: namespace_0D298.xml
 
 
-// File: namespace_0D368.xml
+// File: namespace_0D371.xml
 
 
-// File: namespace_0D434.xml
+// File: namespace_0D437.xml
 
 
 // File: namespaceboost_1_1geometry.xml
@@ -13331,16 +13257,6 @@ C++ includes: WavevectorInfo.h
 
 
 // File: namespaceFileSystem.xml
-%feature("docstring")  FileSystem::GetWorkingPath "std::string FileSystem::GetWorkingPath()
-
-Returns path to the current (working) directory. 
-";
-
-%feature("docstring")  FileSystem::GetHomePath "std::string FileSystem::GetHomePath()
-
-Returns path to BornAgain home directory. 
-";
-
 %feature("docstring")  FileSystem::GetFileExtension "std::string FileSystem::GetFileExtension(const std::string &name)
 
 Returns file extension. 
@@ -14496,6 +14412,12 @@ The mathematics implemented here is described in full detail in a paper by Joach
 ";
 
 
+// File: NumpyUtils_8cpp.xml
+
+
+// File: NumpyUtils_8h.xml
+
+
 // File: OutputData_8cpp.xml
 
 
@@ -14748,9 +14670,6 @@ Set all element intensities to given value.
 // File: SpecularMatrix_8h.xml
 
 
-// File: DimensionedParameters_8h.xml
-
-
 // File: Distributions_8cpp.xml
 
 
@@ -14802,6 +14721,12 @@ Set all element intensities to given value.
 // File: ThreadInfo_8h.xml
 
 
+// File: Unit_8cpp.xml
+
+
+// File: Unit_8h.xml
+
+
 // File: Units_8h.xml
 
 
@@ -15238,12 +15163,6 @@ David N. Williams
 // File: MathFunctions_8h.xml
 
 
-// File: NumpyUtils_8cpp.xml
-
-
-// File: NumpyUtils_8h.xml
-
-
 // File: Precomputed_8cpp.xml
 
 
diff --git a/auto/Wrap/doxygen_fit.i b/auto/Wrap/doxygen_fit.i
index 09e77d51265..6916b015483 100644
--- a/auto/Wrap/doxygen_fit.i
+++ b/auto/Wrap/doxygen_fit.i
@@ -53,29 +53,27 @@ C++ includes: BasicMinimizer.h
 run minimization 
 ";
 
-%feature("docstring")  BasicMinimizer::minimizerName "std::string BasicMinimizer::minimizerName() const
+%feature("docstring")  BasicMinimizer::getMinimizerName "std::string BasicMinimizer::getMinimizerName() const final
 
-Returns name of the minimizer. 
+return name of the minimizer 
 ";
 
-%feature("docstring")  BasicMinimizer::algorithmName "std::string BasicMinimizer::algorithmName() const
+%feature("docstring")  BasicMinimizer::getAlgorithmName "std::string BasicMinimizer::getAlgorithmName() const final
 
-Returns name of the minimization algorithm. 
+return name of the minimization algorithm 
 ";
 
 %feature("docstring")  BasicMinimizer::setAlgorithmName "void BasicMinimizer::setAlgorithmName(const std::string &algorithmName)
-
-Sets minimization algorithm. 
 ";
 
 %feature("docstring")  BasicMinimizer::setParameter "void BasicMinimizer::setParameter(size_t index, const FitParameter *par)
-
-Sets internal minimizer parameter. 
 ";
 
 %feature("docstring")  BasicMinimizer::setParameters "void BasicMinimizer::setParameters(const FitSuiteParameters &parameters)
 
-Sets internal minimizer parameters using external parameter list. 
+Sets internal minimizer parameter.
+
+Sets internal minimizer parameters using external parameter list 
 ";
 
 %feature("docstring")  BasicMinimizer::setChiSquaredFunction "void BasicMinimizer::setChiSquaredFunction(function_chi2_t fun_chi2, size_t nparameters)
@@ -88,14 +86,16 @@ Sets chi squared function to minimize.
 Sets gradient function to minimize. 
 ";
 
-%feature("docstring")  BasicMinimizer::isGradientBasedAgorithm "virtual bool BasicMinimizer::isGradientBasedAgorithm()
+%feature("docstring")  BasicMinimizer::getNumberOfVariables "size_t BasicMinimizer::getNumberOfVariables() const
 
-Returns true if type of algorithm is Levenberg-Marquardt or similar. 
+Returns number of variables to fit. 
 ";
 
 %feature("docstring")  BasicMinimizer::getValueOfVariablesAtMinimum "std::vector< double > BasicMinimizer::getValueOfVariablesAtMinimum() const
 
-Returns values of parameters at the minimum. 
+Returns minimum function value.
+
+Returns values of parameters at the minimum 
 ";
 
 %feature("docstring")  BasicMinimizer::getErrorOfVariables "std::vector< double > BasicMinimizer::getErrorOfVariables() const
@@ -105,12 +105,19 @@ Returns errors of variables at minimum.
 
 %feature("docstring")  BasicMinimizer::printResults "void BasicMinimizer::printResults() const
 
-Prints fit results. 
+clear resources (parameters) for consecutives minimizations
+
+Prints fit results 
 ";
 
 %feature("docstring")  BasicMinimizer::toResultString "std::string BasicMinimizer::toResultString() const 
 ";
 
+%feature("docstring")  BasicMinimizer::isGradientBasedAgorithm "virtual bool BasicMinimizer::isGradientBasedAgorithm()
+
+Returns true if type of algorithm is Levenberg-Marquardt or similar. 
+";
+
 
 // File: classMinimizerLibrary_1_1Catalogue.xml
 %feature("docstring") MinimizerLibrary::Catalogue "";
@@ -139,7 +146,7 @@ Returns list of algorithm descriptions for given minimizer type.
 // File: classConfigurable.xml
 %feature("docstring") Configurable "
 
-The  Configurable class is a base for storing (int,double,string) options.
+A base class for storing (int,double,string) options.
 
 C++ includes: Configurable.h
 ";
@@ -217,7 +224,7 @@ C++ includes: FitParameter.h
 // File: classFitSuiteParameters.xml
 %feature("docstring") FitSuiteParameters "
 
-Holds vector of parameters for FitSuite.
+Vector of parameters, for FitSuite
 
 C++ includes: FitSuiteParameters.h
 ";
@@ -233,12 +240,12 @@ C++ includes: FitSuiteParameters.h
 Clears all defined parameters. 
 ";
 
-%feature("docstring")  FitSuiteParameters::addParameter "void FitSuiteParameters::addParameter(FitParameter *par)
+%feature("docstring")  FitSuiteParameters::addFitParameter "void FitSuiteParameters::addFitParameter(FitParameter *par)
 
 Adds fit parameter. 
 ";
 
-%feature("docstring")  FitSuiteParameters::getParameters "std::vector<FitParameter*>& FitSuiteParameters::getParameters()
+%feature("docstring")  FitSuiteParameters::getFitParameters "std::vector<FitParameter*>& FitSuiteParameters::getFitParameters()
 
 Returns all parameters. 
 ";
@@ -279,28 +286,23 @@ Returns errors of all defined parameters.
 Returns number of parameters. 
 ";
 
-%feature("docstring")  FitSuiteParameters::push_back "void FitSuiteParameters::push_back(FitParameter *par)
-
-Adds given  FitParameter to container. 
-";
-
-%feature("docstring")  FitSuiteParameters::begin "iterator FitSuiteParameters::begin()
+%feature("docstring")  FitSuiteParameters::begin "std::vector<FitParameter*>::iterator FitSuiteParameters::begin()
 
 Returns begin of container. 
 ";
 
-%feature("docstring")  FitSuiteParameters::begin "const_iterator FitSuiteParameters::begin() const 
+%feature("docstring")  FitSuiteParameters::begin "std::vector<FitParameter*>::const_iterator FitSuiteParameters::begin() const 
 ";
 
-%feature("docstring")  FitSuiteParameters::end "iterator FitSuiteParameters::end()
+%feature("docstring")  FitSuiteParameters::end "std::vector<FitParameter*>::iterator FitSuiteParameters::end()
 
 Returns end of container. 
 ";
 
-%feature("docstring")  FitSuiteParameters::end "const_iterator FitSuiteParameters::end() const 
+%feature("docstring")  FitSuiteParameters::end "std::vector<FitParameter*>::const_iterator FitSuiteParameters::end() const 
 ";
 
-%feature("docstring")  FitSuiteParameters::getNfreeParameters "size_t FitSuiteParameters::getNfreeParameters() const
+%feature("docstring")  FitSuiteParameters::numberOfFreeFitParameters "size_t FitSuiteParameters::numberOfFreeFitParameters() const
 
 Returns number of free parameters. 
 ";
@@ -310,7 +312,7 @@ Returns number of free parameters.
 Returns true if parameters already have the given values. 
 ";
 
-%feature("docstring")  FitSuiteParameters::printParameters "void FitSuiteParameters::printParameters() const
+%feature("docstring")  FitSuiteParameters::printFitParameters "void FitSuiteParameters::printFitParameters() const
 
 Print defined parameters. 
 ";
@@ -325,7 +327,7 @@ Fix all parameters.
 Release all parameters. 
 ";
 
-%feature("docstring")  FitSuiteParameters::setParametersFixed "void FitSuiteParameters::setParametersFixed(const std::vector< std::string > &pars, bool is_fixed)
+%feature("docstring")  FitSuiteParameters::setFixed "void FitSuiteParameters::setFixed(const std::vector< std::string > &pars, bool is_fixed)
 
 Set fixed flag for parameters from the list. 
 ";
@@ -334,7 +336,7 @@ Set fixed flag for parameters from the list.
 // File: classIMinimizer.xml
 %feature("docstring") IMinimizer "
 
-Common interface for all kind minimizer's.
+Common interface for all kind minimizers.
 
 C++ includes: IMinimizer.h
 ";
@@ -345,105 +347,86 @@ C++ includes: IMinimizer.h
 %feature("docstring")  IMinimizer::~IMinimizer "virtual IMinimizer::~IMinimizer()
 ";
 
-%feature("docstring")  IMinimizer::minimize "void IMinimizer::minimize()
+%feature("docstring")  IMinimizer::minimize "virtual void IMinimizer::minimize()=0
 
 run minimization 
 ";
 
-%feature("docstring")  IMinimizer::setParameter "void IMinimizer::setParameter(size_t index, const FitParameter *par)
-
-Sets internal minimizer parameter. 
-";
+%feature("docstring")  IMinimizer::setParameters "virtual void IMinimizer::setParameters(const FitSuiteParameters &parameters)=0
 
-%feature("docstring")  IMinimizer::setParameters "void IMinimizer::setParameters(const FitSuiteParameters &parameters)
+Sets internal minimizer parameter.
 
-Sets internal minimizer parameters using external parameter list. 
+Sets internal minimizer parameters using external parameter list 
 ";
 
-%feature("docstring")  IMinimizer::setChiSquaredFunction "void IMinimizer::setChiSquaredFunction(function_chi2_t fun_chi2, size_t nparameters)
+%feature("docstring")  IMinimizer::setChiSquaredFunction "virtual void IMinimizer::setChiSquaredFunction(function_chi2_t fun_chi2, size_t nparameters)=0
 
 Sets chi squared function to minimize. 
 ";
 
-%feature("docstring")  IMinimizer::setGradientFunction "void IMinimizer::setGradientFunction(function_gradient_t fun_gradient, size_t nparameters, size_t ndatasize)
+%feature("docstring")  IMinimizer::setGradientFunction "virtual void IMinimizer::setGradientFunction(function_gradient_t fun_gradient, size_t nparameters, size_t ndatasize)=0
 
 Sets gradient function to minimize. 
 ";
 
-%feature("docstring")  IMinimizer::getNumberOfVariables "size_t IMinimizer::getNumberOfVariables() const
+%feature("docstring")  IMinimizer::getNumberOfVariables "virtual size_t IMinimizer::getNumberOfVariables() const =0
 
 Returns number of variables to fit. 
 ";
 
-%feature("docstring")  IMinimizer::getMinValue "double IMinimizer::getMinValue() const
-
-Returns minimum function value. 
-";
-
-%feature("docstring")  IMinimizer::getValueOfVariableAtMinimum "double IMinimizer::getValueOfVariableAtMinimum(size_t index) const
-
-Returns value of the parameter at the minimum. 
-";
-
-%feature("docstring")  IMinimizer::getValueOfVariablesAtMinimum "std::vector< double > IMinimizer::getValueOfVariablesAtMinimum() const
-
-Returns values of parameters at the minimum. 
-";
+%feature("docstring")  IMinimizer::getValueOfVariablesAtMinimum "virtual std::vector<double> IMinimizer::getValueOfVariablesAtMinimum() const =0
 
-%feature("docstring")  IMinimizer::getErrorOfVariable "double IMinimizer::getErrorOfVariable(size_t index) const
+Returns minimum function value.
 
-Returns error of variable at minimum. 
+Returns values of parameters at the minimum 
 ";
 
-%feature("docstring")  IMinimizer::getErrorOfVariables "std::vector< double > IMinimizer::getErrorOfVariables() const
+%feature("docstring")  IMinimizer::getErrorOfVariables "virtual std::vector<double> IMinimizer::getErrorOfVariables() const =0
 
 Returns errors of variables at minimum. 
 ";
 
-%feature("docstring")  IMinimizer::clear "void IMinimizer::clear()
+%feature("docstring")  IMinimizer::printResults "virtual void IMinimizer::printResults() const =0
 
-clear resources (parameters) for consecutives minimizations 
-";
+clear resources (parameters) for consecutives minimizations
 
-%feature("docstring")  IMinimizer::printResults "void IMinimizer::printResults() const
-
-Prints fit results. 
+Prints fit results 
 ";
 
-%feature("docstring")  IMinimizer::getNCalls "size_t IMinimizer::getNCalls() const
+%feature("docstring")  IMinimizer::getNCalls "virtual size_t IMinimizer::getNCalls() const
 
 Returns number of calls of minimized function. 
 ";
 
-%feature("docstring")  IMinimizer::getOptions "MinimizerOptions * IMinimizer::getOptions()
+%feature("docstring")  IMinimizer::getOptions "virtual MinimizerOptions* IMinimizer::getOptions()
 
 return minimizer options 
 ";
 
-%feature("docstring")  IMinimizer::getOptions "const MinimizerOptions * IMinimizer::getOptions() const 
+%feature("docstring")  IMinimizer::getOptions "virtual const MinimizerOptions* IMinimizer::getOptions() const 
 ";
 
-%feature("docstring")  IMinimizer::setOptions "void IMinimizer::setOptions(const MinimizerOptions &options)
+%feature("docstring")  IMinimizer::setOptions "virtual void IMinimizer::setOptions(const MinimizerOptions &)
 
 set minimizer options 
 ";
 
-%feature("docstring")  IMinimizer::setOptionString "void IMinimizer::setOptionString(const std::string &options)
+%feature("docstring")  IMinimizer::setOptionString "virtual void IMinimizer::setOptionString(const std::string &)
 
 set minimizer option string 
 ";
 
-%feature("docstring")  IMinimizer::isGradientBasedAgorithm "bool IMinimizer::isGradientBasedAgorithm()
+%feature("docstring")  IMinimizer::isGradientBasedAgorithm "virtual bool IMinimizer::isGradientBasedAgorithm()
 
 Returns true if type of algorithm is Levenberg-Marquardt or similar. 
 ";
 
-%feature("docstring")  IMinimizer::getMinimizerName "std::string IMinimizer::getMinimizerName() const
+%feature("docstring")  IMinimizer::getMinimizerName "virtual std::string IMinimizer::getMinimizerName() const =0
 
 return name of the minimizer 
 ";
 
-%feature("docstring")  IMinimizer::getAlgorithmName "std::string IMinimizer::getAlgorithmName() const
+%feature("docstring")  IMinimizer::getAlgorithmName "virtual std::string IMinimizer::getAlgorithmName() const =0
 
 return name of the minimization algorithm 
 ";
@@ -842,8 +825,6 @@ C++ includes: ROOTGeneticMinimizer.h
 ";
 
 %feature("docstring")  ROOTGeneticMinimizer::setParameter "void ROOTGeneticMinimizer::setParameter(size_t index, const FitParameter *par)
-
-Sets internal minimizer parameter. 
 ";
 
 
@@ -887,13 +868,13 @@ run minimization
 ";
 
 %feature("docstring")  ROOTMinimizer::setParameter "void ROOTMinimizer::setParameter(size_t index, const FitParameter *par)
-
-Sets internal minimizer parameter. 
 ";
 
 %feature("docstring")  ROOTMinimizer::setParameters "void ROOTMinimizer::setParameters(const FitSuiteParameters &parameters)
 
-Sets internal minimizer parameters using external parameter list. 
+Sets internal minimizer parameter.
+
+Sets internal minimizer parameters using external parameter list 
 ";
 
 %feature("docstring")  ROOTMinimizer::setChiSquaredFunction "void ROOTMinimizer::setChiSquaredFunction(function_chi2_t fun_chi2, size_t nparameters)
@@ -911,24 +892,14 @@ Sets gradient function to minimize.
 Returns number of variables to fit. 
 ";
 
-%feature("docstring")  ROOTMinimizer::getMinValue "double ROOTMinimizer::getMinValue() const
-
-Returns minimum function value. 
-";
-
-%feature("docstring")  ROOTMinimizer::getValueOfVariableAtMinimum "double ROOTMinimizer::getValueOfVariableAtMinimum(size_t i) const
-
-Returns value of the parameter at the minimum. 
+%feature("docstring")  ROOTMinimizer::getMinValue "double ROOTMinimizer::getMinValue() const 
 ";
 
 %feature("docstring")  ROOTMinimizer::getValueOfVariablesAtMinimum "std::vector< double > ROOTMinimizer::getValueOfVariablesAtMinimum() const
 
-Returns values of parameters at the minimum. 
-";
-
-%feature("docstring")  ROOTMinimizer::getErrorOfVariable "double ROOTMinimizer::getErrorOfVariable(size_t i) const
+Returns minimum function value.
 
-Returns error of variable at minimum. 
+Returns values of parameters at the minimum 
 ";
 
 %feature("docstring")  ROOTMinimizer::getErrorOfVariables "std::vector< double > ROOTMinimizer::getErrorOfVariables() const
@@ -938,12 +909,12 @@ Returns errors of variables at minimum.
 
 %feature("docstring")  ROOTMinimizer::printResults "void ROOTMinimizer::printResults() const
 
-Prints fit results. 
+clear resources (parameters) for consecutives minimizations
+
+Prints fit results 
 ";
 
 %feature("docstring")  ROOTMinimizer::clear "void ROOTMinimizer::clear()
-
-clear resources (parameters) for consecutives minimizations 
 ";
 
 %feature("docstring")  ROOTMinimizer::getNCalls "size_t ROOTMinimizer::getNCalls() const
@@ -1102,74 +1073,73 @@ C++ includes: TrivialMinimizer.h
 %feature("docstring")  TrivialMinimizer::TrivialMinimizer "TrivialMinimizer::TrivialMinimizer()
 ";
 
-%feature("docstring")  TrivialMinimizer::~TrivialMinimizer "virtual TrivialMinimizer::~TrivialMinimizer()
+%feature("docstring")  TrivialMinimizer::~TrivialMinimizer "TrivialMinimizer::~TrivialMinimizer() final
 ";
 
-%feature("docstring")  TrivialMinimizer::minimize "void TrivialMinimizer::minimize()
+%feature("docstring")  TrivialMinimizer::minimize "void TrivialMinimizer::minimize() final
 
 run minimization 
 ";
 
-%feature("docstring")  TrivialMinimizer::setParameters "void TrivialMinimizer::setParameters(const FitSuiteParameters &parameters)
+%feature("docstring")  TrivialMinimizer::setParameters "void TrivialMinimizer::setParameters(const FitSuiteParameters &parameters) final
 
-Sets internal minimizer parameters using external parameter list. 
+Sets internal minimizer parameter.
+
+Sets internal minimizer parameters using external parameter list 
 ";
 
-%feature("docstring")  TrivialMinimizer::setChiSquaredFunction "virtual void TrivialMinimizer::setChiSquaredFunction(function_chi2_t fun_chi2, size_t)
+%feature("docstring")  TrivialMinimizer::setChiSquaredFunction "void TrivialMinimizer::setChiSquaredFunction(function_chi2_t fun_chi2, size_t) final
 
 Sets chi squared function to minimize. 
 ";
 
-%feature("docstring")  TrivialMinimizer::setGradientFunction "virtual void TrivialMinimizer::setGradientFunction(function_gradient_t, size_t, size_t)
+%feature("docstring")  TrivialMinimizer::setGradientFunction "void TrivialMinimizer::setGradientFunction(function_gradient_t, size_t, size_t) final
 
 Sets gradient function to minimize. 
 ";
 
-%feature("docstring")  TrivialMinimizer::getNumberOfVariables "virtual size_t TrivialMinimizer::getNumberOfVariables() const
+%feature("docstring")  TrivialMinimizer::getNumberOfVariables "size_t TrivialMinimizer::getNumberOfVariables() const final
 
 Returns number of variables to fit. 
 ";
 
-%feature("docstring")  TrivialMinimizer::getValueOfVariableAtMinimum "double TrivialMinimizer::getValueOfVariableAtMinimum(size_t index) const
-
-Returns pointer to the parameters values at the minimum. 
-";
-
-%feature("docstring")  TrivialMinimizer::getValueOfVariablesAtMinimum "std::vector< double > TrivialMinimizer::getValueOfVariablesAtMinimum() const
+%feature("docstring")  TrivialMinimizer::getValueOfVariablesAtMinimum "std::vector< double > TrivialMinimizer::getValueOfVariablesAtMinimum() const final
 
 Returns value of the parameter at the minimum. 
 ";
 
-%feature("docstring")  TrivialMinimizer::printResults "void TrivialMinimizer::printResults() const
+%feature("docstring")  TrivialMinimizer::getErrorOfVariables "std::vector< double > TrivialMinimizer::getErrorOfVariables() const final
 
-Prints fit results. 
+Returns errors of variables at minimum. 
 ";
 
-%feature("docstring")  TrivialMinimizer::getErrorOfVariables "std::vector< double > TrivialMinimizer::getErrorOfVariables() const
+%feature("docstring")  TrivialMinimizer::printResults "void TrivialMinimizer::printResults() const final
 
-Returns errors of variables at minimum. 
+clear resources (parameters) for consecutives minimizations
+
+Prints fit results 
 ";
 
-%feature("docstring")  TrivialMinimizer::getMinimizerName "std::string TrivialMinimizer::getMinimizerName() const
+%feature("docstring")  TrivialMinimizer::getMinimizerName "std::string TrivialMinimizer::getMinimizerName() const final
 
 return name of the minimizer 
 ";
 
-%feature("docstring")  TrivialMinimizer::getAlgorithmName "std::string TrivialMinimizer::getAlgorithmName() const
+%feature("docstring")  TrivialMinimizer::getAlgorithmName "std::string TrivialMinimizer::getAlgorithmName() const final
 
 return name of the minimization algorithm 
 ";
 
-%feature("docstring")  TrivialMinimizer::getOptions "MinimizerOptions * TrivialMinimizer::getOptions()
+%feature("docstring")  TrivialMinimizer::getOptions "MinimizerOptions* TrivialMinimizer::getOptions() final
 
 return minimizer options 
 ";
 
-%feature("docstring")  TrivialMinimizer::getOptions "const MinimizerOptions * TrivialMinimizer::getOptions() const 
+%feature("docstring")  TrivialMinimizer::getOptions "const MinimizerOptions* TrivialMinimizer::getOptions() const final
 ";
 
 
-// File: namespace_0D15.xml
+// File: namespace_0D14.xml
 
 
 // File: namespaceAlgorithmNames.xml
@@ -1234,9 +1204,6 @@ Returns string right-padded with blanks.
 // File: Configurable_8h.xml
 
 
-// File: IMinimizer_8cpp.xml
-
-
 // File: IMinimizer_8h.xml
 
 
diff --git a/auto/Wrap/libBornAgainCore.py b/auto/Wrap/libBornAgainCore.py
index 2dcf8bad944..a35b265a657 100644
--- a/auto/Wrap/libBornAgainCore.py
+++ b/auto/Wrap/libBornAgainCore.py
@@ -1651,7 +1651,12 @@ class IParameterized(INamed):
 
 
     def registerParameter(self, name, parpointer):
-        """registerParameter(IParameterized self, std::string const & name, double * parpointer) -> RealParameter"""
+        """
+        registerParameter(IParameterized self, std::string const & name, double * parpointer) -> RealParameter
+
+        RealParameter & IParameterized::registerParameter(const std::string &name, double *parpointer)
+
+        """
         return _libBornAgainCore.IParameterized_registerParameter(self, name, parpointer)
 
 
@@ -6615,7 +6620,12 @@ class ISampleBuilder(IParameterized):
 
 
     def registerParameter(self, name, parpointer):
-        """registerParameter(ISampleBuilder self, std::string const & name, int64_t parpointer) -> RealParameter"""
+        """
+        registerParameter(ISampleBuilder self, std::string const & name, int64_t parpointer) -> RealParameter
+
+        RealParameter & IParameterized::registerParameter(const std::string &name, double *parpointer)
+
+        """
         return _libBornAgainCore.ISampleBuilder_registerParameter(self, name, parpointer)
 
 
@@ -8058,7 +8068,7 @@ class Ellipse(IShape2D):
         Radius along y-axis
 
         theta: 
-         Angle of  Ellipse rotation in radians 
+        Angle of  Ellipse rotation in radians 
 
         """
         this = _libBornAgainCore.new_Ellipse(xcenter, ycenter, xradius, yradius, theta)
@@ -11727,7 +11737,7 @@ class FormFactorDecoratorDebyeWaller(IFormFactorDecorator):
         """
         clone(FormFactorDecoratorDebyeWaller self) -> FormFactorDecoratorDebyeWaller
 
-        FormFactorDecoratorDebyeWaller * FormFactorDecoratorDebyeWaller::clone() const
+        FormFactorDecoratorDebyeWaller* FormFactorDecoratorDebyeWaller::clone() const final
 
         Returns a clone of this  ISample object. 
 
@@ -11739,7 +11749,7 @@ class FormFactorDecoratorDebyeWaller(IFormFactorDecorator):
         """
         accept(FormFactorDecoratorDebyeWaller self, ISampleVisitor visitor)
 
-        void FormFactorDecoratorDebyeWaller::accept(ISampleVisitor *visitor) const
+        void FormFactorDecoratorDebyeWaller::accept(ISampleVisitor *visitor) const final
 
         Calls the  ISampleVisitor's visit method. 
 
@@ -13194,8 +13204,6 @@ class FormFactorLongRipple2Lorentz(IFormFactorBorn):
 
         FormFactorLongRipple2Lorentz::FormFactorLongRipple2Lorentz(double length, double width, double height, double asymmetry)
 
-        FormFactorLongRipple2Lorentz constructor.
-
         Parameters:
         -----------
 
@@ -18910,8 +18918,6 @@ class InterferenceFunction2DLattice(IInterferenceFunction):
 
         InterferenceFunction2DLattice::InterferenceFunction2DLattice(double length_1, double length_2, double angle, double xi=0.0)
 
-        contructor
-
         Parameters:
         -----------
 
@@ -19083,16 +19089,16 @@ class InterferenceFunction2DParaCrystal(IInterferenceFunction):
         -----------
 
         length_1: 
-         Length of first lattice basis vector.
+        Length of first lattice basis vector.
 
         length_2: 
-         Length of second lattice basis vector.
+        Length of second lattice basis vector.
 
         alpha_lattice: 
-         Angle between the lattice basis vectors.
+        Angle between the lattice basis vectors.
 
         xi: 
-         Angle between first basis vector and the x-axis of incoming beam.
+        Angle between first basis vector and the x-axis of incoming beam.
 
         damping_length: 
         Damping length for removing delta function singularity at q=0. 
@@ -20010,7 +20016,7 @@ class Layer(ICompositeSample):
         """
         clone(Layer self) -> Layer
 
-        Layer * Layer::clone() const
+        Layer* Layer::clone() const final
 
         Returns a clone of this  ISample object. 
 
@@ -22224,7 +22230,9 @@ class ParameterPool(_object):
     """
 
 
-    Holds a map of pointers to parameters (which must have different names).
+    Holds a map of pointers to parameters.Used in  IParameterized, which has a member ParameterPool* m_pool. So this is pimpl (pointer to implementation) idiom, with  ParameterPool providing the implementation of all the nontrivial functionality of  IParameterized.
+
+    Parameter names must be unique since we use them as map keys.
 
     C++ includes: ParameterPool.h
 
@@ -22268,7 +22276,7 @@ class ParameterPool(_object):
 
         ParameterPool * ParameterPool::cloneWithPrefix(const std::string &prefix) const
 
-        Returns a clone with  prefix added to every parameter key. 
+        Returns a clone with  prefix prepended to every parameter key. 
 
         """
         return _libBornAgainCore.ParameterPool_cloneWithPrefix(self, prefix)
@@ -22280,9 +22288,7 @@ class ParameterPool(_object):
 
         void ParameterPool::copyToExternalPool(const std::string &prefix, ParameterPool *external_pool) const
 
-        Copies parameters to  external_pool, adding  prefix to every key.
-
-        Copy parameters of given pool to the external pool while adding prefix to local parameter keys 
+        Copies parameters of given pool to  other pool, prepeding  prefix to the parameter names. 
 
         """
         return _libBornAgainCore.ParameterPool_copyToExternalPool(self, prefix, external_pool)
@@ -22294,7 +22300,7 @@ class ParameterPool(_object):
 
         void ParameterPool::clear()
 
-        Deletes parameter map. 
+        Clears the parameter map. 
 
         """
         return _libBornAgainCore.ParameterPool_clear(self)
@@ -22326,11 +22332,11 @@ class ParameterPool(_object):
         """
         addParameter(ParameterPool self, RealParameter par) -> RealParameter
 
-        void ParameterPool::addParameter(RealParameter *par)
+        RealParameter & ParameterPool::addParameter(RealParameter *par)
 
-        Adds parameter to the pool.
+        Adds parameter to the pool, and returns reference to the input pointer.
 
-        Low-level routine. 
+        Returning the input pointer allows us to concatenate function calls like pool->addParameter( new  RealParameter(...) ).setLimits(-1,+1).setFixed().setUnit("nm") 
 
         """
         return _libBornAgainCore.ParameterPool_addParameter(self, par)
@@ -22343,9 +22349,7 @@ class ParameterPool(_object):
 
         const RealParameter * ParameterPool::getParameter(const std::string &name) const
 
-        Returns parameter named  name.
-
-        Returns parameter with given name. 
+        Returns parameter with given  name. 
 
         """
         return _libBornAgainCore.ParameterPool_getParameter(self, *args)
@@ -22369,7 +22373,7 @@ class ParameterPool(_object):
 
         std::vector< RealParameter * > ParameterPool::getMatchedParameters(const std::string &wildcards) const
 
-        Returns vector of parameters which fit pattern. 
+        Returns vector of parameters that match the  pattern (wildcards '*' allowed). 
 
         """
         return _libBornAgainCore.ParameterPool_getMatchedParameters(self, wildcards)
@@ -22393,8 +22397,6 @@ class ParameterPool(_object):
 
         int ParameterPool::setMatchedParametersValue(const std::string &wildcards, double value)
 
-        Sets parameter value, return number of changed parameters.
-
         Sets parameter value. 
 
         """
@@ -22405,9 +22407,7 @@ class ParameterPool(_object):
         """
         getParameterNames(ParameterPool self) -> vector_string_t
 
-        std::vector< std::string > ParameterPool::getParameterNames() const
-
-        Returns all parameter names. 
+        std::vector< std::string > ParameterPool::getParameterNames() const 
 
         """
         return _libBornAgainCore.ParameterPool_getParameterNames(self)
@@ -23390,7 +23390,7 @@ class RealParameter(INamed):
         clone(RealParameter self, std::string const & new_name) -> RealParameter
         clone(RealParameter self) -> RealParameter
 
-        virtual RealParameter* RealParameter::clone(const std::string &new_name="") const =0
+        RealParameter * RealParameter::clone(const std::string &new_name="") const 
 
         """
         return _libBornAgainCore.RealParameter_clone(self, *args)
@@ -23421,7 +23421,12 @@ class RealParameter(INamed):
 
 
     def setUnit(self, name):
-        """setUnit(RealParameter self, std::string const & name) -> RealParameter"""
+        """
+        setUnit(RealParameter self, std::string const & name) -> RealParameter
+
+        RealParameter& RealParameter::setUnit(const std::string &name)
+
+        """
         return _libBornAgainCore.RealParameter_setUnit(self, name)
 
 
@@ -23450,7 +23455,12 @@ class RealParameter(INamed):
 
 
     def setLimits(self, limits):
-        """setLimits(RealParameter self, Limits limits) -> RealParameter"""
+        """
+        setLimits(RealParameter self, Limits limits) -> RealParameter
+
+        RealParameter& RealParameter::setLimits(const Limits &limits)
+
+        """
         return _libBornAgainCore.RealParameter_setLimits(self, limits)
 
 
@@ -23465,17 +23475,32 @@ class RealParameter(INamed):
 
 
     def setLimited(self, lower, upper):
-        """setLimited(RealParameter self, double lower, double upper) -> RealParameter"""
+        """
+        setLimited(RealParameter self, double lower, double upper) -> RealParameter
+
+        RealParameter & RealParameter::setLimited(double lower, double upper)
+
+        """
         return _libBornAgainCore.RealParameter_setLimited(self, lower, upper)
 
 
     def setPositive(self):
-        """setPositive(RealParameter self) -> RealParameter"""
+        """
+        setPositive(RealParameter self) -> RealParameter
+
+        RealParameter & RealParameter::setPositive()
+
+        """
         return _libBornAgainCore.RealParameter_setPositive(self)
 
 
     def setNonnegative(self):
-        """setNonnegative(RealParameter self) -> RealParameter"""
+        """
+        setNonnegative(RealParameter self) -> RealParameter
+
+        RealParameter & RealParameter::setNonnegative()
+
+        """
         return _libBornAgainCore.RealParameter_setNonnegative(self)
 
 
@@ -23493,7 +23518,7 @@ class RealParameter(INamed):
         """
         unit(RealParameter self) -> std::string
 
-        virtual std::string RealParameter::unit() const =0
+        std::string RealParameter::unit() const 
 
         """
         return _libBornAgainCore.RealParameter_unit(self)
@@ -24350,7 +24375,7 @@ class SampleBuilderFactory(_object):
         registerItem(SampleBuilderFactory self, std::string const & item_key, IFactory< std::string,ISampleBuilder >::CreateItemCallback CreateFn, std::string const & itemDescription) -> bool
         registerItem(SampleBuilderFactory self, std::string const & item_key, IFactory< std::string,ISampleBuilder >::CreateItemCallback CreateFn) -> bool
 
-        bool IFactory< Key, AbstractProduct >::registerItem(const Key &item_key, CreateItemCallback CreateFn, const std::string &itemDescription)
+        bool IFactory< Key, AbstractProduct >::registerItem(const Key &item_key, CreateItemCallback CreateFn, const std::string &itemDescription="")
 
         Registers object's creation function and store object description. 
 
@@ -24439,7 +24464,7 @@ class SimulationFactory(_object):
         registerItem(SimulationFactory self, std::string const & item_key, IFactory< std::string,GISASSimulation >::CreateItemCallback CreateFn, std::string const & itemDescription) -> bool
         registerItem(SimulationFactory self, std::string const & item_key, IFactory< std::string,GISASSimulation >::CreateItemCallback CreateFn) -> bool
 
-        bool IFactory< Key, AbstractProduct >::registerItem(const Key &item_key, CreateItemCallback CreateFn, const std::string &itemDescription)
+        bool IFactory< Key, AbstractProduct >::registerItem(const Key &item_key, CreateItemCallback CreateFn, const std::string &itemDescription="")
 
         Registers object's creation function and store object description. 
 
diff --git a/auto/Wrap/libBornAgainCore_wrap.cpp b/auto/Wrap/libBornAgainCore_wrap.cpp
index 17101b5491e..70a5a842bb9 100644
--- a/auto/Wrap/libBornAgainCore_wrap.cpp
+++ b/auto/Wrap/libBornAgainCore_wrap.cpp
@@ -100942,7 +100942,12 @@ static PyMethodDef SwigMethods[] = {
 		"void IParameterized::printParameters()\n"
 		"\n"
 		""},
-	 { (char *)"IParameterized_registerParameter", _wrap_IParameterized_registerParameter, METH_VARARGS, (char *)"IParameterized_registerParameter(IParameterized self, std::string const & name, double * parpointer) -> RealParameter"},
+	 { (char *)"IParameterized_registerParameter", _wrap_IParameterized_registerParameter, METH_VARARGS, (char *)"\n"
+		"IParameterized_registerParameter(IParameterized self, std::string const & name, double * parpointer) -> RealParameter\n"
+		"\n"
+		"RealParameter & IParameterized::registerParameter(const std::string &name, double *parpointer)\n"
+		"\n"
+		""},
 	 { (char *)"IParameterized_setParameterValue", _wrap_IParameterized_setParameterValue, METH_VARARGS, (char *)"\n"
 		"IParameterized_setParameterValue(IParameterized self, std::string const & name, double value)\n"
 		"\n"
@@ -103466,7 +103471,12 @@ static PyMethodDef SwigMethods[] = {
 		"const IFTDistribution2D * ISampleBuilder::getFTDistribution2D() const \n"
 		"\n"
 		""},
-	 { (char *)"ISampleBuilder_registerParameter", _wrap_ISampleBuilder_registerParameter, METH_VARARGS, (char *)"ISampleBuilder_registerParameter(ISampleBuilder self, std::string const & name, int64_t parpointer) -> RealParameter"},
+	 { (char *)"ISampleBuilder_registerParameter", _wrap_ISampleBuilder_registerParameter, METH_VARARGS, (char *)"\n"
+		"ISampleBuilder_registerParameter(ISampleBuilder self, std::string const & name, int64_t parpointer) -> RealParameter\n"
+		"\n"
+		"RealParameter & IParameterized::registerParameter(const std::string &name, double *parpointer)\n"
+		"\n"
+		""},
 	 { (char *)"ISampleBuilder_setParameterValue", _wrap_ISampleBuilder_setParameterValue, METH_VARARGS, (char *)"\n"
 		"ISampleBuilder_setParameterValue(ISampleBuilder self, std::string const & name, double value)\n"
 		"\n"
@@ -104319,7 +104329,7 @@ static PyMethodDef SwigMethods[] = {
 		"Radius along y-axis\n"
 		"\n"
 		"theta: \n"
-		" Angle of  Ellipse rotation in radians \n"
+		"Angle of  Ellipse rotation in radians \n"
 		"\n"
 		""},
 	 { (char *)"Ellipse_clone", _wrap_Ellipse_clone, METH_VARARGS, (char *)"\n"
@@ -106057,7 +106067,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorDecoratorDebyeWaller_clone", _wrap_FormFactorDecoratorDebyeWaller_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorDecoratorDebyeWaller_clone(FormFactorDecoratorDebyeWaller self) -> FormFactorDecoratorDebyeWaller\n"
 		"\n"
-		"FormFactorDecoratorDebyeWaller * FormFactorDecoratorDebyeWaller::clone() const\n"
+		"FormFactorDecoratorDebyeWaller* FormFactorDecoratorDebyeWaller::clone() const final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -106065,7 +106075,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorDecoratorDebyeWaller_accept", _wrap_FormFactorDecoratorDebyeWaller_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorDecoratorDebyeWaller_accept(FormFactorDecoratorDebyeWaller self, ISampleVisitor visitor)\n"
 		"\n"
-		"void FormFactorDecoratorDebyeWaller::accept(ISampleVisitor *visitor) const\n"
+		"void FormFactorDecoratorDebyeWaller::accept(ISampleVisitor *visitor) const final\n"
 		"\n"
 		"Calls the  ISampleVisitor's visit method. \n"
 		"\n"
@@ -106078,12 +106088,7 @@ static PyMethodDef SwigMethods[] = {
 		"Returns scattering amplitude for complex wavevector bin. \n"
 		"\n"
 		""},
-	 { (char *)"delete_FormFactorDecoratorDebyeWaller", _wrap_delete_FormFactorDecoratorDebyeWaller, METH_VARARGS, (char *)"\n"
-		"delete_FormFactorDecoratorDebyeWaller(FormFactorDecoratorDebyeWaller self)\n"
-		"\n"
-		"virtual FormFactorDecoratorDebyeWaller::~FormFactorDecoratorDebyeWaller()\n"
-		"\n"
-		""},
+	 { (char *)"delete_FormFactorDecoratorDebyeWaller", _wrap_delete_FormFactorDecoratorDebyeWaller, METH_VARARGS, (char *)"delete_FormFactorDecoratorDebyeWaller(FormFactorDecoratorDebyeWaller self)"},
 	 { (char *)"FormFactorDecoratorDebyeWaller_swigregister", FormFactorDecoratorDebyeWaller_swigregister, METH_VARARGS, NULL},
 	 { (char *)"new_FormFactorDodecahedron", _wrap_new_FormFactorDodecahedron, METH_VARARGS, (char *)"\n"
 		"new_FormFactorDodecahedron(double edge) -> FormFactorDodecahedron\n"
@@ -106888,8 +106893,6 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		"FormFactorLongRipple2Lorentz::FormFactorLongRipple2Lorentz(double length, double width, double height, double asymmetry)\n"
 		"\n"
-		"FormFactorLongRipple2Lorentz constructor.\n"
-		"\n"
 		"Parameters:\n"
 		"-----------\n"
 		"\n"
@@ -110102,8 +110105,6 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		"InterferenceFunction2DLattice::InterferenceFunction2DLattice(double length_1, double length_2, double angle, double xi=0.0)\n"
 		"\n"
-		"contructor\n"
-		"\n"
 		"Parameters:\n"
 		"-----------\n"
 		"\n"
@@ -110196,16 +110197,16 @@ static PyMethodDef SwigMethods[] = {
 		"-----------\n"
 		"\n"
 		"length_1: \n"
-		" Length of first lattice basis vector.\n"
+		"Length of first lattice basis vector.\n"
 		"\n"
 		"length_2: \n"
-		" Length of second lattice basis vector.\n"
+		"Length of second lattice basis vector.\n"
 		"\n"
 		"alpha_lattice: \n"
-		" Angle between the lattice basis vectors.\n"
+		"Angle between the lattice basis vectors.\n"
 		"\n"
 		"xi: \n"
-		" Angle between first basis vector and the x-axis of incoming beam.\n"
+		"Angle between first basis vector and the x-axis of incoming beam.\n"
 		"\n"
 		"damping_length: \n"
 		"Damping length for removing delta function singularity at q=0. \n"
@@ -110683,7 +110684,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Layer_clone", _wrap_Layer_clone, METH_VARARGS, (char *)"\n"
 		"Layer_clone(Layer self) -> Layer\n"
 		"\n"
-		"Layer * Layer::clone() const\n"
+		"Layer* Layer::clone() const final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -112035,7 +112036,7 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		"ParameterPool * ParameterPool::cloneWithPrefix(const std::string &prefix) const\n"
 		"\n"
-		"Returns a clone with  prefix added to every parameter key. \n"
+		"Returns a clone with  prefix prepended to every parameter key. \n"
 		"\n"
 		""},
 	 { (char *)"ParameterPool_copyToExternalPool", _wrap_ParameterPool_copyToExternalPool, METH_VARARGS, (char *)"\n"
@@ -112043,9 +112044,7 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		"void ParameterPool::copyToExternalPool(const std::string &prefix, ParameterPool *external_pool) const\n"
 		"\n"
-		"Copies parameters to  external_pool, adding  prefix to every key.\n"
-		"\n"
-		"Copy parameters of given pool to the external pool while adding prefix to local parameter keys \n"
+		"Copies parameters of given pool to  other pool, prepeding  prefix to the parameter names. \n"
 		"\n"
 		""},
 	 { (char *)"ParameterPool_clear", _wrap_ParameterPool_clear, METH_VARARGS, (char *)"\n"
@@ -112053,7 +112052,7 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		"void ParameterPool::clear()\n"
 		"\n"
-		"Deletes parameter map. \n"
+		"Clears the parameter map. \n"
 		"\n"
 		""},
 	 { (char *)"ParameterPool_getName", _wrap_ParameterPool_getName, METH_VARARGS, (char *)"\n"
@@ -112073,11 +112072,11 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParameterPool_addParameter", _wrap_ParameterPool_addParameter, METH_VARARGS, (char *)"\n"
 		"ParameterPool_addParameter(ParameterPool self, RealParameter par) -> RealParameter\n"
 		"\n"
-		"void ParameterPool::addParameter(RealParameter *par)\n"
+		"RealParameter & ParameterPool::addParameter(RealParameter *par)\n"
 		"\n"
-		"Adds parameter to the pool.\n"
+		"Adds parameter to the pool, and returns reference to the input pointer.\n"
 		"\n"
-		"Low-level routine. \n"
+		"Returning the input pointer allows us to concatenate function calls like pool->addParameter( new  RealParameter(...) ).setLimits(-1,+1).setFixed().setUnit(\"nm\") \n"
 		"\n"
 		""},
 	 { (char *)"ParameterPool_getParameter", _wrap_ParameterPool_getParameter, METH_VARARGS, (char *)"\n"
@@ -112086,9 +112085,7 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		"const RealParameter * ParameterPool::getParameter(const std::string &name) const\n"
 		"\n"
-		"Returns parameter named  name.\n"
-		"\n"
-		"Returns parameter with given name. \n"
+		"Returns parameter with given  name. \n"
 		"\n"
 		""},
 	 { (char *)"ParameterPool_getParameters", _wrap_ParameterPool_getParameters, METH_VARARGS, (char *)"\n"
@@ -112104,7 +112101,7 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		"std::vector< RealParameter * > ParameterPool::getMatchedParameters(const std::string &wildcards) const\n"
 		"\n"
-		"Returns vector of parameters which fit pattern. \n"
+		"Returns vector of parameters that match the  pattern (wildcards '*' allowed). \n"
 		"\n"
 		""},
 	 { (char *)"ParameterPool_setParameterValue", _wrap_ParameterPool_setParameterValue, METH_VARARGS, (char *)"\n"
@@ -112120,17 +112117,13 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		"int ParameterPool::setMatchedParametersValue(const std::string &wildcards, double value)\n"
 		"\n"
-		"Sets parameter value, return number of changed parameters.\n"
-		"\n"
 		"Sets parameter value. \n"
 		"\n"
 		""},
 	 { (char *)"ParameterPool_getParameterNames", _wrap_ParameterPool_getParameterNames, METH_VARARGS, (char *)"\n"
 		"ParameterPool_getParameterNames(ParameterPool self) -> vector_string_t\n"
 		"\n"
-		"std::vector< std::string > ParameterPool::getParameterNames() const\n"
-		"\n"
-		"Returns all parameter names. \n"
+		"std::vector< std::string > ParameterPool::getParameterNames() const \n"
 		"\n"
 		""},
 	 { (char *)"ParameterPool_swigregister", ParameterPool_swigregister, METH_VARARGS, NULL},
@@ -112706,7 +112699,7 @@ static PyMethodDef SwigMethods[] = {
 		"clone(std::string const & new_name) -> RealParameter\n"
 		"RealParameter_clone(RealParameter self) -> RealParameter\n"
 		"\n"
-		"virtual RealParameter* RealParameter::clone(const std::string &new_name=\"\") const =0\n"
+		"RealParameter * RealParameter::clone(const std::string &new_name=\"\") const \n"
 		"\n"
 		""},
 	 { (char *)"RealParameter_setValue", _wrap_RealParameter_setValue, METH_VARARGS, (char *)"\n"
@@ -112725,7 +112718,12 @@ static PyMethodDef SwigMethods[] = {
 		"Returns value of wrapped parameter. \n"
 		"\n"
 		""},
-	 { (char *)"RealParameter_setUnit", _wrap_RealParameter_setUnit, METH_VARARGS, (char *)"RealParameter_setUnit(RealParameter self, std::string const & name) -> RealParameter"},
+	 { (char *)"RealParameter_setUnit", _wrap_RealParameter_setUnit, METH_VARARGS, (char *)"\n"
+		"RealParameter_setUnit(RealParameter self, std::string const & name) -> RealParameter\n"
+		"\n"
+		"RealParameter& RealParameter::setUnit(const std::string &name)\n"
+		"\n"
+		""},
 	 { (char *)"RealParameter_isNull", _wrap_RealParameter_isNull, METH_VARARGS, (char *)"\n"
 		"RealParameter_isNull(RealParameter self) -> bool\n"
 		"\n"
@@ -112742,30 +112740,45 @@ static PyMethodDef SwigMethods[] = {
 		"throw exception if parameter was not initialized with proper value \n"
 		"\n"
 		""},
-	 { (char *)"RealParameter_setLimits", _wrap_RealParameter_setLimits, METH_VARARGS, (char *)"RealParameter_setLimits(RealParameter self, Limits limits) -> RealParameter"},
+	 { (char *)"RealParameter_setLimits", _wrap_RealParameter_setLimits, METH_VARARGS, (char *)"\n"
+		"RealParameter_setLimits(RealParameter self, Limits limits) -> RealParameter\n"
+		"\n"
+		"RealParameter& RealParameter::setLimits(const Limits &limits)\n"
+		"\n"
+		""},
 	 { (char *)"RealParameter_getLimits", _wrap_RealParameter_getLimits, METH_VARARGS, (char *)"\n"
 		"RealParameter_getLimits(RealParameter self) -> Limits\n"
 		"\n"
 		"Limits RealParameter::getLimits() const \n"
 		"\n"
 		""},
-	 { (char *)"RealParameter_setLimited", _wrap_RealParameter_setLimited, METH_VARARGS, (char *)"RealParameter_setLimited(RealParameter self, double lower, double upper) -> RealParameter"},
-	 { (char *)"RealParameter_setPositive", _wrap_RealParameter_setPositive, METH_VARARGS, (char *)"RealParameter_setPositive(RealParameter self) -> RealParameter"},
-	 { (char *)"RealParameter_setNonnegative", _wrap_RealParameter_setNonnegative, METH_VARARGS, (char *)"RealParameter_setNonnegative(RealParameter self) -> RealParameter"},
+	 { (char *)"RealParameter_setLimited", _wrap_RealParameter_setLimited, METH_VARARGS, (char *)"\n"
+		"RealParameter_setLimited(RealParameter self, double lower, double upper) -> RealParameter\n"
+		"\n"
+		"RealParameter & RealParameter::setLimited(double lower, double upper)\n"
+		"\n"
+		""},
+	 { (char *)"RealParameter_setPositive", _wrap_RealParameter_setPositive, METH_VARARGS, (char *)"\n"
+		"RealParameter_setPositive(RealParameter self) -> RealParameter\n"
+		"\n"
+		"RealParameter & RealParameter::setPositive()\n"
+		"\n"
+		""},
+	 { (char *)"RealParameter_setNonnegative", _wrap_RealParameter_setNonnegative, METH_VARARGS, (char *)"\n"
+		"RealParameter_setNonnegative(RealParameter self) -> RealParameter\n"
+		"\n"
+		"RealParameter & RealParameter::setNonnegative()\n"
+		"\n"
+		""},
 	 { (char *)"RealParameter___eq__", _wrap_RealParameter___eq__, METH_VARARGS, (char *)"RealParameter___eq__(RealParameter self, RealParameter other) -> bool"},
 	 { (char *)"RealParameter___ne__", _wrap_RealParameter___ne__, METH_VARARGS, (char *)"RealParameter___ne__(RealParameter self, RealParameter other) -> bool"},
 	 { (char *)"RealParameter_unit", _wrap_RealParameter_unit, METH_VARARGS, (char *)"\n"
 		"RealParameter_unit(RealParameter self) -> std::string\n"
 		"\n"
-		"virtual std::string RealParameter::unit() const =0\n"
-		"\n"
-		""},
-	 { (char *)"delete_RealParameter", _wrap_delete_RealParameter, METH_VARARGS, (char *)"\n"
-		"delete_RealParameter(RealParameter self)\n"
-		"\n"
-		"virtual RealParameter::~RealParameter()\n"
+		"std::string RealParameter::unit() const \n"
 		"\n"
 		""},
+	 { (char *)"delete_RealParameter", _wrap_delete_RealParameter, METH_VARARGS, (char *)"delete_RealParameter(RealParameter self)"},
 	 { (char *)"RealParameter_swigregister", RealParameter_swigregister, METH_VARARGS, NULL},
 	 { (char *)"new_Rectangle", _wrap_new_Rectangle, METH_VARARGS, (char *)"\n"
 		"new_Rectangle(double xlow, double ylow, double xup, double yup) -> Rectangle\n"
@@ -113224,7 +113237,7 @@ static PyMethodDef SwigMethods[] = {
 		"registerItem(std::string const & item_key, IFactory< std::string,ISampleBuilder >::CreateItemCallback CreateFn, std::string const & itemDescription) -> bool\n"
 		"SampleBuilderFactory_registerItem(SampleBuilderFactory self, std::string const & item_key, IFactory< std::string,ISampleBuilder >::CreateItemCallback CreateFn) -> bool\n"
 		"\n"
-		"bool IFactory< Key, AbstractProduct >::registerItem(const Key &item_key, CreateItemCallback CreateFn, const std::string &itemDescription)\n"
+		"bool IFactory< Key, AbstractProduct >::registerItem(const Key &item_key, CreateItemCallback CreateFn, const std::string &itemDescription=\"\")\n"
 		"\n"
 		"Registers object's creation function and store object description. \n"
 		"\n"
@@ -113274,7 +113287,7 @@ static PyMethodDef SwigMethods[] = {
 		"registerItem(std::string const & item_key, IFactory< std::string,GISASSimulation >::CreateItemCallback CreateFn, std::string const & itemDescription) -> bool\n"
 		"SimulationFactory_registerItem(SimulationFactory self, std::string const & item_key, IFactory< std::string,GISASSimulation >::CreateItemCallback CreateFn) -> bool\n"
 		"\n"
-		"bool IFactory< Key, AbstractProduct >::registerItem(const Key &item_key, CreateItemCallback CreateFn, const std::string &itemDescription)\n"
+		"bool IFactory< Key, AbstractProduct >::registerItem(const Key &item_key, CreateItemCallback CreateFn, const std::string &itemDescription=\"\")\n"
 		"\n"
 		"Registers object's creation function and store object description. \n"
 		"\n"
diff --git a/auto/Wrap/libBornAgainFit.py b/auto/Wrap/libBornAgainFit.py
index 6f82c5b6865..d1b81e586be 100644
--- a/auto/Wrap/libBornAgainFit.py
+++ b/auto/Wrap/libBornAgainFit.py
@@ -1778,7 +1778,7 @@ class Configurable(_object):
     """
 
 
-    The  Configurable class is a base for storing (int,double,string) options.
+    A base class for storing (int,double,string) options.
 
     C++ includes: Configurable.h
 
@@ -1837,7 +1837,7 @@ class IMinimizer(Configurable):
     """
 
 
-    Common interface for all kind minimizer's.
+    Common interface for all kind minimizers.
 
     C++ includes: IMinimizer.h
 
@@ -1861,7 +1861,7 @@ class IMinimizer(Configurable):
         """
         minimize(IMinimizer self)
 
-        void IMinimizer::minimize()
+        virtual void IMinimizer::minimize()=0
 
         run minimization 
 
@@ -1873,9 +1873,11 @@ class IMinimizer(Configurable):
         """
         setParameters(IMinimizer self, FitSuiteParameters parameters)
 
-        void IMinimizer::setParameters(const FitSuiteParameters &parameters)
+        virtual void IMinimizer::setParameters(const FitSuiteParameters &parameters)=0
 
-        Sets internal minimizer parameters using external parameter list. 
+        Sets internal minimizer parameter.
+
+        Sets internal minimizer parameters using external parameter list 
 
         """
         return _libBornAgainFit.IMinimizer_setParameters(self, parameters)
@@ -1885,7 +1887,7 @@ class IMinimizer(Configurable):
         """
         setChiSquaredFunction(IMinimizer self, IMinimizer::function_chi2_t fun_chi2, size_t nparameters)
 
-        void IMinimizer::setChiSquaredFunction(function_chi2_t fun_chi2, size_t nparameters)
+        virtual void IMinimizer::setChiSquaredFunction(function_chi2_t fun_chi2, size_t nparameters)=0
 
         Sets chi squared function to minimize. 
 
@@ -1897,7 +1899,7 @@ class IMinimizer(Configurable):
         """
         setGradientFunction(IMinimizer self, IMinimizer::function_gradient_t fun_gradient, size_t nparameters, size_t ndatasize)
 
-        void IMinimizer::setGradientFunction(function_gradient_t fun_gradient, size_t nparameters, size_t ndatasize)
+        virtual void IMinimizer::setGradientFunction(function_gradient_t fun_gradient, size_t nparameters, size_t ndatasize)=0
 
         Sets gradient function to minimize. 
 
@@ -1909,7 +1911,7 @@ class IMinimizer(Configurable):
         """
         getNumberOfVariables(IMinimizer self) -> size_t
 
-        size_t IMinimizer::getNumberOfVariables() const
+        virtual size_t IMinimizer::getNumberOfVariables() const =0
 
         Returns number of variables to fit. 
 
@@ -1921,9 +1923,11 @@ class IMinimizer(Configurable):
         """
         getValueOfVariablesAtMinimum(IMinimizer self) -> vdouble1d_t
 
-        std::vector< double > IMinimizer::getValueOfVariablesAtMinimum() const
+        virtual std::vector<double> IMinimizer::getValueOfVariablesAtMinimum() const =0
+
+        Returns minimum function value.
 
-        Returns values of parameters at the minimum. 
+        Returns values of parameters at the minimum 
 
         """
         return _libBornAgainFit.IMinimizer_getValueOfVariablesAtMinimum(self)
@@ -1933,7 +1937,7 @@ class IMinimizer(Configurable):
         """
         getErrorOfVariables(IMinimizer self) -> vdouble1d_t
 
-        std::vector< double > IMinimizer::getErrorOfVariables() const
+        virtual std::vector<double> IMinimizer::getErrorOfVariables() const =0
 
         Returns errors of variables at minimum. 
 
@@ -1945,9 +1949,11 @@ class IMinimizer(Configurable):
         """
         printResults(IMinimizer self)
 
-        void IMinimizer::printResults() const
+        virtual void IMinimizer::printResults() const =0
 
-        Prints fit results. 
+        clear resources (parameters) for consecutives minimizations
+
+        Prints fit results 
 
         """
         return _libBornAgainFit.IMinimizer_printResults(self)
@@ -1957,7 +1963,7 @@ class IMinimizer(Configurable):
         """
         getNCalls(IMinimizer self) -> size_t
 
-        size_t IMinimizer::getNCalls() const
+        virtual size_t IMinimizer::getNCalls() const
 
         Returns number of calls of minimized function. 
 
@@ -1970,7 +1976,7 @@ class IMinimizer(Configurable):
         getOptions(IMinimizer self) -> MinimizerOptions
         getOptions(IMinimizer self) -> MinimizerOptions
 
-        const MinimizerOptions * IMinimizer::getOptions() const 
+        virtual const MinimizerOptions* IMinimizer::getOptions() const 
 
         """
         return _libBornAgainFit.IMinimizer_getOptions(self, *args)
@@ -1980,7 +1986,7 @@ class IMinimizer(Configurable):
         """
         setOptions(IMinimizer self, MinimizerOptions arg2)
 
-        void IMinimizer::setOptions(const MinimizerOptions &options)
+        virtual void IMinimizer::setOptions(const MinimizerOptions &)
 
         set minimizer options 
 
@@ -1992,7 +1998,7 @@ class IMinimizer(Configurable):
         """
         setOptionString(IMinimizer self, std::string const & arg2)
 
-        void IMinimizer::setOptionString(const std::string &options)
+        virtual void IMinimizer::setOptionString(const std::string &)
 
         set minimizer option string 
 
@@ -2004,7 +2010,7 @@ class IMinimizer(Configurable):
         """
         isGradientBasedAgorithm(IMinimizer self) -> bool
 
-        bool IMinimizer::isGradientBasedAgorithm()
+        virtual bool IMinimizer::isGradientBasedAgorithm()
 
         Returns true if type of algorithm is Levenberg-Marquardt or similar. 
 
@@ -2016,7 +2022,7 @@ class IMinimizer(Configurable):
         """
         getMinimizerName(IMinimizer self) -> std::string
 
-        std::string IMinimizer::getMinimizerName() const
+        virtual std::string IMinimizer::getMinimizerName() const =0
 
         return name of the minimizer 
 
@@ -2028,7 +2034,7 @@ class IMinimizer(Configurable):
         """
         getAlgorithmName(IMinimizer self) -> std::string
 
-        std::string IMinimizer::getAlgorithmName() const
+        virtual std::string IMinimizer::getAlgorithmName() const =0
 
         return name of the minimization algorithm 
 
@@ -2153,7 +2159,7 @@ class FitSuiteParameters(_object):
     """
 
 
-    Holds vector of parameters for FitSuite.
+    Vector of parameters, for FitSuite
 
     C++ includes: FitSuiteParameters.h
 
@@ -2192,12 +2198,26 @@ class FitSuiteParameters(_object):
 
 
     def addFitParameter(self, par):
-        """addFitParameter(FitSuiteParameters self, FitParameter par)"""
+        """
+        addFitParameter(FitSuiteParameters self, FitParameter par)
+
+        void FitSuiteParameters::addFitParameter(FitParameter *par)
+
+        Adds fit parameter. 
+
+        """
         return _libBornAgainFit.FitSuiteParameters_addFitParameter(self, par)
 
 
     def getFitParameters(self):
-        """getFitParameters(FitSuiteParameters self) -> std::vector< FitParameter *,std::allocator< FitParameter * > > &"""
+        """
+        getFitParameters(FitSuiteParameters self) -> std::vector< FitParameter *,std::allocator< FitParameter * > > &
+
+        std::vector<FitParameter*>& FitSuiteParameters::getFitParameters()
+
+        Returns all parameters. 
+
+        """
         return _libBornAgainFit.FitSuiteParameters_getFitParameters(self)
 
 
@@ -2276,7 +2296,7 @@ class FitSuiteParameters(_object):
         begin(FitSuiteParameters self) -> std::vector< FitParameter *,std::allocator< FitParameter * > >::iterator
         begin(FitSuiteParameters self) -> std::vector< FitParameter *,std::allocator< FitParameter * > >::const_iterator
 
-        const_iterator FitSuiteParameters::begin() const 
+        std::vector<FitParameter*>::const_iterator FitSuiteParameters::begin() const 
 
         """
         return _libBornAgainFit.FitSuiteParameters_begin(self, *args)
@@ -2287,14 +2307,21 @@ class FitSuiteParameters(_object):
         end(FitSuiteParameters self) -> std::vector< FitParameter *,std::allocator< FitParameter * > >::iterator
         end(FitSuiteParameters self) -> std::vector< FitParameter *,std::allocator< FitParameter * > >::const_iterator
 
-        const_iterator FitSuiteParameters::end() const 
+        std::vector<FitParameter*>::const_iterator FitSuiteParameters::end() const 
 
         """
         return _libBornAgainFit.FitSuiteParameters_end(self, *args)
 
 
     def numberOfFreeFitParameters(self):
-        """numberOfFreeFitParameters(FitSuiteParameters self) -> size_t"""
+        """
+        numberOfFreeFitParameters(FitSuiteParameters self) -> size_t
+
+        size_t FitSuiteParameters::numberOfFreeFitParameters() const
+
+        Returns number of free parameters. 
+
+        """
         return _libBornAgainFit.FitSuiteParameters_numberOfFreeFitParameters(self)
 
 
@@ -2312,7 +2339,14 @@ class FitSuiteParameters(_object):
 
 
     def printFitParameters(self):
-        """printFitParameters(FitSuiteParameters self)"""
+        """
+        printFitParameters(FitSuiteParameters self)
+
+        void FitSuiteParameters::printFitParameters() const
+
+        Print defined parameters. 
+
+        """
         return _libBornAgainFit.FitSuiteParameters_printFitParameters(self)
 
 
@@ -2341,7 +2375,14 @@ class FitSuiteParameters(_object):
 
 
     def setFixed(self, pars, is_fixed):
-        """setFixed(FitSuiteParameters self, vector_string_t pars, bool is_fixed)"""
+        """
+        setFixed(FitSuiteParameters self, vector_string_t pars, bool is_fixed)
+
+        void FitSuiteParameters::setFixed(const std::vector< std::string > &pars, bool is_fixed)
+
+        Set fixed flag for parameters from the list. 
+
+        """
         return _libBornAgainFit.FitSuiteParameters_setFixed(self, pars, is_fixed)
 
 
diff --git a/auto/Wrap/libBornAgainFit_wrap.cpp b/auto/Wrap/libBornAgainFit_wrap.cpp
index ee49a38ea43..121755f3c07 100644
--- a/auto/Wrap/libBornAgainFit_wrap.cpp
+++ b/auto/Wrap/libBornAgainFit_wrap.cpp
@@ -23624,7 +23624,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IMinimizer_minimize", _wrap_IMinimizer_minimize, METH_VARARGS, (char *)"\n"
 		"IMinimizer_minimize(IMinimizer self)\n"
 		"\n"
-		"void IMinimizer::minimize()\n"
+		"virtual void IMinimizer::minimize()=0\n"
 		"\n"
 		"run minimization \n"
 		"\n"
@@ -23632,15 +23632,17 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IMinimizer_setParameters", _wrap_IMinimizer_setParameters, METH_VARARGS, (char *)"\n"
 		"IMinimizer_setParameters(IMinimizer self, FitSuiteParameters parameters)\n"
 		"\n"
-		"void IMinimizer::setParameters(const FitSuiteParameters &parameters)\n"
+		"virtual void IMinimizer::setParameters(const FitSuiteParameters &parameters)=0\n"
 		"\n"
-		"Sets internal minimizer parameters using external parameter list. \n"
+		"Sets internal minimizer parameter.\n"
+		"\n"
+		"Sets internal minimizer parameters using external parameter list \n"
 		"\n"
 		""},
 	 { (char *)"IMinimizer_setChiSquaredFunction", _wrap_IMinimizer_setChiSquaredFunction, METH_VARARGS, (char *)"\n"
 		"IMinimizer_setChiSquaredFunction(IMinimizer self, IMinimizer::function_chi2_t fun_chi2, size_t nparameters)\n"
 		"\n"
-		"void IMinimizer::setChiSquaredFunction(function_chi2_t fun_chi2, size_t nparameters)\n"
+		"virtual void IMinimizer::setChiSquaredFunction(function_chi2_t fun_chi2, size_t nparameters)=0\n"
 		"\n"
 		"Sets chi squared function to minimize. \n"
 		"\n"
@@ -23648,7 +23650,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IMinimizer_setGradientFunction", _wrap_IMinimizer_setGradientFunction, METH_VARARGS, (char *)"\n"
 		"IMinimizer_setGradientFunction(IMinimizer self, IMinimizer::function_gradient_t fun_gradient, size_t nparameters, size_t ndatasize)\n"
 		"\n"
-		"void IMinimizer::setGradientFunction(function_gradient_t fun_gradient, size_t nparameters, size_t ndatasize)\n"
+		"virtual void IMinimizer::setGradientFunction(function_gradient_t fun_gradient, size_t nparameters, size_t ndatasize)=0\n"
 		"\n"
 		"Sets gradient function to minimize. \n"
 		"\n"
@@ -23656,7 +23658,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IMinimizer_getNumberOfVariables", _wrap_IMinimizer_getNumberOfVariables, METH_VARARGS, (char *)"\n"
 		"IMinimizer_getNumberOfVariables(IMinimizer self) -> size_t\n"
 		"\n"
-		"size_t IMinimizer::getNumberOfVariables() const\n"
+		"virtual size_t IMinimizer::getNumberOfVariables() const =0\n"
 		"\n"
 		"Returns number of variables to fit. \n"
 		"\n"
@@ -23664,15 +23666,17 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IMinimizer_getValueOfVariablesAtMinimum", _wrap_IMinimizer_getValueOfVariablesAtMinimum, METH_VARARGS, (char *)"\n"
 		"IMinimizer_getValueOfVariablesAtMinimum(IMinimizer self) -> vdouble1d_t\n"
 		"\n"
-		"std::vector< double > IMinimizer::getValueOfVariablesAtMinimum() const\n"
+		"virtual std::vector<double> IMinimizer::getValueOfVariablesAtMinimum() const =0\n"
+		"\n"
+		"Returns minimum function value.\n"
 		"\n"
-		"Returns values of parameters at the minimum. \n"
+		"Returns values of parameters at the minimum \n"
 		"\n"
 		""},
 	 { (char *)"IMinimizer_getErrorOfVariables", _wrap_IMinimizer_getErrorOfVariables, METH_VARARGS, (char *)"\n"
 		"IMinimizer_getErrorOfVariables(IMinimizer self) -> vdouble1d_t\n"
 		"\n"
-		"std::vector< double > IMinimizer::getErrorOfVariables() const\n"
+		"virtual std::vector<double> IMinimizer::getErrorOfVariables() const =0\n"
 		"\n"
 		"Returns errors of variables at minimum. \n"
 		"\n"
@@ -23680,15 +23684,17 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IMinimizer_printResults", _wrap_IMinimizer_printResults, METH_VARARGS, (char *)"\n"
 		"IMinimizer_printResults(IMinimizer self)\n"
 		"\n"
-		"void IMinimizer::printResults() const\n"
+		"virtual void IMinimizer::printResults() const =0\n"
+		"\n"
+		"clear resources (parameters) for consecutives minimizations\n"
 		"\n"
-		"Prints fit results. \n"
+		"Prints fit results \n"
 		"\n"
 		""},
 	 { (char *)"IMinimizer_getNCalls", _wrap_IMinimizer_getNCalls, METH_VARARGS, (char *)"\n"
 		"IMinimizer_getNCalls(IMinimizer self) -> size_t\n"
 		"\n"
-		"size_t IMinimizer::getNCalls() const\n"
+		"virtual size_t IMinimizer::getNCalls() const\n"
 		"\n"
 		"Returns number of calls of minimized function. \n"
 		"\n"
@@ -23697,13 +23703,13 @@ static PyMethodDef SwigMethods[] = {
 		"getOptions() -> MinimizerOptions\n"
 		"IMinimizer_getOptions(IMinimizer self) -> MinimizerOptions\n"
 		"\n"
-		"const MinimizerOptions * IMinimizer::getOptions() const \n"
+		"virtual const MinimizerOptions* IMinimizer::getOptions() const \n"
 		"\n"
 		""},
 	 { (char *)"IMinimizer_setOptions", _wrap_IMinimizer_setOptions, METH_VARARGS, (char *)"\n"
 		"IMinimizer_setOptions(IMinimizer self, MinimizerOptions arg3)\n"
 		"\n"
-		"void IMinimizer::setOptions(const MinimizerOptions &options)\n"
+		"virtual void IMinimizer::setOptions(const MinimizerOptions &)\n"
 		"\n"
 		"set minimizer options \n"
 		"\n"
@@ -23711,7 +23717,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IMinimizer_setOptionString", _wrap_IMinimizer_setOptionString, METH_VARARGS, (char *)"\n"
 		"IMinimizer_setOptionString(IMinimizer self, std::string const & arg3)\n"
 		"\n"
-		"void IMinimizer::setOptionString(const std::string &options)\n"
+		"virtual void IMinimizer::setOptionString(const std::string &)\n"
 		"\n"
 		"set minimizer option string \n"
 		"\n"
@@ -23719,7 +23725,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IMinimizer_isGradientBasedAgorithm", _wrap_IMinimizer_isGradientBasedAgorithm, METH_VARARGS, (char *)"\n"
 		"IMinimizer_isGradientBasedAgorithm(IMinimizer self) -> bool\n"
 		"\n"
-		"bool IMinimizer::isGradientBasedAgorithm()\n"
+		"virtual bool IMinimizer::isGradientBasedAgorithm()\n"
 		"\n"
 		"Returns true if type of algorithm is Levenberg-Marquardt or similar. \n"
 		"\n"
@@ -23727,7 +23733,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IMinimizer_getMinimizerName", _wrap_IMinimizer_getMinimizerName, METH_VARARGS, (char *)"\n"
 		"IMinimizer_getMinimizerName(IMinimizer self) -> std::string\n"
 		"\n"
-		"std::string IMinimizer::getMinimizerName() const\n"
+		"virtual std::string IMinimizer::getMinimizerName() const =0\n"
 		"\n"
 		"return name of the minimizer \n"
 		"\n"
@@ -23735,7 +23741,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IMinimizer_getAlgorithmName", _wrap_IMinimizer_getAlgorithmName, METH_VARARGS, (char *)"\n"
 		"IMinimizer_getAlgorithmName(IMinimizer self) -> std::string\n"
 		"\n"
-		"std::string IMinimizer::getAlgorithmName() const\n"
+		"virtual std::string IMinimizer::getAlgorithmName() const =0\n"
 		"\n"
 		"return name of the minimization algorithm \n"
 		"\n"
@@ -23821,8 +23827,22 @@ static PyMethodDef SwigMethods[] = {
 		"Clears all defined parameters. \n"
 		"\n"
 		""},
-	 { (char *)"FitSuiteParameters_addFitParameter", _wrap_FitSuiteParameters_addFitParameter, METH_VARARGS, (char *)"FitSuiteParameters_addFitParameter(FitSuiteParameters self, FitParameter par)"},
-	 { (char *)"FitSuiteParameters_getFitParameters", _wrap_FitSuiteParameters_getFitParameters, METH_VARARGS, (char *)"FitSuiteParameters_getFitParameters(FitSuiteParameters self) -> std::vector< FitParameter *,std::allocator< FitParameter * > > &"},
+	 { (char *)"FitSuiteParameters_addFitParameter", _wrap_FitSuiteParameters_addFitParameter, METH_VARARGS, (char *)"\n"
+		"FitSuiteParameters_addFitParameter(FitSuiteParameters self, FitParameter par)\n"
+		"\n"
+		"void FitSuiteParameters::addFitParameter(FitParameter *par)\n"
+		"\n"
+		"Adds fit parameter. \n"
+		"\n"
+		""},
+	 { (char *)"FitSuiteParameters_getFitParameters", _wrap_FitSuiteParameters_getFitParameters, METH_VARARGS, (char *)"\n"
+		"FitSuiteParameters_getFitParameters(FitSuiteParameters self) -> std::vector< FitParameter *,std::allocator< FitParameter * > > &\n"
+		"\n"
+		"std::vector<FitParameter*>& FitSuiteParameters::getFitParameters()\n"
+		"\n"
+		"Returns all parameters. \n"
+		"\n"
+		""},
 	 { (char *)"FitSuiteParameters_getFitParameter", _wrap_FitSuiteParameters_getFitParameter, METH_VARARGS, (char *)"\n"
 		"getFitParameter(std::string const & name) -> FitParameter\n"
 		"FitSuiteParameters_getFitParameter(FitSuiteParameters self, std::string const & name) -> FitParameter\n"
@@ -23873,17 +23893,24 @@ static PyMethodDef SwigMethods[] = {
 		"begin() -> std::vector< FitParameter *,std::allocator< FitParameter * > >::iterator\n"
 		"FitSuiteParameters_begin(FitSuiteParameters self) -> std::vector< FitParameter *,std::allocator< FitParameter * > >::const_iterator\n"
 		"\n"
-		"const_iterator FitSuiteParameters::begin() const \n"
+		"std::vector<FitParameter*>::const_iterator FitSuiteParameters::begin() const \n"
 		"\n"
 		""},
 	 { (char *)"FitSuiteParameters_end", _wrap_FitSuiteParameters_end, METH_VARARGS, (char *)"\n"
 		"end() -> std::vector< FitParameter *,std::allocator< FitParameter * > >::iterator\n"
 		"FitSuiteParameters_end(FitSuiteParameters self) -> std::vector< FitParameter *,std::allocator< FitParameter * > >::const_iterator\n"
 		"\n"
-		"const_iterator FitSuiteParameters::end() const \n"
+		"std::vector<FitParameter*>::const_iterator FitSuiteParameters::end() const \n"
+		"\n"
+		""},
+	 { (char *)"FitSuiteParameters_numberOfFreeFitParameters", _wrap_FitSuiteParameters_numberOfFreeFitParameters, METH_VARARGS, (char *)"\n"
+		"FitSuiteParameters_numberOfFreeFitParameters(FitSuiteParameters self) -> size_t\n"
+		"\n"
+		"size_t FitSuiteParameters::numberOfFreeFitParameters() const\n"
+		"\n"
+		"Returns number of free parameters. \n"
 		"\n"
 		""},
-	 { (char *)"FitSuiteParameters_numberOfFreeFitParameters", _wrap_FitSuiteParameters_numberOfFreeFitParameters, METH_VARARGS, (char *)"FitSuiteParameters_numberOfFreeFitParameters(FitSuiteParameters self) -> size_t"},
 	 { (char *)"FitSuiteParameters_valuesAreDifferent", _wrap_FitSuiteParameters_valuesAreDifferent, METH_VARARGS, (char *)"\n"
 		"valuesAreDifferent(double const * pars_valuers, double tolerance_factor=1.0) -> bool\n"
 		"FitSuiteParameters_valuesAreDifferent(FitSuiteParameters self, double const * pars_valuers) -> bool\n"
@@ -23893,7 +23920,14 @@ static PyMethodDef SwigMethods[] = {
 		"Returns true if parameters already have the given values. \n"
 		"\n"
 		""},
-	 { (char *)"FitSuiteParameters_printFitParameters", _wrap_FitSuiteParameters_printFitParameters, METH_VARARGS, (char *)"FitSuiteParameters_printFitParameters(FitSuiteParameters self)"},
+	 { (char *)"FitSuiteParameters_printFitParameters", _wrap_FitSuiteParameters_printFitParameters, METH_VARARGS, (char *)"\n"
+		"FitSuiteParameters_printFitParameters(FitSuiteParameters self)\n"
+		"\n"
+		"void FitSuiteParameters::printFitParameters() const\n"
+		"\n"
+		"Print defined parameters. \n"
+		"\n"
+		""},
 	 { (char *)"FitSuiteParameters_fixAll", _wrap_FitSuiteParameters_fixAll, METH_VARARGS, (char *)"\n"
 		"FitSuiteParameters_fixAll(FitSuiteParameters self)\n"
 		"\n"
@@ -23910,7 +23944,14 @@ static PyMethodDef SwigMethods[] = {
 		"Release all parameters. \n"
 		"\n"
 		""},
-	 { (char *)"FitSuiteParameters_setFixed", _wrap_FitSuiteParameters_setFixed, METH_VARARGS, (char *)"FitSuiteParameters_setFixed(FitSuiteParameters self, vector_string_t pars, bool is_fixed)"},
+	 { (char *)"FitSuiteParameters_setFixed", _wrap_FitSuiteParameters_setFixed, METH_VARARGS, (char *)"\n"
+		"FitSuiteParameters_setFixed(FitSuiteParameters self, vector_string_t pars, bool is_fixed)\n"
+		"\n"
+		"void FitSuiteParameters::setFixed(const std::vector< std::string > &pars, bool is_fixed)\n"
+		"\n"
+		"Set fixed flag for parameters from the list. \n"
+		"\n"
+		""},
 	 { (char *)"FitSuiteParameters___getitem__", _wrap_FitSuiteParameters___getitem__, METH_VARARGS, (char *)"\n"
 		"__getitem__(std::string name) -> FitParameter\n"
 		"FitSuiteParameters___getitem__(FitSuiteParameters self, size_t index) -> FitParameter\n"
-- 
GitLab