diff --git a/Base/Axis/Frame.cpp b/Base/Axis/Frame.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d3e64115c0ce2e288921fadac1b7239ca3c0ba0d
--- /dev/null
+++ b/Base/Axis/Frame.cpp
@@ -0,0 +1,129 @@
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Base/Axis/Frame.cpp
+//! @brief     Implements class Frame.
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2018
+//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
+//
+//  ************************************************************************************************
+
+#include "Base/Axis/Frame.h"
+#include "Base/Axis/IAxis.h"
+#include "Base/Axis/Bin.h"
+#include "Base/Util/Assert.h"
+
+Frame::Frame(const std::vector<IAxis*>& axes)
+    : m_axes(axes)
+{
+}
+
+const IAxis& Frame::axis(size_t serial_number) const
+{
+    return *m_axes[serial_number];
+}
+
+double Frame::getAxisValue(size_t global_index, size_t i_selected_axis) const
+{
+    auto axis_index = getAxisBinIndex(global_index, i_selected_axis);
+    return (*m_axes[i_selected_axis])[axis_index];
+}
+
+double Frame::getAxisValue(size_t global_index, const std::string& axis_name) const
+{
+    return getAxisValue(global_index, getAxisIndex(axis_name));
+}
+
+std::vector<double> Frame::getAxesValues(size_t global_index) const
+{
+    std::vector<int> indices = getAxesBinIndices(global_index);
+    std::vector<double> result;
+    for (size_t i_axis = 0; i_axis < indices.size(); ++i_axis)
+        result.push_back((*m_axes[i_axis])[indices[i_axis]]);
+    return result;
+}
+
+Bin1D Frame::getAxisBin(size_t global_index, size_t i_selected_axis) const
+{
+    auto axis_index = getAxisBinIndex(global_index, i_selected_axis);
+    return m_axes[i_selected_axis]->bin(axis_index);
+}
+
+Bin1D Frame::getAxisBin(size_t global_index, const std::string& axis_name) const
+{
+    return getAxisBin(global_index, getAxisIndex(axis_name));
+}
+
+size_t Frame::getAxisIndex(const std::string& axis_name) const
+{
+    for (size_t i = 0; i < m_axes.size(); ++i)
+        if (m_axes[i]->axisName() == axis_name)
+            return i;
+    ASSERT(0);
+}
+
+size_t Frame::getAxisBinIndex(size_t global_index, const std::string& axis_name) const
+{
+    return getAxisBinIndex(global_index, getAxisIndex(axis_name));
+}
+
+std::vector<int> Frame::getAxesBinIndices(size_t global_index) const
+{
+    size_t remainder = global_index;
+    std::vector<int> result;
+    result.resize(rank());
+    for (size_t i = 0; i < rank(); ++i) {
+        result[rank() - 1 - i] = (int)(remainder % m_axes[rank() - 1 - i]->size());
+        remainder /= m_axes[rank() - 1 - i]->size();
+    }
+    return result;
+}
+
+size_t Frame::getAxisBinIndex(size_t global_index, size_t i_selected_axis) const
+{
+    size_t remainder(global_index);
+    for (size_t i = 0; i < rank(); ++i) {
+        size_t i_axis = rank() - 1 - i;
+        size_t result = remainder % m_axes[i_axis]->size();
+        if (i_selected_axis == i_axis)
+            return result;
+        remainder /= m_axes[i_axis]->size();
+    }
+    ASSERT(0);
+}
+
+size_t Frame::toGlobalIndex(const std::vector<unsigned>& axes_indices) const
+{
+    ASSERT(axes_indices.size() == rank());
+    size_t result = 0;
+    size_t step_size = 1;
+    for (size_t i = rank(); i > 0; --i) {
+        ASSERT(axes_indices[i - 1] < m_axes[i - 1]->size());
+        result += axes_indices[i - 1] * step_size;
+        step_size *= m_axes[i - 1]->size();
+    }
+    return result;
+}
+
+size_t Frame::findGlobalIndex(const std::vector<double>& coordinates) const
+{
+    ASSERT(coordinates.size() == rank());
+    std::vector<unsigned> axes_indexes;
+    axes_indexes.resize(rank());
+    for (size_t i = 0; i < rank(); ++i)
+        axes_indexes[i] = static_cast<unsigned>(m_axes[i]->findClosestIndex(coordinates[i]));
+    return toGlobalIndex(axes_indexes);
+}
+
+
+bool Frame::axisNameExists(const std::string& axis_name) const
+{
+    for (size_t i = 0; i < m_axes.size(); ++i)
+        if (m_axes[i]->axisName() == axis_name)
+            return true;
+    return false;
+}
diff --git a/Base/Axis/Frame.h b/Base/Axis/Frame.h
new file mode 100644
index 0000000000000000000000000000000000000000..de6075fcece1fd000a6ee2c83117c0b73571ef3e
--- /dev/null
+++ b/Base/Axis/Frame.h
@@ -0,0 +1,108 @@
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Base/Axis/Frame.h
+//! @brief     Defines and implements templated class Frame.
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2018
+//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
+//
+//  ************************************************************************************************
+
+#ifndef BORNAGAIN_BASE_AXIS_FRAME_H
+#define BORNAGAIN_BASE_AXIS_FRAME_H
+
+#include "Base/Types/OwningVector.h"
+#include <sstream>
+
+using std::size_t;
+
+class IAxis;
+class Bin1D;
+
+//! Holds one or two axes.
+
+class Frame {
+public:
+    Frame() = default;
+    Frame(const std::vector<IAxis*>& axes);
+    virtual ~Frame() {}
+
+    //! Returns number of dimensions.
+    size_t rank() const { return m_axes.size(); }
+
+    //! Returns axis with given serial number
+    const IAxis& axis(size_t serial_number) const;
+
+    //! Returns the value of selected axis for given global_index.
+    //! @param global_index The global index of this data structure.
+    //! @param i_selected_axis Serial number of selected axis.
+    //! @return corresponding bin center of selected axis
+    double getAxisValue(size_t global_index, size_t i_selected_axis) const;
+
+    //! Returns the value of selected axis for given global_index.
+    //! @param global_index The global index of this data structure.
+    //! @param axis_name The name of selected axis.
+    //! @return corresponding bin center of selected axis
+    double getAxisValue(size_t global_index, const std::string& axis_name) const;
+
+    //! Returns values on all defined axes for given globalbin number
+    //! @param global_index The global index of this data structure.
+    //! @return Vector of corresponding bin centers
+    std::vector<double> getAxesValues(size_t global_index) const;
+
+    //! Returns bin of selected axis for given global_index.
+    //! @param global_index The global index of this data structure.
+    //! @param i_selected_axis Serial number of selected axis.
+    //! @return Corresponding Bin1D object
+    Bin1D getAxisBin(size_t global_index, size_t i_selected_axis) const;
+
+    //! Returns bin of selected axis for given global_index.
+    //! @param global_index The global index of this data structure.
+    //! @param axis_name The name of selected axis.
+    //! @return Corresponding Bin1D object
+    Bin1D getAxisBin(size_t global_index, const std::string& axis_name) const;
+
+    //! Returns axis bin index for given global index
+    //! @param global_index The global index of this data structure.
+    //! @param axis_name The name of selected axis.
+    //! @return Corresponding bin index for selected axis
+    size_t getAxisBinIndex(size_t global_index, const std::string& axis_name) const;
+
+    //! Returns vector of axes indices for given global index
+    //! @param global_index The global index of this data structure.
+    //! @return Vector of bin indices for all axes defined
+    std::vector<int> getAxesBinIndices(size_t global_index) const;
+
+    //! Returns axis bin index for given global index
+    //! @param global_index The global index of this data structure.
+    //! @param i_selected_axis Serial number of selected axis.
+    //! @return Corresponding bin index for selected axis
+    size_t getAxisBinIndex(size_t global_index, size_t i_selected_axis) const;
+
+
+    //! Returns global index for specified indices of axes
+    //! @param axes_indices Vector of axes indices for all specified axes in this dataset
+    //! @return Corresponding global index
+    size_t toGlobalIndex(const std::vector<unsigned>& axes_indices) const;
+
+    //! Returns global index for specified axes values
+    //! @param coordinates Vector of axes coordinates for all specified axes in this dataset
+    //! @return Closest global index
+    size_t findGlobalIndex(const std::vector<double>& coordinates) const;
+
+
+protected:
+    //! Returns serial number of axis with given name
+    size_t getAxisIndex(const std::string& axis_name) const;
+
+    //! Checks if given axis name exists
+    bool axisNameExists(const std::string& axis_name) const;
+
+    OwningVector<IAxis> m_axes;
+};
+
+#endif // BORNAGAIN_BASE_AXIS_FRAME_H
diff --git a/Device/Data/DataUtils.cpp b/Device/Data/DataUtils.cpp
index 6b9ca950ef4cff37212547ecaa2cca826f8b4013..ecc4878c9aed3b52198b4dcabf48454cb9b08a36 100644
--- a/Device/Data/DataUtils.cpp
+++ b/Device/Data/DataUtils.cpp
@@ -13,6 +13,7 @@
 //  ************************************************************************************************
 
 #include "Device/Data/DataUtils.h"
+#include "Base/Axis/Bin.h"
 #include "Base/Math/FourierTransform.h"
 #include "Base/Math/Numeric.h"
 #include "Device/Data/ArrayUtils.h"
diff --git a/Device/Data/Powerfield.cpp b/Device/Data/Powerfield.cpp
index 136aab39b4ffce9a6b14535e3452945471683c62..d7310fc4775925556d029cde9482c0b033d75433 100644
--- a/Device/Data/Powerfield.cpp
+++ b/Device/Data/Powerfield.cpp
@@ -19,118 +19,6 @@
 
 #include "Base/Py/PyCore.h"
 
-Frame::Frame(const std::vector<IAxis*>& axes)
-    : m_axes(axes)
-{
-}
-
-const IAxis& Frame::axis(size_t serial_number) const
-{
-    return *m_axes[serial_number];
-}
-
-double Frame::getAxisValue(size_t global_index, size_t i_selected_axis) const
-{
-    auto axis_index = getAxisBinIndex(global_index, i_selected_axis);
-    return (*m_axes[i_selected_axis])[axis_index];
-}
-
-double Frame::getAxisValue(size_t global_index, const std::string& axis_name) const
-{
-    return getAxisValue(global_index, getAxisIndex(axis_name));
-}
-
-std::vector<double> Frame::getAxesValues(size_t global_index) const
-{
-    std::vector<int> indices = getAxesBinIndices(global_index);
-    std::vector<double> result;
-    for (size_t i_axis = 0; i_axis < indices.size(); ++i_axis)
-        result.push_back((*m_axes[i_axis])[indices[i_axis]]);
-    return result;
-}
-
-Bin1D Frame::getAxisBin(size_t global_index, size_t i_selected_axis) const
-{
-    auto axis_index = getAxisBinIndex(global_index, i_selected_axis);
-    return m_axes[i_selected_axis]->bin(axis_index);
-}
-
-Bin1D Frame::getAxisBin(size_t global_index, const std::string& axis_name) const
-{
-    return getAxisBin(global_index, getAxisIndex(axis_name));
-}
-
-size_t Frame::getAxisIndex(const std::string& axis_name) const
-{
-    for (size_t i = 0; i < m_axes.size(); ++i)
-        if (m_axes[i]->axisName() == axis_name)
-            return i;
-    ASSERT(0);
-}
-
-size_t Frame::getAxisBinIndex(size_t global_index, const std::string& axis_name) const
-{
-    return getAxisBinIndex(global_index, getAxisIndex(axis_name));
-}
-
-std::vector<int> Frame::getAxesBinIndices(size_t global_index) const
-{
-    size_t remainder = global_index;
-    std::vector<int> result;
-    result.resize(rank());
-    for (size_t i = 0; i < rank(); ++i) {
-        result[rank() - 1 - i] = (int)(remainder % m_axes[rank() - 1 - i]->size());
-        remainder /= m_axes[rank() - 1 - i]->size();
-    }
-    return result;
-}
-
-size_t Frame::getAxisBinIndex(size_t global_index, size_t i_selected_axis) const
-{
-    size_t remainder(global_index);
-    for (size_t i = 0; i < rank(); ++i) {
-        size_t i_axis = rank() - 1 - i;
-        size_t result = remainder % m_axes[i_axis]->size();
-        if (i_selected_axis == i_axis)
-            return result;
-        remainder /= m_axes[i_axis]->size();
-    }
-    ASSERT(0);
-}
-
-size_t Frame::toGlobalIndex(const std::vector<unsigned>& axes_indices) const
-{
-    ASSERT(axes_indices.size() == rank());
-    size_t result = 0;
-    size_t step_size = 1;
-    for (size_t i = rank(); i > 0; --i) {
-        ASSERT(axes_indices[i - 1] < m_axes[i - 1]->size());
-        result += axes_indices[i - 1] * step_size;
-        step_size *= m_axes[i - 1]->size();
-    }
-    return result;
-}
-
-size_t Frame::findGlobalIndex(const std::vector<double>& coordinates) const
-{
-    ASSERT(coordinates.size() == rank());
-    std::vector<unsigned> axes_indexes;
-    axes_indexes.resize(rank());
-    for (size_t i = 0; i < rank(); ++i)
-        axes_indexes[i] = static_cast<unsigned>(m_axes[i]->findClosestIndex(coordinates[i]));
-    return toGlobalIndex(axes_indexes);
-}
-
-
-bool Frame::axisNameExists(const std::string& axis_name) const
-{
-    for (size_t i = 0; i < m_axes.size(); ++i)
-        if (m_axes[i]->axisName() == axis_name)
-            return true;
-    return false;
-}
-
-
 template <>
 PyObject* Powerfield<double>::getArray() const
 {
diff --git a/Device/Data/Powerfield.h b/Device/Data/Powerfield.h
index f5369ad9c263fbc80477fef1732ce0568c505cd1..210a1277c899448f43dbe162c528f9ecbd0365a1 100644
--- a/Device/Data/Powerfield.h
+++ b/Device/Data/Powerfield.h
@@ -15,7 +15,7 @@
 #ifndef BORNAGAIN_DEVICE_DATA_POWERFIELD_H
 #define BORNAGAIN_DEVICE_DATA_POWERFIELD_H
 
-#include "Base/Axis/Bin.h"
+#include "Base/Axis/Frame.h"
 #include "Base/Axis/FixedBinAxis.h"
 #include "Base/Py/PyObject.h"
 #include "Base/Types/OwningVector.h"
@@ -27,88 +27,6 @@
 
 using std::size_t;
 
-//! Holds one or two axes.
-
-class Frame {
-public:
-    Frame() = default;
-    Frame(const std::vector<IAxis*>& axes);
-    virtual ~Frame() {}
-
-    //! Returns number of dimensions.
-    size_t rank() const { return m_axes.size(); }
-
-    //! Returns axis with given serial number
-    const IAxis& axis(size_t serial_number) const;
-
-    //! Returns the value of selected axis for given global_index.
-    //! @param global_index The global index of this data structure.
-    //! @param i_selected_axis Serial number of selected axis.
-    //! @return corresponding bin center of selected axis
-    double getAxisValue(size_t global_index, size_t i_selected_axis) const;
-
-    //! Returns the value of selected axis for given global_index.
-    //! @param global_index The global index of this data structure.
-    //! @param axis_name The name of selected axis.
-    //! @return corresponding bin center of selected axis
-    double getAxisValue(size_t global_index, const std::string& axis_name) const;
-
-    //! Returns values on all defined axes for given globalbin number
-    //! @param global_index The global index of this data structure.
-    //! @return Vector of corresponding bin centers
-    std::vector<double> getAxesValues(size_t global_index) const;
-
-    //! Returns bin of selected axis for given global_index.
-    //! @param global_index The global index of this data structure.
-    //! @param i_selected_axis Serial number of selected axis.
-    //! @return Corresponding Bin1D object
-    Bin1D getAxisBin(size_t global_index, size_t i_selected_axis) const;
-
-    //! Returns bin of selected axis for given global_index.
-    //! @param global_index The global index of this data structure.
-    //! @param axis_name The name of selected axis.
-    //! @return Corresponding Bin1D object
-    Bin1D getAxisBin(size_t global_index, const std::string& axis_name) const;
-
-    //! Returns axis bin index for given global index
-    //! @param global_index The global index of this data structure.
-    //! @param axis_name The name of selected axis.
-    //! @return Corresponding bin index for selected axis
-    size_t getAxisBinIndex(size_t global_index, const std::string& axis_name) const;
-
-    //! Returns vector of axes indices for given global index
-    //! @param global_index The global index of this data structure.
-    //! @return Vector of bin indices for all axes defined
-    std::vector<int> getAxesBinIndices(size_t global_index) const;
-
-    //! Returns axis bin index for given global index
-    //! @param global_index The global index of this data structure.
-    //! @param i_selected_axis Serial number of selected axis.
-    //! @return Corresponding bin index for selected axis
-    size_t getAxisBinIndex(size_t global_index, size_t i_selected_axis) const;
-
-
-    //! Returns global index for specified indices of axes
-    //! @param axes_indices Vector of axes indices for all specified axes in this dataset
-    //! @return Corresponding global index
-    size_t toGlobalIndex(const std::vector<unsigned>& axes_indices) const;
-
-    //! Returns global index for specified axes values
-    //! @param coordinates Vector of axes coordinates for all specified axes in this dataset
-    //! @return Closest global index
-    size_t findGlobalIndex(const std::vector<double>& coordinates) const;
-
-
-protected:
-    //! Returns serial number of axis with given name
-    size_t getAxisIndex(const std::string& axis_name) const;
-
-    //! Checks if given axis name exists
-    bool axisNameExists(const std::string& axis_name) const;
-
-    OwningVector<IAxis> m_axes;
-};
-
 //! Templated class to store data in multi-dimensional space.
 //! Used with type T = double, CumulativeValue, bool
 //! @ingroup tools
diff --git a/Device/Detector/RectangularDetector.cpp b/Device/Detector/RectangularDetector.cpp
index 5f368b78ba7f935a47ffd4c435454ea937f54d4b..6d1734e5e1b51261e262b07bcc1ec14b31421974 100644
--- a/Device/Detector/RectangularDetector.cpp
+++ b/Device/Detector/RectangularDetector.cpp
@@ -13,6 +13,7 @@
 //  ************************************************************************************************
 
 #include "Device/Detector/RectangularDetector.h"
+#include "Base/Axis/Bin.h"
 #include "Base/Const/Units.h"
 #include "Base/Math/Constants.h"
 #include "Base/Pixel/RectangularPixel.h"
diff --git a/Device/Detector/SphericalDetector.cpp b/Device/Detector/SphericalDetector.cpp
index 3c0be59ae4816773e15a39a459d0c3d5d8551b03..ebeb1727067c03b9804f908bb74d2232966be1bd 100644
--- a/Device/Detector/SphericalDetector.cpp
+++ b/Device/Detector/SphericalDetector.cpp
@@ -13,6 +13,7 @@
 //  ************************************************************************************************
 
 #include "Device/Detector/SphericalDetector.h"
+#include "Base/Axis/Bin.h"
 #include "Base/Const/Units.h"
 #include "Base/Math/Constants.h"
 #include "Base/Pixel/SphericalPixel.h"
diff --git a/Device/Histo/HistoUtils.cpp b/Device/Histo/HistoUtils.cpp
index 3ba25e85de03a96fe2e52f8271dfa5b8e36d0d82..b65d91e07b087d38f3d83eed31aec7f87712e3d5 100644
--- a/Device/Histo/HistoUtils.cpp
+++ b/Device/Histo/HistoUtils.cpp
@@ -13,6 +13,7 @@
 //  ************************************************************************************************
 
 #include "Device/Histo/HistoUtils.h"
+#include "Base/Axis/Bin.h"
 #include "Base/Math/Numeric.h"
 #include "Device/Data/DataUtils.h"
 #include "Device/Histo/Histogram2D.h"
diff --git a/Device/InputOutput/ReadWriteINT.cpp b/Device/InputOutput/ReadWriteINT.cpp
index dee4d253c35d51c79db7e94699e6c125f0665ecf..0753fc6a22c8c9c76dee4047f204e32da814525e 100644
--- a/Device/InputOutput/ReadWriteINT.cpp
+++ b/Device/InputOutput/ReadWriteINT.cpp
@@ -13,6 +13,7 @@
 //  ************************************************************************************************
 
 #include "Device/InputOutput/ReadWriteINT.h"
+#include "Base/Axis/Bin.h"
 #include "Base/Util/StringUtils.h"
 #include "Device/Data/ArrayUtils.h"
 #include "Device/InputOutput/DataFormatUtils.h"
diff --git a/Device/InputOutput/ReadWriteNumpyTXT.cpp b/Device/InputOutput/ReadWriteNumpyTXT.cpp
index 016f6a2ed45783db76156328330988428e4ce13b..e27edd76a1baf47ffd44a292a261498017ec692d 100644
--- a/Device/InputOutput/ReadWriteNumpyTXT.cpp
+++ b/Device/InputOutput/ReadWriteNumpyTXT.cpp
@@ -13,6 +13,7 @@
 //  ************************************************************************************************
 
 #include "Device/InputOutput/ReadWriteNumpyTXT.h"
+#include "Base/Axis/Bin.h"
 #include "Base/Util/StringUtils.h"
 #include "Device/Data/ArrayUtils.h"
 #include "Device/InputOutput/DataFormatUtils.h"
diff --git a/Device/Mask/DetectorMask.cpp b/Device/Mask/DetectorMask.cpp
index 12cd1767ad33aee75dd210d82b3a2d259d204e01..bb7fc695613928982aaa6b57465a4e905212bbae 100644
--- a/Device/Mask/DetectorMask.cpp
+++ b/Device/Mask/DetectorMask.cpp
@@ -14,6 +14,7 @@
 
 #include "Device/Mask/DetectorMask.h"
 #include "Base/Axis/IAxis.h"
+#include "Base/Axis/Bin.h"
 #include "Device/Histo/Histogram2D.h"
 #include "Device/Mask/IShape2D.h"
 #include "Device/Data/Powerfield.h"
diff --git a/GUI/View/Common/CustomEventFilters.cpp b/GUI/View/Common/CustomEventFilters.cpp
index 1cc117b1e297c3f59ae99c403e93f7b1dc9f76be..e8f24d5e5c844ac1c75543cfeb9541366f473337 100644
--- a/GUI/View/Common/CustomEventFilters.cpp
+++ b/GUI/View/Common/CustomEventFilters.cpp
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      GUI/View/PropertyEditor/CustomEventFilters.cpp
+//! @file      GUI/View/Common/CustomEventFilters.cpp
 //! @brief     Defines classes releted to event filtering
 //!
 //! @homepage  http://www.bornagainproject.org
diff --git a/GUI/View/Common/CustomEventFilters.h b/GUI/View/Common/CustomEventFilters.h
index 281d338c4f9f3e6b7d0b1662aafb1544d9d108b4..ff94b323d6bf73cbc43fc3480361a1ae26a8bc18 100644
--- a/GUI/View/Common/CustomEventFilters.h
+++ b/GUI/View/Common/CustomEventFilters.h
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      GUI/View/PropertyEditor/CustomEventFilters.h
+//! @file      GUI/View/Common/CustomEventFilters.h
 //! @brief     Defines classes releted to event filtering
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -12,8 +12,8 @@
 //
 //  ************************************************************************************************
 
-#ifndef BORNAGAIN_GUI_VIEW_PROPERTYEDITOR_CUSTOMEVENTFILTERS_H
-#define BORNAGAIN_GUI_VIEW_PROPERTYEDITOR_CUSTOMEVENTFILTERS_H
+#ifndef BORNAGAIN_GUI_VIEW_COMMON_CUSTOMEVENTFILTERS_H
+#define BORNAGAIN_GUI_VIEW_COMMON_CUSTOMEVENTFILTERS_H
 
 #include <QObject>
 
@@ -108,4 +108,4 @@ protected:
     QWidget* m_parent;
 };
 
-#endif // BORNAGAIN_GUI_VIEW_PROPERTYEDITOR_CUSTOMEVENTFILTERS_H
+#endif // BORNAGAIN_GUI_VIEW_COMMON_CUSTOMEVENTFILTERS_H
diff --git a/GUI/View/Common/DoubleLineEdit.cpp b/GUI/View/Common/DoubleLineEdit.cpp
index 5cfa0c08772f64590995497dee16e9f541e268d7..82d5edec69fb7014af254781bab70626ce2e6185 100644
--- a/GUI/View/Common/DoubleLineEdit.cpp
+++ b/GUI/View/Common/DoubleLineEdit.cpp
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      GUI/View/Edit/DoubleLineEdit.cpp
+//! @file      GUI/View/Common/DoubleLineEdit.cpp
 //! @brief     Implements class DoubleLineEdit
 //!
 //! @homepage  http://www.bornagainproject.org
diff --git a/GUI/View/Common/DoubleLineEdit.h b/GUI/View/Common/DoubleLineEdit.h
index 52180830cd3c4d6d23faac75420eff3826e77bbb..f6c8b1129a48083a608c6871ba2dd1722e5bba36 100644
--- a/GUI/View/Common/DoubleLineEdit.h
+++ b/GUI/View/Common/DoubleLineEdit.h
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      GUI/View/Edit/DoubleLineEdit.h
+//! @file      GUI/View/Common/DoubleLineEdit.h
 //! @brief     Defines class DoubleLineEdit
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -12,8 +12,8 @@
 //
 //  ************************************************************************************************
 
-#ifndef BORNAGAIN_GUI_VIEW_EDIT_DOUBLELINEEDIT_H
-#define BORNAGAIN_GUI_VIEW_EDIT_DOUBLELINEEDIT_H
+#ifndef BORNAGAIN_GUI_VIEW_COMMON_DOUBLELINEEDIT_H
+#define BORNAGAIN_GUI_VIEW_COMMON_DOUBLELINEEDIT_H
 
 #include "GUI/Model/Descriptor/DoubleDescriptor.h"
 #include <QLineEdit>
@@ -51,4 +51,4 @@ private:
 };
 
 
-#endif // BORNAGAIN_GUI_VIEW_EDIT_DOUBLELINEEDIT_H
+#endif // BORNAGAIN_GUI_VIEW_COMMON_DOUBLELINEEDIT_H
diff --git a/GUI/View/Common/DoubleSpinBox.cpp b/GUI/View/Common/DoubleSpinBox.cpp
index 48366a3db7ef96e5dbc1cdabbaa6224f53303275..559879f6ff19eb9a93cb7868888d4d2bb56d0d20 100644
--- a/GUI/View/Common/DoubleSpinBox.cpp
+++ b/GUI/View/Common/DoubleSpinBox.cpp
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      GUI/View/Edit/DoubleSpinBox.cpp
+//! @file      GUI/View/Common/DoubleSpinBox.cpp
 //! @brief     Implements class DoubleSpinBox
 //!
 //! @homepage  http://www.bornagainproject.org
diff --git a/GUI/View/Common/DoubleSpinBox.h b/GUI/View/Common/DoubleSpinBox.h
index 6ad1ab759369dcaa9759d2d45751236d03913637..23465e943b519c14b3b978e5684ebcb18cacc7c4 100644
--- a/GUI/View/Common/DoubleSpinBox.h
+++ b/GUI/View/Common/DoubleSpinBox.h
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      GUI/View/Edit/DoubleSpinBox.h
+//! @file      GUI/View/Common/DoubleSpinBox.h
 //! @brief     Defines class DoubleSpinBox
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -12,8 +12,8 @@
 //
 //  ************************************************************************************************
 
-#ifndef BORNAGAIN_GUI_VIEW_EDIT_DOUBLESPINBOX_H
-#define BORNAGAIN_GUI_VIEW_EDIT_DOUBLESPINBOX_H
+#ifndef BORNAGAIN_GUI_VIEW_COMMON_DOUBLESPINBOX_H
+#define BORNAGAIN_GUI_VIEW_COMMON_DOUBLESPINBOX_H
 
 #include "GUI/Model/Descriptor/DoubleDescriptor.h"
 #include <QDoubleSpinBox>
@@ -84,4 +84,4 @@ private:
 };
 
 
-#endif // BORNAGAIN_GUI_VIEW_EDIT_DOUBLESPINBOX_H
+#endif // BORNAGAIN_GUI_VIEW_COMMON_DOUBLESPINBOX_H
diff --git a/GUI/View/Common/ScientificSpinBox.cpp b/GUI/View/Common/ScientificSpinBox.cpp
index df0780c8fce194998f3f6868da29a86068146d5e..7bca5ec45686fb9626eac1f246f963473a44701f 100644
--- a/GUI/View/Common/ScientificSpinBox.cpp
+++ b/GUI/View/Common/ScientificSpinBox.cpp
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      GUI/View/PropertyEditor/ScientificSpinBox.cpp
+//! @file      GUI/View/Common/ScientificSpinBox.cpp
 //! @brief     Implements class ScientificSpinBox
 //!
 //! @homepage  http://www.bornagainproject.org
diff --git a/GUI/View/Common/ScientificSpinBox.h b/GUI/View/Common/ScientificSpinBox.h
index 73415196b26da10d8f38f91786845892d7813fc1..bd15b6b7ae25cddb7ee1c6f75ffcfcbed46dbcca 100644
--- a/GUI/View/Common/ScientificSpinBox.h
+++ b/GUI/View/Common/ScientificSpinBox.h
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      GUI/View/PropertyEditor/ScientificSpinBox.h
+//! @file      GUI/View/Common/ScientificSpinBox.h
 //! @brief     Defines class ScientificSpinBox
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -12,8 +12,8 @@
 //
 //  ************************************************************************************************
 
-#ifndef BORNAGAIN_GUI_VIEW_PROPERTYEDITOR_SCIENTIFICSPINBOX_H
-#define BORNAGAIN_GUI_VIEW_PROPERTYEDITOR_SCIENTIFICSPINBOX_H
+#ifndef BORNAGAIN_GUI_VIEW_COMMON_SCIENTIFICSPINBOX_H
+#define BORNAGAIN_GUI_VIEW_COMMON_SCIENTIFICSPINBOX_H
 
 #include <QDoubleSpinBox>
 
@@ -68,4 +68,4 @@ private:
     QDoubleValidator m_validator;
 };
 
-#endif // BORNAGAIN_GUI_VIEW_PROPERTYEDITOR_SCIENTIFICSPINBOX_H
+#endif // BORNAGAIN_GUI_VIEW_COMMON_SCIENTIFICSPINBOX_H
diff --git a/Sim/Simulation/DepthProbeSimulation.cpp b/Sim/Simulation/DepthProbeSimulation.cpp
index dbc328d04b1e626380a329ba3931d7dc7c46fc91..ff2105b1baba8106925122299d3e2f1030f14384 100644
--- a/Sim/Simulation/DepthProbeSimulation.cpp
+++ b/Sim/Simulation/DepthProbeSimulation.cpp
@@ -13,6 +13,7 @@
 //  ************************************************************************************************
 
 #include "Sim/Simulation/DepthProbeSimulation.h"
+#include "Base/Axis/Bin.h"
 #include "Device/Beam/Beam.h"
 #include "Device/Beam/IFootprintFactor.h"
 #include "Device/Coord/CoordSystem2D.h"
diff --git a/Sim/Simulation/OffSpecularSimulation.cpp b/Sim/Simulation/OffSpecularSimulation.cpp
index 3017368053cead5fdf7cf5ef4962d7b6eac32a10..65e2242204edb05f5bef921c3d0a5c44cceff9f3 100644
--- a/Sim/Simulation/OffSpecularSimulation.cpp
+++ b/Sim/Simulation/OffSpecularSimulation.cpp
@@ -13,6 +13,7 @@
 //  ************************************************************************************************
 
 #include "Sim/Simulation/OffSpecularSimulation.h"
+#include "Base/Axis/Bin.h"
 #include "Base/Pixel/RectangularPixel.h"
 #include "Base/Util/Assert.h"
 #include "Device/Beam/Beam.h"
diff --git a/Tests/Unit/Device/Histogram2DTest.cpp b/Tests/Unit/Device/Histogram2DTest.cpp
index 0b47580a099387aee75422c45308681fdbb85a98..2ddf0672ddaf0eb28bee442613ba41476b6e2662 100644
--- a/Tests/Unit/Device/Histogram2DTest.cpp
+++ b/Tests/Unit/Device/Histogram2DTest.cpp
@@ -1,5 +1,6 @@
 #include "Device/Histo/Histogram2D.h"
 #include "Device/Histo/Histogram1D.h"
+#include "Base/Axis/Bin.h"
 #include "Tests/GTestWrapper/google_test.h"
 #include <memory>
 
diff --git a/Tests/Unit/Device/PowerfieldTest.cpp b/Tests/Unit/Device/PowerfieldTest.cpp
index c1a4031eb74f17f003666934e21f9c14a5ebc0a4..e34862734f7abefc239e4ed46ce743bfc8a02a35 100644
--- a/Tests/Unit/Device/PowerfieldTest.cpp
+++ b/Tests/Unit/Device/PowerfieldTest.cpp
@@ -1,4 +1,5 @@
 #include "Base/Axis/VariableBinAxis.h"
+#include "Base/Axis/Bin.h"
 #include "Device/Data/DataUtils.h"
 #include "Tests/GTestWrapper/google_test.h"
 #include <algorithm>
diff --git a/Wrap/Swig/fromBase.i b/Wrap/Swig/fromBase.i
index 5447570b4c7822f5f14800a3c4100c29b4a15fca..a450260953605862da830f5cc656458a779b0673 100644
--- a/Wrap/Swig/fromBase.i
+++ b/Wrap/Swig/fromBase.i
@@ -3,6 +3,7 @@
 %import(module="libBornAgainBase") "Base/Types/ICloneable.h"
 %import(module="libBornAgainBase") "Base/Vector/RotMatrix.h"
 %import(module="libBornAgainBase") "Base/Axis/IAxis.h"
+%import(module="libBornAgainBase") "Base/Axis/Frame.h"
 
 %template(R3) Vec3<double>;
 %template(C3) Vec3<std::complex<double>>;
diff --git a/Wrap/Swig/libBornAgainBase.i b/Wrap/Swig/libBornAgainBase.i
index b0d5ffa47435d9a19c31cf72e170c2b9d63b55e0..dc3e4318846085f9a91eb5a5ac149c666b43571c 100644
--- a/Wrap/Swig/libBornAgainBase.i
+++ b/Wrap/Swig/libBornAgainBase.i
@@ -31,6 +31,7 @@
 #include "Base/Axis/CustomBinAxis.h"
 #include "Base/Axis/FixedBinAxis.h"
 #include "Base/Axis/PointwiseAxis.h"
+#include "Base/Axis/Frame.h"
 #include "Base/Vector/RotMatrix.h"
 %}
 
@@ -52,6 +53,7 @@
 %include "Base/Axis/CustomBinAxis.h"
 %include "Base/Axis/FixedBinAxis.h"
 %include "Base/Axis/PointwiseAxis.h"
+%include "Base/Axis/Frame.h"
 
 %template(R3) Vec3<double>;
 %template(C3) Vec3<std::complex<double>>;
diff --git a/auto/Wrap/doxygenBase.i b/auto/Wrap/doxygenBase.i
index 2cbc6532cfc0b66f1229045eff79b40d8da95fa3..17317fdd421e984d881a989de2840321de08e765 100644
--- a/auto/Wrap/doxygenBase.i
+++ b/auto/Wrap/doxygenBase.i
@@ -338,6 +338,182 @@ prepare arrays for 2D Fourier Transformation (FT) of the given vector
 ";
 
 
+// File: classFrame.xml
+%feature("docstring") Frame "
+
+Holds one or two axes.
+
+C++ includes: Frame.h
+";
+
+%feature("docstring")  Frame::Frame "Frame::Frame()=default
+";
+
+%feature("docstring")  Frame::Frame "Frame::Frame(const std::vector< IAxis * > &axes)
+";
+
+%feature("docstring")  Frame::~Frame "virtual Frame::~Frame()
+";
+
+%feature("docstring")  Frame::rank "size_t Frame::rank() const
+
+Returns number of dimensions. 
+";
+
+%feature("docstring")  Frame::axis "const IAxis & Frame::axis(size_t serial_number) const
+
+Returns axis with given serial number. 
+";
+
+%feature("docstring")  Frame::getAxisValue "double Frame::getAxisValue(size_t global_index, size_t i_selected_axis) const
+
+Returns the value of selected axis for given global_index.
+
+Parameters:
+-----------
+
+global_index: 
+The global index of this data structure.
+
+i_selected_axis: 
+Serial number of selected axis.
+
+corresponding bin center of selected axis 
+";
+
+%feature("docstring")  Frame::getAxisValue "double Frame::getAxisValue(size_t global_index, const std::string &axis_name) const
+
+Returns the value of selected axis for given global_index.
+
+Parameters:
+-----------
+
+global_index: 
+The global index of this data structure.
+
+axis_name: 
+The name of selected axis.
+
+corresponding bin center of selected axis 
+";
+
+%feature("docstring")  Frame::getAxesValues "std::vector< double > Frame::getAxesValues(size_t global_index) const
+
+Returns values on all defined axes for given globalbin number
+
+Parameters:
+-----------
+
+global_index: 
+The global index of this data structure.
+
+Vector of corresponding bin centers 
+";
+
+%feature("docstring")  Frame::getAxisBin "Bin1D Frame::getAxisBin(size_t global_index, size_t i_selected_axis) const
+
+Returns bin of selected axis for given global_index.
+
+Parameters:
+-----------
+
+global_index: 
+The global index of this data structure.
+
+i_selected_axis: 
+Serial number of selected axis.
+
+Corresponding  Bin1D object 
+";
+
+%feature("docstring")  Frame::getAxisBin "Bin1D Frame::getAxisBin(size_t global_index, const std::string &axis_name) const
+
+Returns bin of selected axis for given global_index.
+
+Parameters:
+-----------
+
+global_index: 
+The global index of this data structure.
+
+axis_name: 
+The name of selected axis.
+
+Corresponding  Bin1D object 
+";
+
+%feature("docstring")  Frame::getAxisBinIndex "size_t Frame::getAxisBinIndex(size_t global_index, const std::string &axis_name) const
+
+Returns axis bin index for given global index
+
+Parameters:
+-----------
+
+global_index: 
+The global index of this data structure.
+
+axis_name: 
+The name of selected axis.
+
+Corresponding bin index for selected axis 
+";
+
+%feature("docstring")  Frame::getAxesBinIndices "std::vector< int > Frame::getAxesBinIndices(size_t global_index) const
+
+Returns vector of axes indices for given global index
+
+Parameters:
+-----------
+
+global_index: 
+The global index of this data structure.
+
+Vector of bin indices for all axes defined 
+";
+
+%feature("docstring")  Frame::getAxisBinIndex "size_t Frame::getAxisBinIndex(size_t global_index, size_t i_selected_axis) const
+
+Returns axis bin index for given global index
+
+Parameters:
+-----------
+
+global_index: 
+The global index of this data structure.
+
+i_selected_axis: 
+Serial number of selected axis.
+
+Corresponding bin index for selected axis 
+";
+
+%feature("docstring")  Frame::toGlobalIndex "size_t Frame::toGlobalIndex(const std::vector< unsigned > &axes_indices) const
+
+Returns global index for specified indices of axes
+
+Parameters:
+-----------
+
+axes_indices: 
+Vector of axes indices for all specified axes in this dataset
+
+Corresponding global index 
+";
+
+%feature("docstring")  Frame::findGlobalIndex "size_t Frame::findGlobalIndex(const std::vector< double > &coordinates) const
+
+Returns global index for specified axes values
+
+Parameters:
+-----------
+
+coordinates: 
+Vector of axes coordinates for all specified axes in this dataset
+
+Closest global index 
+";
+
+
 // File: classIAxis.xml
 %feature("docstring") IAxis "
 
@@ -1052,7 +1228,7 @@ C++ includes: WavevectorInfo.h
 // File: classFourierTransform_1_1Workspace.xml
 
 
-// File: namespace_0d20.xml
+// File: namespace_0d22.xml
 
 
 // File: namespaceBaseUtils.xml
@@ -1466,6 +1642,12 @@ Returns a string of blanks with given width. By default the width equals standar
 // File: FixedBinAxis_8h.xml
 
 
+// File: Frame_8cpp.xml
+
+
+// File: Frame_8h.xml
+
+
 // File: IAxis_8cpp.xml
 
 
diff --git a/auto/Wrap/doxygenDevice.i b/auto/Wrap/doxygenDevice.i
index 00c724c1ee02a7a961043ffee56f37902e4c3a0a..fb48fc8531fa0c5063eec7a87826c0d54c8f478d 100644
--- a/auto/Wrap/doxygenDevice.i
+++ b/auto/Wrap/doxygenDevice.i
@@ -572,182 +572,6 @@ Calculate footprint correction coefficient from the beam incident angle  alpha.
 ";
 
 
-// File: classFrame.xml
-%feature("docstring") Frame "
-
-Holds one or two axes. Base class for  Powerfield.
-
-C++ includes: Powerfield.h
-";
-
-%feature("docstring")  Frame::Frame "Frame::Frame()=default
-";
-
-%feature("docstring")  Frame::Frame "Frame::Frame(const std::vector< IAxis * > &axes)
-";
-
-%feature("docstring")  Frame::~Frame "virtual Frame::~Frame()
-";
-
-%feature("docstring")  Frame::rank "size_t Frame::rank() const
-
-Returns number of dimensions. 
-";
-
-%feature("docstring")  Frame::axis "const IAxis & Frame::axis(size_t serial_number) const
-
-Returns axis with given serial number. 
-";
-
-%feature("docstring")  Frame::getAxisValue "double Frame::getAxisValue(size_t global_index, size_t i_selected_axis) const
-
-Returns the value of selected axis for given global_index.
-
-Parameters:
------------
-
-global_index: 
-The global index of this data structure.
-
-i_selected_axis: 
-Serial number of selected axis.
-
-corresponding bin center of selected axis 
-";
-
-%feature("docstring")  Frame::getAxisValue "double Frame::getAxisValue(size_t global_index, const std::string &axis_name) const
-
-Returns the value of selected axis for given global_index.
-
-Parameters:
------------
-
-global_index: 
-The global index of this data structure.
-
-axis_name: 
-The name of selected axis.
-
-corresponding bin center of selected axis 
-";
-
-%feature("docstring")  Frame::getAxesValues "std::vector< double > Frame::getAxesValues(size_t global_index) const
-
-Returns values on all defined axes for given globalbin number
-
-Parameters:
------------
-
-global_index: 
-The global index of this data structure.
-
-Vector of corresponding bin centers 
-";
-
-%feature("docstring")  Frame::getAxisBin "Bin1D Frame::getAxisBin(size_t global_index, size_t i_selected_axis) const
-
-Returns bin of selected axis for given global_index.
-
-Parameters:
------------
-
-global_index: 
-The global index of this data structure.
-
-i_selected_axis: 
-Serial number of selected axis.
-
-Corresponding Bin1D object 
-";
-
-%feature("docstring")  Frame::getAxisBin "Bin1D Frame::getAxisBin(size_t global_index, const std::string &axis_name) const
-
-Returns bin of selected axis for given global_index.
-
-Parameters:
------------
-
-global_index: 
-The global index of this data structure.
-
-axis_name: 
-The name of selected axis.
-
-Corresponding Bin1D object 
-";
-
-%feature("docstring")  Frame::getAxisBinIndex "size_t Frame::getAxisBinIndex(size_t global_index, const std::string &axis_name) const
-
-Returns axis bin index for given global index
-
-Parameters:
------------
-
-global_index: 
-The global index of this data structure.
-
-axis_name: 
-The name of selected axis.
-
-Corresponding bin index for selected axis 
-";
-
-%feature("docstring")  Frame::getAxesBinIndices "std::vector< int > Frame::getAxesBinIndices(size_t global_index) const
-
-Returns vector of axes indices for given global index
-
-Parameters:
------------
-
-global_index: 
-The global index of this data structure.
-
-Vector of bin indices for all axes defined 
-";
-
-%feature("docstring")  Frame::getAxisBinIndex "size_t Frame::getAxisBinIndex(size_t global_index, size_t i_selected_axis) const
-
-Returns axis bin index for given global index
-
-Parameters:
------------
-
-global_index: 
-The global index of this data structure.
-
-i_selected_axis: 
-Serial number of selected axis.
-
-Corresponding bin index for selected axis 
-";
-
-%feature("docstring")  Frame::toGlobalIndex "size_t Frame::toGlobalIndex(const std::vector< unsigned > &axes_indices) const
-
-Returns global index for specified indices of axes
-
-Parameters:
------------
-
-axes_indices: 
-Vector of axes indices for all specified axes in this dataset
-
-Corresponding global index 
-";
-
-%feature("docstring")  Frame::findGlobalIndex "size_t Frame::findGlobalIndex(const std::vector< double > &coordinates) const
-
-Returns global index for specified axes values
-
-Parameters:
------------
-
-coordinates: 
-Vector of axes coordinates for all specified axes in this dataset
-
-Closest global index 
-";
-
-
 // File: classHistogram1D.xml
 %feature("docstring") Histogram1D "
 
diff --git a/auto/Wrap/libBornAgainBase.py b/auto/Wrap/libBornAgainBase.py
index ecf86449068167921cefa6c2e43331b59720420f..e084d18e6500747921b728cff5e3acb4529c23f8 100644
--- a/auto/Wrap/libBornAgainBase.py
+++ b/auto/Wrap/libBornAgainBase.py
@@ -2802,6 +2802,190 @@ class PointwiseAxis(IAxis):
 # Register PointwiseAxis in _libBornAgainBase:
 _libBornAgainBase.PointwiseAxis_swigregister(PointwiseAxis)
 
+class Frame(object):
+    r"""
+
+
+    Holds one or two axes.
+
+    C++ includes: Frame.h
+
+    """
+
+    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
+    __repr__ = _swig_repr
+
+    def __init__(self, *args):
+        r"""
+        __init__(Frame self) -> Frame
+        __init__(Frame self, std::vector< IAxis *,std::allocator< IAxis * > > const & axes) -> Frame
+        Frame::Frame(const std::vector< IAxis * > &axes)
+
+        """
+        _libBornAgainBase.Frame_swiginit(self, _libBornAgainBase.new_Frame(*args))
+    __swig_destroy__ = _libBornAgainBase.delete_Frame
+
+    def rank(self):
+        r"""
+        rank(Frame self) -> size_t
+        size_t Frame::rank() const
+
+        Returns number of dimensions. 
+
+        """
+        return _libBornAgainBase.Frame_rank(self)
+
+    def axis(self, serial_number):
+        r"""
+        axis(Frame self, size_t serial_number) -> IAxis
+        const IAxis & Frame::axis(size_t serial_number) const
+
+        Returns axis with given serial number. 
+
+        """
+        return _libBornAgainBase.Frame_axis(self, serial_number)
+
+    def getAxisValue(self, *args):
+        r"""
+        getAxisValue(Frame self, size_t global_index, size_t i_selected_axis) -> double
+        getAxisValue(Frame self, size_t global_index, std::string const & axis_name) -> double
+        double Frame::getAxisValue(size_t global_index, const std::string &axis_name) const
+
+        Returns the value of selected axis for given global_index.
+
+        Parameters:
+        -----------
+
+        global_index: 
+        The global index of this data structure.
+
+        axis_name: 
+        The name of selected axis.
+
+        corresponding bin center of selected axis 
+
+        """
+        return _libBornAgainBase.Frame_getAxisValue(self, *args)
+
+    def getAxesValues(self, global_index):
+        r"""
+        getAxesValues(Frame self, size_t global_index) -> vdouble1d_t
+        std::vector< double > Frame::getAxesValues(size_t global_index) const
+
+        Returns values on all defined axes for given globalbin number
+
+        Parameters:
+        -----------
+
+        global_index: 
+        The global index of this data structure.
+
+        Vector of corresponding bin centers 
+
+        """
+        return _libBornAgainBase.Frame_getAxesValues(self, global_index)
+
+    def getAxisBin(self, *args):
+        r"""
+        getAxisBin(Frame self, size_t global_index, size_t i_selected_axis) -> Bin1D
+        getAxisBin(Frame self, size_t global_index, std::string const & axis_name) -> Bin1D
+        Bin1D Frame::getAxisBin(size_t global_index, const std::string &axis_name) const
+
+        Returns bin of selected axis for given global_index.
+
+        Parameters:
+        -----------
+
+        global_index: 
+        The global index of this data structure.
+
+        axis_name: 
+        The name of selected axis.
+
+        Corresponding  Bin1D object 
+
+        """
+        return _libBornAgainBase.Frame_getAxisBin(self, *args)
+
+    def getAxesBinIndices(self, global_index):
+        r"""
+        getAxesBinIndices(Frame self, size_t global_index) -> vector_integer_t
+        std::vector< int > Frame::getAxesBinIndices(size_t global_index) const
+
+        Returns vector of axes indices for given global index
+
+        Parameters:
+        -----------
+
+        global_index: 
+        The global index of this data structure.
+
+        Vector of bin indices for all axes defined 
+
+        """
+        return _libBornAgainBase.Frame_getAxesBinIndices(self, global_index)
+
+    def getAxisBinIndex(self, *args):
+        r"""
+        getAxisBinIndex(Frame self, size_t global_index, std::string const & axis_name) -> size_t
+        getAxisBinIndex(Frame self, size_t global_index, size_t i_selected_axis) -> size_t
+        size_t Frame::getAxisBinIndex(size_t global_index, size_t i_selected_axis) const
+
+        Returns axis bin index for given global index
+
+        Parameters:
+        -----------
+
+        global_index: 
+        The global index of this data structure.
+
+        i_selected_axis: 
+        Serial number of selected axis.
+
+        Corresponding bin index for selected axis 
+
+        """
+        return _libBornAgainBase.Frame_getAxisBinIndex(self, *args)
+
+    def toGlobalIndex(self, axes_indices):
+        r"""
+        toGlobalIndex(Frame self, std::vector< unsigned int,std::allocator< unsigned int > > const & axes_indices) -> size_t
+        size_t Frame::toGlobalIndex(const std::vector< unsigned > &axes_indices) const
+
+        Returns global index for specified indices of axes
+
+        Parameters:
+        -----------
+
+        axes_indices: 
+        Vector of axes indices for all specified axes in this dataset
+
+        Corresponding global index 
+
+        """
+        return _libBornAgainBase.Frame_toGlobalIndex(self, axes_indices)
+
+    def findGlobalIndex(self, coordinates):
+        r"""
+        findGlobalIndex(Frame self, vdouble1d_t coordinates) -> size_t
+        size_t Frame::findGlobalIndex(const std::vector< double > &coordinates) const
+
+        Returns global index for specified axes values
+
+        Parameters:
+        -----------
+
+        coordinates: 
+        Vector of axes coordinates for all specified axes in this dataset
+
+        Closest global index 
+
+        """
+        return _libBornAgainBase.Frame_findGlobalIndex(self, coordinates)
+
+# Register Frame in _libBornAgainBase:
+_libBornAgainBase.Frame_swigregister(Frame)
+
 class R3(object):
     r"""Proxy of C++ Vec3< double > class."""
 
diff --git a/auto/Wrap/libBornAgainBase_wrap.cpp b/auto/Wrap/libBornAgainBase_wrap.cpp
index 0a19122abb28df1dfe071c3fb6c7a680514ab8ab..87cf86ea3ed20d46a4b5c2a91f18361af84c18dd 100644
--- a/auto/Wrap/libBornAgainBase_wrap.cpp
+++ b/auto/Wrap/libBornAgainBase_wrap.cpp
@@ -3102,59 +3102,62 @@ namespace Swig {
 #define SWIGTYPE_p_CustomBinAxis swig_types[2]
 #define SWIGTYPE_p_Direction swig_types[3]
 #define SWIGTYPE_p_FixedBinAxis swig_types[4]
-#define SWIGTYPE_p_IAxis swig_types[5]
-#define SWIGTYPE_p_ICloneable swig_types[6]
-#define SWIGTYPE_p_PointwiseAxis swig_types[7]
-#define SWIGTYPE_p_RotMatrix swig_types[8]
-#define SWIGTYPE_p_ThreadInfo swig_types[9]
-#define SWIGTYPE_p_VariableBinAxis swig_types[10]
-#define SWIGTYPE_p_Vec3T_double_t swig_types[11]
-#define SWIGTYPE_p_Vec3T_int_t swig_types[12]
-#define SWIGTYPE_p_Vec3T_std__complexT_double_t_t swig_types[13]
-#define SWIGTYPE_p_allocator_type swig_types[14]
-#define SWIGTYPE_p_char swig_types[15]
-#define SWIGTYPE_p_difference_type swig_types[16]
-#define SWIGTYPE_p_double swig_types[17]
-#define SWIGTYPE_p_first_type swig_types[18]
-#define SWIGTYPE_p_int swig_types[19]
-#define SWIGTYPE_p_key_type swig_types[20]
-#define SWIGTYPE_p_long_long swig_types[21]
-#define SWIGTYPE_p_mapped_type swig_types[22]
-#define SWIGTYPE_p_p_PyObject swig_types[23]
-#define SWIGTYPE_p_second_type swig_types[24]
-#define SWIGTYPE_p_short swig_types[25]
-#define SWIGTYPE_p_signed_char swig_types[26]
-#define SWIGTYPE_p_size_type swig_types[27]
-#define SWIGTYPE_p_std__allocatorT_double_t swig_types[28]
-#define SWIGTYPE_p_std__allocatorT_int_t swig_types[29]
-#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[30]
-#define SWIGTYPE_p_std__allocatorT_std__pairT_double_double_t_t swig_types[31]
-#define SWIGTYPE_p_std__allocatorT_std__pairT_std__string_const_double_t_t swig_types[32]
-#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[33]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[34]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t swig_types[35]
-#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[36]
-#define SWIGTYPE_p_std__complexT_double_t swig_types[37]
-#define SWIGTYPE_p_std__invalid_argument swig_types[38]
-#define SWIGTYPE_p_std__lessT_std__string_t swig_types[39]
-#define SWIGTYPE_p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t swig_types[40]
-#define SWIGTYPE_p_std__pairT_double_double_t swig_types[41]
-#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[42]
-#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[43]
-#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[44]
-#define SWIGTYPE_p_std__vectorT_std__pairT_double_double_t_std__allocatorT_std__pairT_double_double_t_t_t swig_types[45]
-#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[46]
-#define SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t swig_types[47]
-#define SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t swig_types[48]
-#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[49]
-#define SWIGTYPE_p_swig__SwigPyIterator swig_types[50]
-#define SWIGTYPE_p_unsigned_char swig_types[51]
-#define SWIGTYPE_p_unsigned_int swig_types[52]
-#define SWIGTYPE_p_unsigned_long_long swig_types[53]
-#define SWIGTYPE_p_unsigned_short swig_types[54]
-#define SWIGTYPE_p_value_type swig_types[55]
-static swig_type_info *swig_types[57];
-static swig_module_info swig_module = {swig_types, 56, 0, 0, 0, 0};
+#define SWIGTYPE_p_Frame swig_types[5]
+#define SWIGTYPE_p_IAxis swig_types[6]
+#define SWIGTYPE_p_ICloneable swig_types[7]
+#define SWIGTYPE_p_PointwiseAxis swig_types[8]
+#define SWIGTYPE_p_RotMatrix swig_types[9]
+#define SWIGTYPE_p_ThreadInfo swig_types[10]
+#define SWIGTYPE_p_VariableBinAxis swig_types[11]
+#define SWIGTYPE_p_Vec3T_double_t swig_types[12]
+#define SWIGTYPE_p_Vec3T_int_t swig_types[13]
+#define SWIGTYPE_p_Vec3T_std__complexT_double_t_t swig_types[14]
+#define SWIGTYPE_p_allocator_type swig_types[15]
+#define SWIGTYPE_p_char swig_types[16]
+#define SWIGTYPE_p_difference_type swig_types[17]
+#define SWIGTYPE_p_double swig_types[18]
+#define SWIGTYPE_p_first_type swig_types[19]
+#define SWIGTYPE_p_int swig_types[20]
+#define SWIGTYPE_p_key_type swig_types[21]
+#define SWIGTYPE_p_long_long swig_types[22]
+#define SWIGTYPE_p_mapped_type swig_types[23]
+#define SWIGTYPE_p_p_PyObject swig_types[24]
+#define SWIGTYPE_p_second_type swig_types[25]
+#define SWIGTYPE_p_short swig_types[26]
+#define SWIGTYPE_p_signed_char swig_types[27]
+#define SWIGTYPE_p_size_type swig_types[28]
+#define SWIGTYPE_p_std__allocatorT_double_t swig_types[29]
+#define SWIGTYPE_p_std__allocatorT_int_t swig_types[30]
+#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[31]
+#define SWIGTYPE_p_std__allocatorT_std__pairT_double_double_t_t swig_types[32]
+#define SWIGTYPE_p_std__allocatorT_std__pairT_std__string_const_double_t_t swig_types[33]
+#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[34]
+#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[35]
+#define SWIGTYPE_p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t swig_types[36]
+#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[37]
+#define SWIGTYPE_p_std__complexT_double_t swig_types[38]
+#define SWIGTYPE_p_std__invalid_argument swig_types[39]
+#define SWIGTYPE_p_std__lessT_std__string_t swig_types[40]
+#define SWIGTYPE_p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t swig_types[41]
+#define SWIGTYPE_p_std__pairT_double_double_t swig_types[42]
+#define SWIGTYPE_p_std__vectorT_IAxis_p_std__allocatorT_IAxis_p_t_t swig_types[43]
+#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[44]
+#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[45]
+#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[46]
+#define SWIGTYPE_p_std__vectorT_std__pairT_double_double_t_std__allocatorT_std__pairT_double_double_t_t_t swig_types[47]
+#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[48]
+#define SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t swig_types[49]
+#define SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t swig_types[50]
+#define SWIGTYPE_p_std__vectorT_unsigned_int_std__allocatorT_unsigned_int_t_t swig_types[51]
+#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[52]
+#define SWIGTYPE_p_swig__SwigPyIterator swig_types[53]
+#define SWIGTYPE_p_unsigned_char swig_types[54]
+#define SWIGTYPE_p_unsigned_int swig_types[55]
+#define SWIGTYPE_p_unsigned_long_long swig_types[56]
+#define SWIGTYPE_p_unsigned_short swig_types[57]
+#define SWIGTYPE_p_value_type swig_types[58]
+static swig_type_info *swig_types[60];
+static swig_module_info swig_module = {swig_types, 59, 0, 0, 0, 0};
 #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
 #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
 
@@ -6658,6 +6661,7 @@ SWIGINTERN void std_vector_Sl_std_pair_Sl_double_Sc_double_Sg__Sg__insert__SWIG_
 #include "Base/Axis/CustomBinAxis.h"
 #include "Base/Axis/FixedBinAxis.h"
 #include "Base/Axis/PointwiseAxis.h"
+#include "Base/Axis/Frame.h"
 #include "Base/Vector/RotMatrix.h"
 
 
@@ -27361,6 +27365,705 @@ SWIGINTERN PyObject *PointwiseAxis_swigregister(PyObject *SWIGUNUSEDPARM(self),
   return SWIG_Py_Void();
 }
 
+SWIGINTERN PyObject *_wrap_new_Frame__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **SWIGUNUSEDPARM(swig_obj)) {
+  PyObject *resultobj = 0;
+  Frame *result = 0 ;
+  
+  if ((nobjs < 0) || (nobjs > 0)) SWIG_fail;
+  result = (Frame *)new Frame();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Frame, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_Frame__SWIG_1(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::vector< IAxis *,std::allocator< IAxis * > > *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Frame *result = 0 ;
+  
+  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1, SWIGTYPE_p_std__vectorT_IAxis_p_std__allocatorT_IAxis_p_t_t,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Frame" "', argument " "1"" of type '" "std::vector< IAxis *,std::allocator< IAxis * > > const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Frame" "', argument " "1"" of type '" "std::vector< IAxis *,std::allocator< IAxis * > > const &""'"); 
+  }
+  arg1 = reinterpret_cast< std::vector< IAxis *,std::allocator< IAxis * > > * >(argp1);
+  result = (Frame *)new Frame((std::vector< IAxis *,std::allocator< IAxis * > > const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Frame, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_Frame(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[2] = {
+    0
+  };
+  
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Frame", 0, 1, argv))) SWIG_fail;
+  --argc;
+  if (argc == 0) {
+    return _wrap_new_Frame__SWIG_0(self, argc, argv);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_std__vectorT_IAxis_p_std__allocatorT_IAxis_p_t_t, SWIG_POINTER_NO_NULL | 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_Frame__SWIG_1(self, argc, argv);
+    }
+  }
+  
+fail:
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Frame'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Frame::Frame()\n"
+    "    Frame::Frame(std::vector< IAxis *,std::allocator< IAxis * > > const &)\n");
+  return 0;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_Frame(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Frame *arg1 = (Frame *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Frame" "', argument " "1"" of type '" "Frame *""'"); 
+  }
+  arg1 = reinterpret_cast< Frame * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Frame_rank(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Frame *arg1 = (Frame *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  size_t result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_rank" "', argument " "1"" of type '" "Frame const *""'"); 
+  }
+  arg1 = reinterpret_cast< Frame * >(argp1);
+  result = ((Frame const *)arg1)->rank();
+  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Frame_axis(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Frame *arg1 = (Frame *) 0 ;
+  size_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  IAxis *result = 0 ;
+  
+  if (!SWIG_Python_UnpackTuple(args, "Frame_axis", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_axis" "', argument " "1"" of type '" "Frame const *""'"); 
+  }
+  arg1 = reinterpret_cast< Frame * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Frame_axis" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  result = (IAxis *) &((Frame const *)arg1)->axis(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IAxis, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Frame_getAxisValue__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Frame *arg1 = (Frame *) 0 ;
+  size_t arg2 ;
+  size_t arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  size_t val3 ;
+  int ecode3 = 0 ;
+  double result;
+  
+  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_getAxisValue" "', argument " "1"" of type '" "Frame const *""'"); 
+  }
+  arg1 = reinterpret_cast< Frame * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Frame_getAxisValue" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  ecode3 = SWIG_AsVal_size_t(swig_obj[2], &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "Frame_getAxisValue" "', argument " "3"" of type '" "size_t""'");
+  } 
+  arg3 = static_cast< size_t >(val3);
+  result = (double)((Frame const *)arg1)->getAxisValue(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Frame_getAxisValue__SWIG_1(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Frame *arg1 = (Frame *) 0 ;
+  size_t arg2 ;
+  std::string *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  int res3 = SWIG_OLDOBJ ;
+  double result;
+  
+  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_getAxisValue" "', argument " "1"" of type '" "Frame const *""'"); 
+  }
+  arg1 = reinterpret_cast< Frame * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Frame_getAxisValue" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  {
+    std::string *ptr = (std::string *)0;
+    res3 = SWIG_AsPtr_std_string(swig_obj[2], &ptr);
+    if (!SWIG_IsOK(res3)) {
+      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "Frame_getAxisValue" "', argument " "3"" of type '" "std::string const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Frame_getAxisValue" "', argument " "3"" of type '" "std::string const &""'"); 
+    }
+    arg3 = ptr;
+  }
+  result = (double)((Frame const *)arg1)->getAxisValue(arg2,(std::string const &)*arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  if (SWIG_IsNewObj(res3)) delete arg3;
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res3)) delete arg3;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Frame_getAxisValue(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[4] = {
+    0
+  };
+  
+  if (!(argc = SWIG_Python_UnpackTuple(args, "Frame_getAxisValue", 0, 3, argv))) SWIG_fail;
+  --argc;
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_Frame, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_size_t(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_Frame_getAxisValue__SWIG_0(self, argc, argv);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_Frame, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        int res = SWIG_AsPtr_std_string(argv[2], (std::string**)(0));
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_Frame_getAxisValue__SWIG_1(self, argc, argv);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'Frame_getAxisValue'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Frame::getAxisValue(size_t,size_t) const\n"
+    "    Frame::getAxisValue(size_t,std::string const &) const\n");
+  return 0;
+}
+
+
+SWIGINTERN PyObject *_wrap_Frame_getAxesValues(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Frame *arg1 = (Frame *) 0 ;
+  size_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  std::vector< double,std::allocator< double > > result;
+  
+  if (!SWIG_Python_UnpackTuple(args, "Frame_getAxesValues", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_getAxesValues" "', argument " "1"" of type '" "Frame const *""'"); 
+  }
+  arg1 = reinterpret_cast< Frame * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Frame_getAxesValues" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  result = ((Frame const *)arg1)->getAxesValues(arg2);
+  resultobj = swig::from(static_cast< std::vector< double,std::allocator< double > > >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Frame_getAxisBin__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Frame *arg1 = (Frame *) 0 ;
+  size_t arg2 ;
+  size_t arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  size_t val3 ;
+  int ecode3 = 0 ;
+  Bin1D result;
+  
+  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_getAxisBin" "', argument " "1"" of type '" "Frame const *""'"); 
+  }
+  arg1 = reinterpret_cast< Frame * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Frame_getAxisBin" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  ecode3 = SWIG_AsVal_size_t(swig_obj[2], &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "Frame_getAxisBin" "', argument " "3"" of type '" "size_t""'");
+  } 
+  arg3 = static_cast< size_t >(val3);
+  result = ((Frame const *)arg1)->getAxisBin(arg2,arg3);
+  resultobj = SWIG_NewPointerObj((new Bin1D(static_cast< const Bin1D& >(result))), SWIGTYPE_p_Bin1D, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Frame_getAxisBin__SWIG_1(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Frame *arg1 = (Frame *) 0 ;
+  size_t arg2 ;
+  std::string *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  int res3 = SWIG_OLDOBJ ;
+  Bin1D result;
+  
+  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_getAxisBin" "', argument " "1"" of type '" "Frame const *""'"); 
+  }
+  arg1 = reinterpret_cast< Frame * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Frame_getAxisBin" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  {
+    std::string *ptr = (std::string *)0;
+    res3 = SWIG_AsPtr_std_string(swig_obj[2], &ptr);
+    if (!SWIG_IsOK(res3)) {
+      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "Frame_getAxisBin" "', argument " "3"" of type '" "std::string const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Frame_getAxisBin" "', argument " "3"" of type '" "std::string const &""'"); 
+    }
+    arg3 = ptr;
+  }
+  result = ((Frame const *)arg1)->getAxisBin(arg2,(std::string const &)*arg3);
+  resultobj = SWIG_NewPointerObj((new Bin1D(static_cast< const Bin1D& >(result))), SWIGTYPE_p_Bin1D, SWIG_POINTER_OWN |  0 );
+  if (SWIG_IsNewObj(res3)) delete arg3;
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res3)) delete arg3;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Frame_getAxisBin(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[4] = {
+    0
+  };
+  
+  if (!(argc = SWIG_Python_UnpackTuple(args, "Frame_getAxisBin", 0, 3, argv))) SWIG_fail;
+  --argc;
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_Frame, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_size_t(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_Frame_getAxisBin__SWIG_0(self, argc, argv);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_Frame, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        int res = SWIG_AsPtr_std_string(argv[2], (std::string**)(0));
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_Frame_getAxisBin__SWIG_1(self, argc, argv);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'Frame_getAxisBin'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Frame::getAxisBin(size_t,size_t) const\n"
+    "    Frame::getAxisBin(size_t,std::string const &) const\n");
+  return 0;
+}
+
+
+SWIGINTERN PyObject *_wrap_Frame_getAxisBinIndex__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Frame *arg1 = (Frame *) 0 ;
+  size_t arg2 ;
+  std::string *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  int res3 = SWIG_OLDOBJ ;
+  size_t result;
+  
+  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_getAxisBinIndex" "', argument " "1"" of type '" "Frame const *""'"); 
+  }
+  arg1 = reinterpret_cast< Frame * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Frame_getAxisBinIndex" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  {
+    std::string *ptr = (std::string *)0;
+    res3 = SWIG_AsPtr_std_string(swig_obj[2], &ptr);
+    if (!SWIG_IsOK(res3)) {
+      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "Frame_getAxisBinIndex" "', argument " "3"" of type '" "std::string const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Frame_getAxisBinIndex" "', argument " "3"" of type '" "std::string const &""'"); 
+    }
+    arg3 = ptr;
+  }
+  result = ((Frame const *)arg1)->getAxisBinIndex(arg2,(std::string const &)*arg3);
+  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
+  if (SWIG_IsNewObj(res3)) delete arg3;
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res3)) delete arg3;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Frame_getAxesBinIndices(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Frame *arg1 = (Frame *) 0 ;
+  size_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  std::vector< int,std::allocator< int > > result;
+  
+  if (!SWIG_Python_UnpackTuple(args, "Frame_getAxesBinIndices", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_getAxesBinIndices" "', argument " "1"" of type '" "Frame const *""'"); 
+  }
+  arg1 = reinterpret_cast< Frame * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Frame_getAxesBinIndices" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  result = ((Frame const *)arg1)->getAxesBinIndices(arg2);
+  resultobj = swig::from(static_cast< std::vector< int,std::allocator< int > > >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Frame_getAxisBinIndex__SWIG_1(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Frame *arg1 = (Frame *) 0 ;
+  size_t arg2 ;
+  size_t arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  size_t val3 ;
+  int ecode3 = 0 ;
+  size_t result;
+  
+  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_getAxisBinIndex" "', argument " "1"" of type '" "Frame const *""'"); 
+  }
+  arg1 = reinterpret_cast< Frame * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Frame_getAxisBinIndex" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  ecode3 = SWIG_AsVal_size_t(swig_obj[2], &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "Frame_getAxisBinIndex" "', argument " "3"" of type '" "size_t""'");
+  } 
+  arg3 = static_cast< size_t >(val3);
+  result = ((Frame const *)arg1)->getAxisBinIndex(arg2,arg3);
+  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Frame_getAxisBinIndex(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[4] = {
+    0
+  };
+  
+  if (!(argc = SWIG_Python_UnpackTuple(args, "Frame_getAxisBinIndex", 0, 3, argv))) SWIG_fail;
+  --argc;
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_Frame, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_size_t(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_Frame_getAxisBinIndex__SWIG_1(self, argc, argv);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_Frame, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        int res = SWIG_AsPtr_std_string(argv[2], (std::string**)(0));
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_Frame_getAxisBinIndex__SWIG_0(self, argc, argv);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'Frame_getAxisBinIndex'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Frame::getAxisBinIndex(size_t,std::string const &) const\n"
+    "    Frame::getAxisBinIndex(size_t,size_t) const\n");
+  return 0;
+}
+
+
+SWIGINTERN PyObject *_wrap_Frame_toGlobalIndex(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Frame *arg1 = (Frame *) 0 ;
+  std::vector< unsigned int,std::allocator< unsigned int > > *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  size_t result;
+  
+  if (!SWIG_Python_UnpackTuple(args, "Frame_toGlobalIndex", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_toGlobalIndex" "', argument " "1"" of type '" "Frame const *""'"); 
+  }
+  arg1 = reinterpret_cast< Frame * >(argp1);
+  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_std__vectorT_unsigned_int_std__allocatorT_unsigned_int_t_t,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Frame_toGlobalIndex" "', argument " "2"" of type '" "std::vector< unsigned int,std::allocator< unsigned int > > const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Frame_toGlobalIndex" "', argument " "2"" of type '" "std::vector< unsigned int,std::allocator< unsigned int > > const &""'"); 
+  }
+  arg2 = reinterpret_cast< std::vector< unsigned int,std::allocator< unsigned int > > * >(argp2);
+  result = ((Frame const *)arg1)->toGlobalIndex((std::vector< unsigned int,std::allocator< unsigned int > > const &)*arg2);
+  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Frame_findGlobalIndex(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Frame *arg1 = (Frame *) 0 ;
+  std::vector< double,std::allocator< double > > *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = SWIG_OLDOBJ ;
+  PyObject *swig_obj[2] ;
+  size_t result;
+  
+  if (!SWIG_Python_UnpackTuple(args, "Frame_findGlobalIndex", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_findGlobalIndex" "', argument " "1"" of type '" "Frame const *""'"); 
+  }
+  arg1 = reinterpret_cast< Frame * >(argp1);
+  {
+    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
+    res2 = swig::asptr(swig_obj[1], &ptr);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Frame_findGlobalIndex" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Frame_findGlobalIndex" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
+    }
+    arg2 = ptr;
+  }
+  result = ((Frame const *)arg1)->findGlobalIndex((std::vector< double,std::allocator< double > > const &)*arg2);
+  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
+  if (SWIG_IsNewObj(res2)) delete arg2;
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res2)) delete arg2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *Frame_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_Frame, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *Frame_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+
 SWIGINTERN PyObject *_wrap_new_R3__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
@@ -29934,6 +30637,150 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { "PointwiseAxis_swigregister", PointwiseAxis_swigregister, METH_O, NULL},
+	 { "new_Frame", _wrap_new_Frame, METH_VARARGS, "\n"
+		"Frame()\n"
+		"new_Frame(std::vector< IAxis *,std::allocator< IAxis * > > const & axes) -> Frame\n"
+		"Frame::Frame(const std::vector< IAxis * > &axes)\n"
+		"\n"
+		""},
+	 { "delete_Frame", _wrap_delete_Frame, METH_O, "\n"
+		"delete_Frame(Frame self)\n"
+		"virtual Frame::~Frame()\n"
+		"\n"
+		""},
+	 { "Frame_rank", _wrap_Frame_rank, METH_O, "\n"
+		"Frame_rank(Frame self) -> size_t\n"
+		"size_t Frame::rank() const\n"
+		"\n"
+		"Returns number of dimensions. \n"
+		"\n"
+		""},
+	 { "Frame_axis", _wrap_Frame_axis, METH_VARARGS, "\n"
+		"Frame_axis(Frame self, size_t serial_number) -> IAxis\n"
+		"const IAxis & Frame::axis(size_t serial_number) const\n"
+		"\n"
+		"Returns axis with given serial number. \n"
+		"\n"
+		""},
+	 { "Frame_getAxisValue", _wrap_Frame_getAxisValue, METH_VARARGS, "\n"
+		"Frame_getAxisValue(Frame self, size_t global_index, size_t i_selected_axis) -> double\n"
+		"Frame_getAxisValue(Frame self, size_t global_index, std::string const & axis_name) -> double\n"
+		"double Frame::getAxisValue(size_t global_index, const std::string &axis_name) const\n"
+		"\n"
+		"Returns the value of selected axis for given global_index.\n"
+		"\n"
+		"Parameters:\n"
+		"-----------\n"
+		"\n"
+		"global_index: \n"
+		"The global index of this data structure.\n"
+		"\n"
+		"axis_name: \n"
+		"The name of selected axis.\n"
+		"\n"
+		"corresponding bin center of selected axis \n"
+		"\n"
+		""},
+	 { "Frame_getAxesValues", _wrap_Frame_getAxesValues, METH_VARARGS, "\n"
+		"Frame_getAxesValues(Frame self, size_t global_index) -> vdouble1d_t\n"
+		"std::vector< double > Frame::getAxesValues(size_t global_index) const\n"
+		"\n"
+		"Returns values on all defined axes for given globalbin number\n"
+		"\n"
+		"Parameters:\n"
+		"-----------\n"
+		"\n"
+		"global_index: \n"
+		"The global index of this data structure.\n"
+		"\n"
+		"Vector of corresponding bin centers \n"
+		"\n"
+		""},
+	 { "Frame_getAxisBin", _wrap_Frame_getAxisBin, METH_VARARGS, "\n"
+		"Frame_getAxisBin(Frame self, size_t global_index, size_t i_selected_axis) -> Bin1D\n"
+		"Frame_getAxisBin(Frame self, size_t global_index, std::string const & axis_name) -> Bin1D\n"
+		"Bin1D Frame::getAxisBin(size_t global_index, const std::string &axis_name) const\n"
+		"\n"
+		"Returns bin of selected axis for given global_index.\n"
+		"\n"
+		"Parameters:\n"
+		"-----------\n"
+		"\n"
+		"global_index: \n"
+		"The global index of this data structure.\n"
+		"\n"
+		"axis_name: \n"
+		"The name of selected axis.\n"
+		"\n"
+		"Corresponding  Bin1D object \n"
+		"\n"
+		""},
+	 { "Frame_getAxesBinIndices", _wrap_Frame_getAxesBinIndices, METH_VARARGS, "\n"
+		"Frame_getAxesBinIndices(Frame self, size_t global_index) -> vector_integer_t\n"
+		"std::vector< int > Frame::getAxesBinIndices(size_t global_index) const\n"
+		"\n"
+		"Returns vector of axes indices for given global index\n"
+		"\n"
+		"Parameters:\n"
+		"-----------\n"
+		"\n"
+		"global_index: \n"
+		"The global index of this data structure.\n"
+		"\n"
+		"Vector of bin indices for all axes defined \n"
+		"\n"
+		""},
+	 { "Frame_getAxisBinIndex", _wrap_Frame_getAxisBinIndex, METH_VARARGS, "\n"
+		"Frame_getAxisBinIndex(Frame self, size_t global_index, std::string const & axis_name) -> size_t\n"
+		"Frame_getAxisBinIndex(Frame self, size_t global_index, size_t i_selected_axis) -> size_t\n"
+		"size_t Frame::getAxisBinIndex(size_t global_index, size_t i_selected_axis) const\n"
+		"\n"
+		"Returns axis bin index for given global index\n"
+		"\n"
+		"Parameters:\n"
+		"-----------\n"
+		"\n"
+		"global_index: \n"
+		"The global index of this data structure.\n"
+		"\n"
+		"i_selected_axis: \n"
+		"Serial number of selected axis.\n"
+		"\n"
+		"Corresponding bin index for selected axis \n"
+		"\n"
+		""},
+	 { "Frame_toGlobalIndex", _wrap_Frame_toGlobalIndex, METH_VARARGS, "\n"
+		"Frame_toGlobalIndex(Frame self, std::vector< unsigned int,std::allocator< unsigned int > > const & axes_indices) -> size_t\n"
+		"size_t Frame::toGlobalIndex(const std::vector< unsigned > &axes_indices) const\n"
+		"\n"
+		"Returns global index for specified indices of axes\n"
+		"\n"
+		"Parameters:\n"
+		"-----------\n"
+		"\n"
+		"axes_indices: \n"
+		"Vector of axes indices for all specified axes in this dataset\n"
+		"\n"
+		"Corresponding global index \n"
+		"\n"
+		""},
+	 { "Frame_findGlobalIndex", _wrap_Frame_findGlobalIndex, METH_VARARGS, "\n"
+		"Frame_findGlobalIndex(Frame self, vdouble1d_t coordinates) -> size_t\n"
+		"size_t Frame::findGlobalIndex(const std::vector< double > &coordinates) const\n"
+		"\n"
+		"Returns global index for specified axes values\n"
+		"\n"
+		"Parameters:\n"
+		"-----------\n"
+		"\n"
+		"coordinates: \n"
+		"Vector of axes coordinates for all specified axes in this dataset\n"
+		"\n"
+		"Closest global index \n"
+		"\n"
+		""},
+	 { "Frame_swigregister", Frame_swigregister, METH_O, NULL},
+	 { "Frame_swiginit", Frame_swiginit, METH_VARARGS, NULL},
 	 { "new_R3", _wrap_new_R3, METH_VARARGS, "\n"
 		"R3(double const x_, double const y_, double const z_)\n"
 		"new_R3() -> R3\n"
@@ -29998,6 +30845,12 @@ static PyMethodDef SwigMethods_proxydocs[] = {
 
 /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
 
+static void *_p_ConstKBinAxisTo_p_VariableBinAxis(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((VariableBinAxis *)  ((ConstKBinAxis *) x));
+}
+static void *_p_CustomBinAxisTo_p_VariableBinAxis(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((VariableBinAxis *)  ((CustomBinAxis *) x));
+}
 static void *_p_PointwiseAxisTo_p_IAxis(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IAxis *)  ((PointwiseAxis *) x));
 }
@@ -30013,17 +30866,12 @@ static void *_p_CustomBinAxisTo_p_IAxis(void *x, int *SWIGUNUSEDPARM(newmemory))
 static void *_p_FixedBinAxisTo_p_IAxis(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IAxis *)  ((FixedBinAxis *) x));
 }
-static void *_p_ConstKBinAxisTo_p_VariableBinAxis(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((VariableBinAxis *)  ((ConstKBinAxis *) x));
-}
-static void *_p_CustomBinAxisTo_p_VariableBinAxis(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((VariableBinAxis *)  ((CustomBinAxis *) x));
-}
 static swig_type_info _swigt__p_Bin1D = {"_p_Bin1D", "Bin1D *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_ConstKBinAxis = {"_p_ConstKBinAxis", "ConstKBinAxis *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_CustomBinAxis = {"_p_CustomBinAxis", "CustomBinAxis *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_Direction = {"_p_Direction", "Direction *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_FixedBinAxis = {"_p_FixedBinAxis", "FixedBinAxis *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Frame = {"_p_Frame", "Frame *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_IAxis = {"_p_IAxis", "IAxis *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_ICloneable = {"_p_ICloneable", "ICloneable *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_PointwiseAxis = {"_p_PointwiseAxis", "PointwiseAxis *", 0, 0, (void*)0, 0};
@@ -30061,6 +30909,7 @@ static swig_type_info _swigt__p_std__invalid_argument = {"_p_std__invalid_argume
 static swig_type_info _swigt__p_std__lessT_std__string_t = {"_p_std__lessT_std__string_t", "std::less< std::string > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t = {"_p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t", "std::map< std::string,double,std::less< std::string >,std::allocator< std::pair< std::string const,double > > > *|std::map< std::string,double > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__pairT_double_double_t = {"_p_std__pairT_double_double_t", "std::pair< double,double > *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_std__vectorT_IAxis_p_std__allocatorT_IAxis_p_t_t = {"_p_std__vectorT_IAxis_p_std__allocatorT_IAxis_p_t_t", "std::vector< IAxis *,std::allocator< IAxis * > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_double_std__allocatorT_double_t_t = {"_p_std__vectorT_double_std__allocatorT_double_t_t", "std::vector< double,std::allocator< double > > *|std::vector< double > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_int_std__allocatorT_int_t_t = {"_p_std__vectorT_int_std__allocatorT_int_t_t", "std::vector< int,std::allocator< int > > *|std::vector< int > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t = {"_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t", "std::vector< std::complex< double > > *|std::vector< std::complex< double >,std::allocator< std::complex< double > > > *", 0, 0, (void*)0, 0};
@@ -30068,6 +30917,7 @@ static swig_type_info _swigt__p_std__vectorT_std__pairT_double_double_t_std__all
 static swig_type_info _swigt__p_std__vectorT_std__string_std__allocatorT_std__string_t_t = {"_p_std__vectorT_std__string_std__allocatorT_std__string_t_t", "std::vector< std::string,std::allocator< std::string > > *|std::vector< std::string > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t = {"_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t", "std::vector< std::vector< double > > *|std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > *|std::vector< std::vector< double,std::allocator< double > > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t = {"_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t", "std::vector< std::vector< int > > *|std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > *|std::vector< std::vector< int,std::allocator< int > > > *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_std__vectorT_unsigned_int_std__allocatorT_unsigned_int_t_t = {"_p_std__vectorT_unsigned_int_std__allocatorT_unsigned_int_t_t", "std::vector< unsigned int,std::allocator< unsigned int > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t = {"_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t", "std::vector< unsigned long > *|std::vector< unsigned long,std::allocator< unsigned long > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_swig__SwigPyIterator = {"_p_swig__SwigPyIterator", "swig::SwigPyIterator *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_unsigned_char = {"_p_unsigned_char", "unsigned char *|uint_least8_t *|uint_fast8_t *|uint8_t *", 0, 0, (void*)0, 0};
@@ -30082,6 +30932,7 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_CustomBinAxis,
   &_swigt__p_Direction,
   &_swigt__p_FixedBinAxis,
+  &_swigt__p_Frame,
   &_swigt__p_IAxis,
   &_swigt__p_ICloneable,
   &_swigt__p_PointwiseAxis,
@@ -30119,6 +30970,7 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_std__lessT_std__string_t,
   &_swigt__p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t,
   &_swigt__p_std__pairT_double_double_t,
+  &_swigt__p_std__vectorT_IAxis_p_std__allocatorT_IAxis_p_t_t,
   &_swigt__p_std__vectorT_double_std__allocatorT_double_t_t,
   &_swigt__p_std__vectorT_int_std__allocatorT_int_t_t,
   &_swigt__p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t,
@@ -30126,6 +30978,7 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_std__vectorT_std__string_std__allocatorT_std__string_t_t,
   &_swigt__p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t,
   &_swigt__p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t,
+  &_swigt__p_std__vectorT_unsigned_int_std__allocatorT_unsigned_int_t_t,
   &_swigt__p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t,
   &_swigt__p_swig__SwigPyIterator,
   &_swigt__p_unsigned_char,
@@ -30140,6 +30993,7 @@ static swig_cast_info _swigc__p_ConstKBinAxis[] = {  {&_swigt__p_ConstKBinAxis,
 static swig_cast_info _swigc__p_CustomBinAxis[] = {  {&_swigt__p_CustomBinAxis, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Direction[] = {  {&_swigt__p_Direction, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_FixedBinAxis[] = {  {&_swigt__p_FixedBinAxis, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Frame[] = {  {&_swigt__p_Frame, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IAxis[] = {  {&_swigt__p_PointwiseAxis, _p_PointwiseAxisTo_p_IAxis, 0, 0},  {&_swigt__p_IAxis, 0, 0, 0},  {&_swigt__p_VariableBinAxis, _p_VariableBinAxisTo_p_IAxis, 0, 0},  {&_swigt__p_ConstKBinAxis, _p_ConstKBinAxisTo_p_IAxis, 0, 0},  {&_swigt__p_CustomBinAxis, _p_CustomBinAxisTo_p_IAxis, 0, 0},  {&_swigt__p_FixedBinAxis, _p_FixedBinAxisTo_p_IAxis, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_ICloneable[] = {  {&_swigt__p_ICloneable, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_PointwiseAxis[] = {  {&_swigt__p_PointwiseAxis, 0, 0, 0},{0, 0, 0, 0}};
@@ -30177,6 +31031,7 @@ static swig_cast_info _swigc__p_std__invalid_argument[] = {  {&_swigt__p_std__in
 static swig_cast_info _swigc__p_std__lessT_std__string_t[] = {  {&_swigt__p_std__lessT_std__string_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t[] = {  {&_swigt__p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__pairT_double_double_t[] = {  {&_swigt__p_std__pairT_double_double_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_std__vectorT_IAxis_p_std__allocatorT_IAxis_p_t_t[] = {  {&_swigt__p_std__vectorT_IAxis_p_std__allocatorT_IAxis_p_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_double_std__allocatorT_double_t_t[] = {  {&_swigt__p_std__vectorT_double_std__allocatorT_double_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_int_std__allocatorT_int_t_t[] = {  {&_swigt__p_std__vectorT_int_std__allocatorT_int_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t[] = {  {&_swigt__p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -30184,6 +31039,7 @@ static swig_cast_info _swigc__p_std__vectorT_std__pairT_double_double_t_std__all
 static swig_cast_info _swigc__p_std__vectorT_std__string_std__allocatorT_std__string_t_t[] = {  {&_swigt__p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t[] = {  {&_swigt__p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t[] = {  {&_swigt__p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_std__vectorT_unsigned_int_std__allocatorT_unsigned_int_t_t[] = {  {&_swigt__p_std__vectorT_unsigned_int_std__allocatorT_unsigned_int_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t[] = {  {&_swigt__p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_swig__SwigPyIterator[] = {  {&_swigt__p_swig__SwigPyIterator, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_unsigned_char[] = {  {&_swigt__p_unsigned_char, 0, 0, 0},{0, 0, 0, 0}};
@@ -30198,6 +31054,7 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_CustomBinAxis,
   _swigc__p_Direction,
   _swigc__p_FixedBinAxis,
+  _swigc__p_Frame,
   _swigc__p_IAxis,
   _swigc__p_ICloneable,
   _swigc__p_PointwiseAxis,
@@ -30235,6 +31092,7 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_std__lessT_std__string_t,
   _swigc__p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t,
   _swigc__p_std__pairT_double_double_t,
+  _swigc__p_std__vectorT_IAxis_p_std__allocatorT_IAxis_p_t_t,
   _swigc__p_std__vectorT_double_std__allocatorT_double_t_t,
   _swigc__p_std__vectorT_int_std__allocatorT_int_t_t,
   _swigc__p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t,
@@ -30242,6 +31100,7 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_std__vectorT_std__string_std__allocatorT_std__string_t_t,
   _swigc__p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t,
   _swigc__p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t,
+  _swigc__p_std__vectorT_unsigned_int_std__allocatorT_unsigned_int_t_t,
   _swigc__p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t,
   _swigc__p_swig__SwigPyIterator,
   _swigc__p_unsigned_char,
diff --git a/auto/Wrap/libBornAgainDevice.py b/auto/Wrap/libBornAgainDevice.py
index fd985f560aa21d81533bf961b3ef7250a6649551..a6e76269574bb005b6cd02cce8c252a3472ad167 100644
--- a/auto/Wrap/libBornAgainDevice.py
+++ b/auto/Wrap/libBornAgainDevice.py
@@ -2048,191 +2048,7 @@ class vector_R3(object):
 _libBornAgainDevice.vector_R3_swigregister(vector_R3)
 
 import libBornAgainParam
-class Frame(object):
-    r"""
-
-
-    Holds one or two axes. Base class for  Powerfield.
-
-    C++ includes: Powerfield.h
-
-    """
-
-    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
-    __repr__ = _swig_repr
-
-    def __init__(self, *args):
-        r"""
-        __init__(Frame self) -> Frame
-        __init__(Frame self, std::vector< IAxis *,std::allocator< IAxis * > > const & axes) -> Frame
-        Frame::Frame(const std::vector< IAxis * > &axes)
-
-        """
-        _libBornAgainDevice.Frame_swiginit(self, _libBornAgainDevice.new_Frame(*args))
-    __swig_destroy__ = _libBornAgainDevice.delete_Frame
-
-    def rank(self):
-        r"""
-        rank(Frame self) -> size_t
-        size_t Frame::rank() const
-
-        Returns number of dimensions. 
-
-        """
-        return _libBornAgainDevice.Frame_rank(self)
-
-    def axis(self, serial_number):
-        r"""
-        axis(Frame self, size_t serial_number) -> IAxis
-        const IAxis & Frame::axis(size_t serial_number) const
-
-        Returns axis with given serial number. 
-
-        """
-        return _libBornAgainDevice.Frame_axis(self, serial_number)
-
-    def getAxisValue(self, *args):
-        r"""
-        getAxisValue(Frame self, size_t global_index, size_t i_selected_axis) -> double
-        getAxisValue(Frame self, size_t global_index, std::string const & axis_name) -> double
-        double Frame::getAxisValue(size_t global_index, const std::string &axis_name) const
-
-        Returns the value of selected axis for given global_index.
-
-        Parameters:
-        -----------
-
-        global_index: 
-        The global index of this data structure.
-
-        axis_name: 
-        The name of selected axis.
-
-        corresponding bin center of selected axis 
-
-        """
-        return _libBornAgainDevice.Frame_getAxisValue(self, *args)
-
-    def getAxesValues(self, global_index):
-        r"""
-        getAxesValues(Frame self, size_t global_index) -> vdouble1d_t
-        std::vector< double > Frame::getAxesValues(size_t global_index) const
-
-        Returns values on all defined axes for given globalbin number
-
-        Parameters:
-        -----------
-
-        global_index: 
-        The global index of this data structure.
-
-        Vector of corresponding bin centers 
-
-        """
-        return _libBornAgainDevice.Frame_getAxesValues(self, global_index)
-
-    def getAxisBin(self, *args):
-        r"""
-        getAxisBin(Frame self, size_t global_index, size_t i_selected_axis) -> Bin1D
-        getAxisBin(Frame self, size_t global_index, std::string const & axis_name) -> Bin1D
-        Bin1D Frame::getAxisBin(size_t global_index, const std::string &axis_name) const
-
-        Returns bin of selected axis for given global_index.
-
-        Parameters:
-        -----------
-
-        global_index: 
-        The global index of this data structure.
-
-        axis_name: 
-        The name of selected axis.
-
-        Corresponding Bin1D object 
-
-        """
-        return _libBornAgainDevice.Frame_getAxisBin(self, *args)
-
-    def getAxesBinIndices(self, global_index):
-        r"""
-        getAxesBinIndices(Frame self, size_t global_index) -> vector_integer_t
-        std::vector< int > Frame::getAxesBinIndices(size_t global_index) const
-
-        Returns vector of axes indices for given global index
-
-        Parameters:
-        -----------
-
-        global_index: 
-        The global index of this data structure.
-
-        Vector of bin indices for all axes defined 
-
-        """
-        return _libBornAgainDevice.Frame_getAxesBinIndices(self, global_index)
-
-    def getAxisBinIndex(self, *args):
-        r"""
-        getAxisBinIndex(Frame self, size_t global_index, std::string const & axis_name) -> size_t
-        getAxisBinIndex(Frame self, size_t global_index, size_t i_selected_axis) -> size_t
-        size_t Frame::getAxisBinIndex(size_t global_index, size_t i_selected_axis) const
-
-        Returns axis bin index for given global index
-
-        Parameters:
-        -----------
-
-        global_index: 
-        The global index of this data structure.
-
-        i_selected_axis: 
-        Serial number of selected axis.
-
-        Corresponding bin index for selected axis 
-
-        """
-        return _libBornAgainDevice.Frame_getAxisBinIndex(self, *args)
-
-    def toGlobalIndex(self, axes_indices):
-        r"""
-        toGlobalIndex(Frame self, std::vector< unsigned int,std::allocator< unsigned int > > const & axes_indices) -> size_t
-        size_t Frame::toGlobalIndex(const std::vector< unsigned > &axes_indices) const
-
-        Returns global index for specified indices of axes
-
-        Parameters:
-        -----------
-
-        axes_indices: 
-        Vector of axes indices for all specified axes in this dataset
-
-        Corresponding global index 
-
-        """
-        return _libBornAgainDevice.Frame_toGlobalIndex(self, axes_indices)
-
-    def findGlobalIndex(self, coordinates):
-        r"""
-        findGlobalIndex(Frame self, vdouble1d_t coordinates) -> size_t
-        size_t Frame::findGlobalIndex(const std::vector< double > &coordinates) const
-
-        Returns global index for specified axes values
-
-        Parameters:
-        -----------
-
-        coordinates: 
-        Vector of axes coordinates for all specified axes in this dataset
-
-        Closest global index 
-
-        """
-        return _libBornAgainDevice.Frame_findGlobalIndex(self, coordinates)
-
-# Register Frame in _libBornAgainDevice:
-_libBornAgainDevice.Frame_swigregister(Frame)
-
-class IntensityData(Frame):
+class IntensityData(libBornAgainBase.Frame):
     r"""
 
 
diff --git a/auto/Wrap/libBornAgainDevice_wrap.cpp b/auto/Wrap/libBornAgainDevice_wrap.cpp
index 65b5550c73cded7b05d2bd5fbcb3b6dfb2a02adc..381e1fd693d9fa6a7b5d7b0a985517fde82350d3 100644
--- a/auto/Wrap/libBornAgainDevice_wrap.cpp
+++ b/auto/Wrap/libBornAgainDevice_wrap.cpp
@@ -3183,29 +3183,27 @@ namespace Swig {
 #define SWIGTYPE_p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t swig_types[83]
 #define SWIGTYPE_p_std__pairT_double_double_t swig_types[84]
 #define SWIGTYPE_p_std__vectorT_AxisInfo_std__allocatorT_AxisInfo_t_t swig_types[85]
-#define SWIGTYPE_p_std__vectorT_IAxis_p_std__allocatorT_IAxis_p_t_t swig_types[86]
-#define SWIGTYPE_p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t swig_types[87]
-#define SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t swig_types[88]
-#define SWIGTYPE_p_std__vectorT_Vec3T_double_t_std__allocatorT_Vec3T_double_t_t_t swig_types[89]
-#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[90]
-#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[91]
-#define SWIGTYPE_p_std__vectorT_size_t_std__allocatorT_size_t_t_t swig_types[92]
-#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[93]
-#define SWIGTYPE_p_std__vectorT_std__pairT_double_double_t_std__allocatorT_std__pairT_double_double_t_t_t swig_types[94]
-#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[95]
-#define SWIGTYPE_p_std__vectorT_std__unique_ptrT_DiffuseElement_t_std__allocatorT_std__unique_ptrT_DiffuseElement_t_t_t swig_types[96]
-#define SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t swig_types[97]
-#define SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t swig_types[98]
-#define SWIGTYPE_p_std__vectorT_unsigned_int_std__allocatorT_unsigned_int_t_t swig_types[99]
-#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[100]
-#define SWIGTYPE_p_swig__SwigPyIterator swig_types[101]
-#define SWIGTYPE_p_unsigned_char swig_types[102]
-#define SWIGTYPE_p_unsigned_int swig_types[103]
-#define SWIGTYPE_p_unsigned_long_long swig_types[104]
-#define SWIGTYPE_p_unsigned_short swig_types[105]
-#define SWIGTYPE_p_value_type swig_types[106]
-static swig_type_info *swig_types[108];
-static swig_module_info swig_module = {swig_types, 107, 0, 0, 0, 0};
+#define SWIGTYPE_p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t swig_types[86]
+#define SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t swig_types[87]
+#define SWIGTYPE_p_std__vectorT_Vec3T_double_t_std__allocatorT_Vec3T_double_t_t_t swig_types[88]
+#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[89]
+#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[90]
+#define SWIGTYPE_p_std__vectorT_size_t_std__allocatorT_size_t_t_t swig_types[91]
+#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[92]
+#define SWIGTYPE_p_std__vectorT_std__pairT_double_double_t_std__allocatorT_std__pairT_double_double_t_t_t swig_types[93]
+#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[94]
+#define SWIGTYPE_p_std__vectorT_std__unique_ptrT_DiffuseElement_t_std__allocatorT_std__unique_ptrT_DiffuseElement_t_t_t swig_types[95]
+#define SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t swig_types[96]
+#define SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t swig_types[97]
+#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[98]
+#define SWIGTYPE_p_swig__SwigPyIterator swig_types[99]
+#define SWIGTYPE_p_unsigned_char swig_types[100]
+#define SWIGTYPE_p_unsigned_int swig_types[101]
+#define SWIGTYPE_p_unsigned_long_long swig_types[102]
+#define SWIGTYPE_p_unsigned_short swig_types[103]
+#define SWIGTYPE_p_value_type swig_types[104]
+static swig_type_info *swig_types[106];
+static swig_module_info swig_module = {swig_types, 105, 0, 0, 0, 0};
 #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
 #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
 
@@ -26992,705 +26990,6 @@ SWIGINTERN PyObject *vector_R3_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_Frame__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **SWIGUNUSEDPARM(swig_obj)) {
-  PyObject *resultobj = 0;
-  Frame *result = 0 ;
-  
-  if ((nobjs < 0) || (nobjs > 0)) SWIG_fail;
-  result = (Frame *)new Frame();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Frame, SWIG_POINTER_NEW |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_new_Frame__SWIG_1(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
-  PyObject *resultobj = 0;
-  std::vector< IAxis *,std::allocator< IAxis * > > *arg1 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  Frame *result = 0 ;
-  
-  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1, SWIGTYPE_p_std__vectorT_IAxis_p_std__allocatorT_IAxis_p_t_t,  0  | 0);
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Frame" "', argument " "1"" of type '" "std::vector< IAxis *,std::allocator< IAxis * > > const &""'"); 
-  }
-  if (!argp1) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Frame" "', argument " "1"" of type '" "std::vector< IAxis *,std::allocator< IAxis * > > const &""'"); 
-  }
-  arg1 = reinterpret_cast< std::vector< IAxis *,std::allocator< IAxis * > > * >(argp1);
-  result = (Frame *)new Frame((std::vector< IAxis *,std::allocator< IAxis * > > const &)*arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Frame, SWIG_POINTER_NEW |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_new_Frame(PyObject *self, PyObject *args) {
-  Py_ssize_t argc;
-  PyObject *argv[2] = {
-    0
-  };
-  
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Frame", 0, 1, argv))) SWIG_fail;
-  --argc;
-  if (argc == 0) {
-    return _wrap_new_Frame__SWIG_0(self, argc, argv);
-  }
-  if (argc == 1) {
-    int _v;
-    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_std__vectorT_IAxis_p_std__allocatorT_IAxis_p_t_t, SWIG_POINTER_NO_NULL | 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      return _wrap_new_Frame__SWIG_1(self, argc, argv);
-    }
-  }
-  
-fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Frame'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    Frame::Frame()\n"
-    "    Frame::Frame(std::vector< IAxis *,std::allocator< IAxis * > > const &)\n");
-  return 0;
-}
-
-
-SWIGINTERN PyObject *_wrap_delete_Frame(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  Frame *arg1 = (Frame *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, SWIG_POINTER_DISOWN |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Frame" "', argument " "1"" of type '" "Frame *""'"); 
-  }
-  arg1 = reinterpret_cast< Frame * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Frame_rank(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  Frame *arg1 = (Frame *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  size_t result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_rank" "', argument " "1"" of type '" "Frame const *""'"); 
-  }
-  arg1 = reinterpret_cast< Frame * >(argp1);
-  result = ((Frame const *)arg1)->rank();
-  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Frame_axis(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  Frame *arg1 = (Frame *) 0 ;
-  size_t arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  size_t val2 ;
-  int ecode2 = 0 ;
-  PyObject *swig_obj[2] ;
-  IAxis *result = 0 ;
-  
-  if (!SWIG_Python_UnpackTuple(args, "Frame_axis", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_axis" "', argument " "1"" of type '" "Frame const *""'"); 
-  }
-  arg1 = reinterpret_cast< Frame * >(argp1);
-  ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Frame_axis" "', argument " "2"" of type '" "size_t""'");
-  } 
-  arg2 = static_cast< size_t >(val2);
-  result = (IAxis *) &((Frame const *)arg1)->axis(arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IAxis, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Frame_getAxisValue__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
-  PyObject *resultobj = 0;
-  Frame *arg1 = (Frame *) 0 ;
-  size_t arg2 ;
-  size_t arg3 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  size_t val2 ;
-  int ecode2 = 0 ;
-  size_t val3 ;
-  int ecode3 = 0 ;
-  double result;
-  
-  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_getAxisValue" "', argument " "1"" of type '" "Frame const *""'"); 
-  }
-  arg1 = reinterpret_cast< Frame * >(argp1);
-  ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Frame_getAxisValue" "', argument " "2"" of type '" "size_t""'");
-  } 
-  arg2 = static_cast< size_t >(val2);
-  ecode3 = SWIG_AsVal_size_t(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "Frame_getAxisValue" "', argument " "3"" of type '" "size_t""'");
-  } 
-  arg3 = static_cast< size_t >(val3);
-  result = (double)((Frame const *)arg1)->getAxisValue(arg2,arg3);
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Frame_getAxisValue__SWIG_1(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
-  PyObject *resultobj = 0;
-  Frame *arg1 = (Frame *) 0 ;
-  size_t arg2 ;
-  std::string *arg3 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  size_t val2 ;
-  int ecode2 = 0 ;
-  int res3 = SWIG_OLDOBJ ;
-  double result;
-  
-  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_getAxisValue" "', argument " "1"" of type '" "Frame const *""'"); 
-  }
-  arg1 = reinterpret_cast< Frame * >(argp1);
-  ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Frame_getAxisValue" "', argument " "2"" of type '" "size_t""'");
-  } 
-  arg2 = static_cast< size_t >(val2);
-  {
-    std::string *ptr = (std::string *)0;
-    res3 = SWIG_AsPtr_std_string(swig_obj[2], &ptr);
-    if (!SWIG_IsOK(res3)) {
-      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "Frame_getAxisValue" "', argument " "3"" of type '" "std::string const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Frame_getAxisValue" "', argument " "3"" of type '" "std::string const &""'"); 
-    }
-    arg3 = ptr;
-  }
-  result = (double)((Frame const *)arg1)->getAxisValue(arg2,(std::string const &)*arg3);
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  if (SWIG_IsNewObj(res3)) delete arg3;
-  return resultobj;
-fail:
-  if (SWIG_IsNewObj(res3)) delete arg3;
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Frame_getAxisValue(PyObject *self, PyObject *args) {
-  Py_ssize_t argc;
-  PyObject *argv[4] = {
-    0
-  };
-  
-  if (!(argc = SWIG_Python_UnpackTuple(args, "Frame_getAxisValue", 0, 3, argv))) SWIG_fail;
-  --argc;
-  if (argc == 3) {
-    int _v;
-    void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_Frame, 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      {
-        int res = SWIG_AsVal_size_t(argv[1], NULL);
-        _v = SWIG_CheckState(res);
-      }
-      if (_v) {
-        {
-          int res = SWIG_AsVal_size_t(argv[2], NULL);
-          _v = SWIG_CheckState(res);
-        }
-        if (_v) {
-          return _wrap_Frame_getAxisValue__SWIG_0(self, argc, argv);
-        }
-      }
-    }
-  }
-  if (argc == 3) {
-    int _v;
-    void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_Frame, 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      {
-        int res = SWIG_AsVal_size_t(argv[1], NULL);
-        _v = SWIG_CheckState(res);
-      }
-      if (_v) {
-        int res = SWIG_AsPtr_std_string(argv[2], (std::string**)(0));
-        _v = SWIG_CheckState(res);
-        if (_v) {
-          return _wrap_Frame_getAxisValue__SWIG_1(self, argc, argv);
-        }
-      }
-    }
-  }
-  
-fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'Frame_getAxisValue'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    Frame::getAxisValue(size_t,size_t) const\n"
-    "    Frame::getAxisValue(size_t,std::string const &) const\n");
-  return 0;
-}
-
-
-SWIGINTERN PyObject *_wrap_Frame_getAxesValues(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  Frame *arg1 = (Frame *) 0 ;
-  size_t arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  size_t val2 ;
-  int ecode2 = 0 ;
-  PyObject *swig_obj[2] ;
-  std::vector< double,std::allocator< double > > result;
-  
-  if (!SWIG_Python_UnpackTuple(args, "Frame_getAxesValues", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_getAxesValues" "', argument " "1"" of type '" "Frame const *""'"); 
-  }
-  arg1 = reinterpret_cast< Frame * >(argp1);
-  ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Frame_getAxesValues" "', argument " "2"" of type '" "size_t""'");
-  } 
-  arg2 = static_cast< size_t >(val2);
-  result = ((Frame const *)arg1)->getAxesValues(arg2);
-  resultobj = swig::from(static_cast< std::vector< double,std::allocator< double > > >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Frame_getAxisBin__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
-  PyObject *resultobj = 0;
-  Frame *arg1 = (Frame *) 0 ;
-  size_t arg2 ;
-  size_t arg3 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  size_t val2 ;
-  int ecode2 = 0 ;
-  size_t val3 ;
-  int ecode3 = 0 ;
-  Bin1D result;
-  
-  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_getAxisBin" "', argument " "1"" of type '" "Frame const *""'"); 
-  }
-  arg1 = reinterpret_cast< Frame * >(argp1);
-  ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Frame_getAxisBin" "', argument " "2"" of type '" "size_t""'");
-  } 
-  arg2 = static_cast< size_t >(val2);
-  ecode3 = SWIG_AsVal_size_t(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "Frame_getAxisBin" "', argument " "3"" of type '" "size_t""'");
-  } 
-  arg3 = static_cast< size_t >(val3);
-  result = ((Frame const *)arg1)->getAxisBin(arg2,arg3);
-  resultobj = SWIG_NewPointerObj((new Bin1D(static_cast< const Bin1D& >(result))), SWIGTYPE_p_Bin1D, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Frame_getAxisBin__SWIG_1(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
-  PyObject *resultobj = 0;
-  Frame *arg1 = (Frame *) 0 ;
-  size_t arg2 ;
-  std::string *arg3 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  size_t val2 ;
-  int ecode2 = 0 ;
-  int res3 = SWIG_OLDOBJ ;
-  Bin1D result;
-  
-  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_getAxisBin" "', argument " "1"" of type '" "Frame const *""'"); 
-  }
-  arg1 = reinterpret_cast< Frame * >(argp1);
-  ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Frame_getAxisBin" "', argument " "2"" of type '" "size_t""'");
-  } 
-  arg2 = static_cast< size_t >(val2);
-  {
-    std::string *ptr = (std::string *)0;
-    res3 = SWIG_AsPtr_std_string(swig_obj[2], &ptr);
-    if (!SWIG_IsOK(res3)) {
-      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "Frame_getAxisBin" "', argument " "3"" of type '" "std::string const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Frame_getAxisBin" "', argument " "3"" of type '" "std::string const &""'"); 
-    }
-    arg3 = ptr;
-  }
-  result = ((Frame const *)arg1)->getAxisBin(arg2,(std::string const &)*arg3);
-  resultobj = SWIG_NewPointerObj((new Bin1D(static_cast< const Bin1D& >(result))), SWIGTYPE_p_Bin1D, SWIG_POINTER_OWN |  0 );
-  if (SWIG_IsNewObj(res3)) delete arg3;
-  return resultobj;
-fail:
-  if (SWIG_IsNewObj(res3)) delete arg3;
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Frame_getAxisBin(PyObject *self, PyObject *args) {
-  Py_ssize_t argc;
-  PyObject *argv[4] = {
-    0
-  };
-  
-  if (!(argc = SWIG_Python_UnpackTuple(args, "Frame_getAxisBin", 0, 3, argv))) SWIG_fail;
-  --argc;
-  if (argc == 3) {
-    int _v;
-    void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_Frame, 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      {
-        int res = SWIG_AsVal_size_t(argv[1], NULL);
-        _v = SWIG_CheckState(res);
-      }
-      if (_v) {
-        {
-          int res = SWIG_AsVal_size_t(argv[2], NULL);
-          _v = SWIG_CheckState(res);
-        }
-        if (_v) {
-          return _wrap_Frame_getAxisBin__SWIG_0(self, argc, argv);
-        }
-      }
-    }
-  }
-  if (argc == 3) {
-    int _v;
-    void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_Frame, 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      {
-        int res = SWIG_AsVal_size_t(argv[1], NULL);
-        _v = SWIG_CheckState(res);
-      }
-      if (_v) {
-        int res = SWIG_AsPtr_std_string(argv[2], (std::string**)(0));
-        _v = SWIG_CheckState(res);
-        if (_v) {
-          return _wrap_Frame_getAxisBin__SWIG_1(self, argc, argv);
-        }
-      }
-    }
-  }
-  
-fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'Frame_getAxisBin'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    Frame::getAxisBin(size_t,size_t) const\n"
-    "    Frame::getAxisBin(size_t,std::string const &) const\n");
-  return 0;
-}
-
-
-SWIGINTERN PyObject *_wrap_Frame_getAxisBinIndex__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
-  PyObject *resultobj = 0;
-  Frame *arg1 = (Frame *) 0 ;
-  size_t arg2 ;
-  std::string *arg3 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  size_t val2 ;
-  int ecode2 = 0 ;
-  int res3 = SWIG_OLDOBJ ;
-  size_t result;
-  
-  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_getAxisBinIndex" "', argument " "1"" of type '" "Frame const *""'"); 
-  }
-  arg1 = reinterpret_cast< Frame * >(argp1);
-  ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Frame_getAxisBinIndex" "', argument " "2"" of type '" "size_t""'");
-  } 
-  arg2 = static_cast< size_t >(val2);
-  {
-    std::string *ptr = (std::string *)0;
-    res3 = SWIG_AsPtr_std_string(swig_obj[2], &ptr);
-    if (!SWIG_IsOK(res3)) {
-      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "Frame_getAxisBinIndex" "', argument " "3"" of type '" "std::string const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Frame_getAxisBinIndex" "', argument " "3"" of type '" "std::string const &""'"); 
-    }
-    arg3 = ptr;
-  }
-  result = ((Frame const *)arg1)->getAxisBinIndex(arg2,(std::string const &)*arg3);
-  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
-  if (SWIG_IsNewObj(res3)) delete arg3;
-  return resultobj;
-fail:
-  if (SWIG_IsNewObj(res3)) delete arg3;
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Frame_getAxesBinIndices(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  Frame *arg1 = (Frame *) 0 ;
-  size_t arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  size_t val2 ;
-  int ecode2 = 0 ;
-  PyObject *swig_obj[2] ;
-  std::vector< int,std::allocator< int > > result;
-  
-  if (!SWIG_Python_UnpackTuple(args, "Frame_getAxesBinIndices", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_getAxesBinIndices" "', argument " "1"" of type '" "Frame const *""'"); 
-  }
-  arg1 = reinterpret_cast< Frame * >(argp1);
-  ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Frame_getAxesBinIndices" "', argument " "2"" of type '" "size_t""'");
-  } 
-  arg2 = static_cast< size_t >(val2);
-  result = ((Frame const *)arg1)->getAxesBinIndices(arg2);
-  resultobj = swig::from(static_cast< std::vector< int,std::allocator< int > > >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Frame_getAxisBinIndex__SWIG_1(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
-  PyObject *resultobj = 0;
-  Frame *arg1 = (Frame *) 0 ;
-  size_t arg2 ;
-  size_t arg3 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  size_t val2 ;
-  int ecode2 = 0 ;
-  size_t val3 ;
-  int ecode3 = 0 ;
-  size_t result;
-  
-  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_getAxisBinIndex" "', argument " "1"" of type '" "Frame const *""'"); 
-  }
-  arg1 = reinterpret_cast< Frame * >(argp1);
-  ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Frame_getAxisBinIndex" "', argument " "2"" of type '" "size_t""'");
-  } 
-  arg2 = static_cast< size_t >(val2);
-  ecode3 = SWIG_AsVal_size_t(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "Frame_getAxisBinIndex" "', argument " "3"" of type '" "size_t""'");
-  } 
-  arg3 = static_cast< size_t >(val3);
-  result = ((Frame const *)arg1)->getAxisBinIndex(arg2,arg3);
-  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Frame_getAxisBinIndex(PyObject *self, PyObject *args) {
-  Py_ssize_t argc;
-  PyObject *argv[4] = {
-    0
-  };
-  
-  if (!(argc = SWIG_Python_UnpackTuple(args, "Frame_getAxisBinIndex", 0, 3, argv))) SWIG_fail;
-  --argc;
-  if (argc == 3) {
-    int _v;
-    void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_Frame, 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      {
-        int res = SWIG_AsVal_size_t(argv[1], NULL);
-        _v = SWIG_CheckState(res);
-      }
-      if (_v) {
-        {
-          int res = SWIG_AsVal_size_t(argv[2], NULL);
-          _v = SWIG_CheckState(res);
-        }
-        if (_v) {
-          return _wrap_Frame_getAxisBinIndex__SWIG_1(self, argc, argv);
-        }
-      }
-    }
-  }
-  if (argc == 3) {
-    int _v;
-    void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_Frame, 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      {
-        int res = SWIG_AsVal_size_t(argv[1], NULL);
-        _v = SWIG_CheckState(res);
-      }
-      if (_v) {
-        int res = SWIG_AsPtr_std_string(argv[2], (std::string**)(0));
-        _v = SWIG_CheckState(res);
-        if (_v) {
-          return _wrap_Frame_getAxisBinIndex__SWIG_0(self, argc, argv);
-        }
-      }
-    }
-  }
-  
-fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'Frame_getAxisBinIndex'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    Frame::getAxisBinIndex(size_t,std::string const &) const\n"
-    "    Frame::getAxisBinIndex(size_t,size_t) const\n");
-  return 0;
-}
-
-
-SWIGINTERN PyObject *_wrap_Frame_toGlobalIndex(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  Frame *arg1 = (Frame *) 0 ;
-  std::vector< unsigned int,std::allocator< unsigned int > > *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
-  PyObject *swig_obj[2] ;
-  size_t result;
-  
-  if (!SWIG_Python_UnpackTuple(args, "Frame_toGlobalIndex", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_toGlobalIndex" "', argument " "1"" of type '" "Frame const *""'"); 
-  }
-  arg1 = reinterpret_cast< Frame * >(argp1);
-  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_std__vectorT_unsigned_int_std__allocatorT_unsigned_int_t_t,  0  | 0);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Frame_toGlobalIndex" "', argument " "2"" of type '" "std::vector< unsigned int,std::allocator< unsigned int > > const &""'"); 
-  }
-  if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Frame_toGlobalIndex" "', argument " "2"" of type '" "std::vector< unsigned int,std::allocator< unsigned int > > const &""'"); 
-  }
-  arg2 = reinterpret_cast< std::vector< unsigned int,std::allocator< unsigned int > > * >(argp2);
-  result = ((Frame const *)arg1)->toGlobalIndex((std::vector< unsigned int,std::allocator< unsigned int > > const &)*arg2);
-  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Frame_findGlobalIndex(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  Frame *arg1 = (Frame *) 0 ;
-  std::vector< double,std::allocator< double > > *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int res2 = SWIG_OLDOBJ ;
-  PyObject *swig_obj[2] ;
-  size_t result;
-  
-  if (!SWIG_Python_UnpackTuple(args, "Frame_findGlobalIndex", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_findGlobalIndex" "', argument " "1"" of type '" "Frame const *""'"); 
-  }
-  arg1 = reinterpret_cast< Frame * >(argp1);
-  {
-    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
-    res2 = swig::asptr(swig_obj[1], &ptr);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Frame_findGlobalIndex" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Frame_findGlobalIndex" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
-    }
-    arg2 = ptr;
-  }
-  result = ((Frame const *)arg1)->findGlobalIndex((std::vector< double,std::allocator< double > > const &)*arg2);
-  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
-  if (SWIG_IsNewObj(res2)) delete arg2;
-  return resultobj;
-fail:
-  if (SWIG_IsNewObj(res2)) delete arg2;
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *Frame_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *obj;
-  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_Frame, SWIG_NewClientData(obj));
-  return SWIG_Py_Void();
-}
-
-SWIGINTERN PyObject *Frame_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  return SWIG_Python_InitShadowInstance(args);
-}
-
 SWIGINTERN PyObject *_wrap_new_IntensityData__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **SWIGUNUSEDPARM(swig_obj)) {
   PyObject *resultobj = 0;
   Powerfield< double > *result = 0 ;
@@ -42834,150 +42133,6 @@ static PyMethodDef SwigMethods[] = {
 	 { "delete_vector_R3", _wrap_delete_vector_R3, METH_O, "delete_vector_R3(vector_R3 self)"},
 	 { "vector_R3_swigregister", vector_R3_swigregister, METH_O, NULL},
 	 { "vector_R3_swiginit", vector_R3_swiginit, METH_VARARGS, NULL},
-	 { "new_Frame", _wrap_new_Frame, METH_VARARGS, "\n"
-		"Frame()\n"
-		"new_Frame(std::vector< IAxis *,std::allocator< IAxis * > > const & axes) -> Frame\n"
-		"Frame::Frame(const std::vector< IAxis * > &axes)\n"
-		"\n"
-		""},
-	 { "delete_Frame", _wrap_delete_Frame, METH_O, "\n"
-		"delete_Frame(Frame self)\n"
-		"virtual Frame::~Frame()\n"
-		"\n"
-		""},
-	 { "Frame_rank", _wrap_Frame_rank, METH_O, "\n"
-		"Frame_rank(Frame self) -> size_t\n"
-		"size_t Frame::rank() const\n"
-		"\n"
-		"Returns number of dimensions. \n"
-		"\n"
-		""},
-	 { "Frame_axis", _wrap_Frame_axis, METH_VARARGS, "\n"
-		"Frame_axis(Frame self, size_t serial_number) -> IAxis\n"
-		"const IAxis & Frame::axis(size_t serial_number) const\n"
-		"\n"
-		"Returns axis with given serial number. \n"
-		"\n"
-		""},
-	 { "Frame_getAxisValue", _wrap_Frame_getAxisValue, METH_VARARGS, "\n"
-		"Frame_getAxisValue(Frame self, size_t global_index, size_t i_selected_axis) -> double\n"
-		"Frame_getAxisValue(Frame self, size_t global_index, std::string const & axis_name) -> double\n"
-		"double Frame::getAxisValue(size_t global_index, const std::string &axis_name) const\n"
-		"\n"
-		"Returns the value of selected axis for given global_index.\n"
-		"\n"
-		"Parameters:\n"
-		"-----------\n"
-		"\n"
-		"global_index: \n"
-		"The global index of this data structure.\n"
-		"\n"
-		"axis_name: \n"
-		"The name of selected axis.\n"
-		"\n"
-		"corresponding bin center of selected axis \n"
-		"\n"
-		""},
-	 { "Frame_getAxesValues", _wrap_Frame_getAxesValues, METH_VARARGS, "\n"
-		"Frame_getAxesValues(Frame self, size_t global_index) -> vdouble1d_t\n"
-		"std::vector< double > Frame::getAxesValues(size_t global_index) const\n"
-		"\n"
-		"Returns values on all defined axes for given globalbin number\n"
-		"\n"
-		"Parameters:\n"
-		"-----------\n"
-		"\n"
-		"global_index: \n"
-		"The global index of this data structure.\n"
-		"\n"
-		"Vector of corresponding bin centers \n"
-		"\n"
-		""},
-	 { "Frame_getAxisBin", _wrap_Frame_getAxisBin, METH_VARARGS, "\n"
-		"Frame_getAxisBin(Frame self, size_t global_index, size_t i_selected_axis) -> Bin1D\n"
-		"Frame_getAxisBin(Frame self, size_t global_index, std::string const & axis_name) -> Bin1D\n"
-		"Bin1D Frame::getAxisBin(size_t global_index, const std::string &axis_name) const\n"
-		"\n"
-		"Returns bin of selected axis for given global_index.\n"
-		"\n"
-		"Parameters:\n"
-		"-----------\n"
-		"\n"
-		"global_index: \n"
-		"The global index of this data structure.\n"
-		"\n"
-		"axis_name: \n"
-		"The name of selected axis.\n"
-		"\n"
-		"Corresponding Bin1D object \n"
-		"\n"
-		""},
-	 { "Frame_getAxesBinIndices", _wrap_Frame_getAxesBinIndices, METH_VARARGS, "\n"
-		"Frame_getAxesBinIndices(Frame self, size_t global_index) -> vector_integer_t\n"
-		"std::vector< int > Frame::getAxesBinIndices(size_t global_index) const\n"
-		"\n"
-		"Returns vector of axes indices for given global index\n"
-		"\n"
-		"Parameters:\n"
-		"-----------\n"
-		"\n"
-		"global_index: \n"
-		"The global index of this data structure.\n"
-		"\n"
-		"Vector of bin indices for all axes defined \n"
-		"\n"
-		""},
-	 { "Frame_getAxisBinIndex", _wrap_Frame_getAxisBinIndex, METH_VARARGS, "\n"
-		"Frame_getAxisBinIndex(Frame self, size_t global_index, std::string const & axis_name) -> size_t\n"
-		"Frame_getAxisBinIndex(Frame self, size_t global_index, size_t i_selected_axis) -> size_t\n"
-		"size_t Frame::getAxisBinIndex(size_t global_index, size_t i_selected_axis) const\n"
-		"\n"
-		"Returns axis bin index for given global index\n"
-		"\n"
-		"Parameters:\n"
-		"-----------\n"
-		"\n"
-		"global_index: \n"
-		"The global index of this data structure.\n"
-		"\n"
-		"i_selected_axis: \n"
-		"Serial number of selected axis.\n"
-		"\n"
-		"Corresponding bin index for selected axis \n"
-		"\n"
-		""},
-	 { "Frame_toGlobalIndex", _wrap_Frame_toGlobalIndex, METH_VARARGS, "\n"
-		"Frame_toGlobalIndex(Frame self, std::vector< unsigned int,std::allocator< unsigned int > > const & axes_indices) -> size_t\n"
-		"size_t Frame::toGlobalIndex(const std::vector< unsigned > &axes_indices) const\n"
-		"\n"
-		"Returns global index for specified indices of axes\n"
-		"\n"
-		"Parameters:\n"
-		"-----------\n"
-		"\n"
-		"axes_indices: \n"
-		"Vector of axes indices for all specified axes in this dataset\n"
-		"\n"
-		"Corresponding global index \n"
-		"\n"
-		""},
-	 { "Frame_findGlobalIndex", _wrap_Frame_findGlobalIndex, METH_VARARGS, "\n"
-		"Frame_findGlobalIndex(Frame self, vdouble1d_t coordinates) -> size_t\n"
-		"size_t Frame::findGlobalIndex(const std::vector< double > &coordinates) const\n"
-		"\n"
-		"Returns global index for specified axes values\n"
-		"\n"
-		"Parameters:\n"
-		"-----------\n"
-		"\n"
-		"coordinates: \n"
-		"Vector of axes coordinates for all specified axes in this dataset\n"
-		"\n"
-		"Closest global index \n"
-		"\n"
-		""},
-	 { "Frame_swigregister", Frame_swigregister, METH_O, NULL},
-	 { "Frame_swiginit", Frame_swiginit, METH_VARARGS, NULL},
 	 { "new_IntensityData", _wrap_new_IntensityData, METH_VARARGS, "\n"
 		"IntensityData()\n"
 		"IntensityData(IAxis xAxis)\n"
@@ -45161,7 +44316,6 @@ static swig_type_info _swigt__p_std__lessT_std__string_t = {"_p_std__lessT_std__
 static swig_type_info _swigt__p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t = {"_p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t", "std::map< std::string,double,std::less< std::string >,std::allocator< std::pair< std::string const,double > > > *|std::map< std::string,double > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__pairT_double_double_t = {"_p_std__pairT_double_double_t", "std::pair< double,double > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_AxisInfo_std__allocatorT_AxisInfo_t_t = {"_p_std__vectorT_AxisInfo_std__allocatorT_AxisInfo_t_t", "std::vector< AxisInfo,std::allocator< AxisInfo > > *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_std__vectorT_IAxis_p_std__allocatorT_IAxis_p_t_t = {"_p_std__vectorT_IAxis_p_std__allocatorT_IAxis_p_t_t", "std::vector< IAxis *,std::allocator< IAxis * > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t = {"_p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t", "std::vector< INode const *,std::allocator< INode const * > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t = {"_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t", "std::vector< ParaMeta,std::allocator< ParaMeta > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_Vec3T_double_t_std__allocatorT_Vec3T_double_t_t_t = {"_p_std__vectorT_Vec3T_double_t_std__allocatorT_Vec3T_double_t_t_t", "std::vector< Vec3< double > > *|std::vector< Vec3< double >,std::allocator< Vec3< double > > > *", 0, 0, (void*)0, 0};
@@ -45174,7 +44328,6 @@ static swig_type_info _swigt__p_std__vectorT_std__string_std__allocatorT_std__st
 static swig_type_info _swigt__p_std__vectorT_std__unique_ptrT_DiffuseElement_t_std__allocatorT_std__unique_ptrT_DiffuseElement_t_t_t = {"_p_std__vectorT_std__unique_ptrT_DiffuseElement_t_std__allocatorT_std__unique_ptrT_DiffuseElement_t_t_t", "std::vector< std::unique_ptr< DiffuseElement >,std::allocator< std::unique_ptr< DiffuseElement > > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t = {"_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t", "std::vector< std::vector< double > > *|std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > *|std::vector< std::vector< double,std::allocator< double > > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t = {"_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t", "std::vector< std::vector< int > > *|std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > *|std::vector< std::vector< int,std::allocator< int > > > *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_std__vectorT_unsigned_int_std__allocatorT_unsigned_int_t_t = {"_p_std__vectorT_unsigned_int_std__allocatorT_unsigned_int_t_t", "std::vector< unsigned int,std::allocator< unsigned int > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t = {"_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t", "std::vector< unsigned long > *|std::vector< unsigned long,std::allocator< unsigned long > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_swig__SwigPyIterator = {"_p_swig__SwigPyIterator", "swig::SwigPyIterator *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_unsigned_char = {"_p_unsigned_char", "unsigned char *|uint_least8_t *|uint_fast8_t *|uint8_t *", 0, 0, (void*)0, 0};
@@ -45270,7 +44423,6 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t,
   &_swigt__p_std__pairT_double_double_t,
   &_swigt__p_std__vectorT_AxisInfo_std__allocatorT_AxisInfo_t_t,
-  &_swigt__p_std__vectorT_IAxis_p_std__allocatorT_IAxis_p_t_t,
   &_swigt__p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t,
   &_swigt__p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t,
   &_swigt__p_std__vectorT_Vec3T_double_t_std__allocatorT_Vec3T_double_t_t_t,
@@ -45283,7 +44435,6 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_std__vectorT_std__unique_ptrT_DiffuseElement_t_std__allocatorT_std__unique_ptrT_DiffuseElement_t_t_t,
   &_swigt__p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t,
   &_swigt__p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t,
-  &_swigt__p_std__vectorT_unsigned_int_std__allocatorT_unsigned_int_t_t,
   &_swigt__p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t,
   &_swigt__p_swig__SwigPyIterator,
   &_swigt__p_unsigned_char,
@@ -45379,7 +44530,6 @@ static swig_cast_info _swigc__p_std__lessT_std__string_t[] = {  {&_swigt__p_std_
 static swig_cast_info _swigc__p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t[] = {  {&_swigt__p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__pairT_double_double_t[] = {  {&_swigt__p_std__pairT_double_double_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_AxisInfo_std__allocatorT_AxisInfo_t_t[] = {  {&_swigt__p_std__vectorT_AxisInfo_std__allocatorT_AxisInfo_t_t, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_std__vectorT_IAxis_p_std__allocatorT_IAxis_p_t_t[] = {  {&_swigt__p_std__vectorT_IAxis_p_std__allocatorT_IAxis_p_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t[] = {  {&_swigt__p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t[] = {  {&_swigt__p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_Vec3T_double_t_std__allocatorT_Vec3T_double_t_t_t[] = {  {&_swigt__p_std__vectorT_Vec3T_double_t_std__allocatorT_Vec3T_double_t_t_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -45392,7 +44542,6 @@ static swig_cast_info _swigc__p_std__vectorT_std__string_std__allocatorT_std__st
 static swig_cast_info _swigc__p_std__vectorT_std__unique_ptrT_DiffuseElement_t_std__allocatorT_std__unique_ptrT_DiffuseElement_t_t_t[] = {  {&_swigt__p_std__vectorT_std__unique_ptrT_DiffuseElement_t_std__allocatorT_std__unique_ptrT_DiffuseElement_t_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t[] = {  {&_swigt__p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t[] = {  {&_swigt__p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_std__vectorT_unsigned_int_std__allocatorT_unsigned_int_t_t[] = {  {&_swigt__p_std__vectorT_unsigned_int_std__allocatorT_unsigned_int_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t[] = {  {&_swigt__p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_swig__SwigPyIterator[] = {  {&_swigt__p_swig__SwigPyIterator, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_unsigned_char[] = {  {&_swigt__p_unsigned_char, 0, 0, 0},{0, 0, 0, 0}};
@@ -45488,7 +44637,6 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t,
   _swigc__p_std__pairT_double_double_t,
   _swigc__p_std__vectorT_AxisInfo_std__allocatorT_AxisInfo_t_t,
-  _swigc__p_std__vectorT_IAxis_p_std__allocatorT_IAxis_p_t_t,
   _swigc__p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t,
   _swigc__p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t,
   _swigc__p_std__vectorT_Vec3T_double_t_std__allocatorT_Vec3T_double_t_t_t,
@@ -45501,7 +44649,6 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_std__vectorT_std__unique_ptrT_DiffuseElement_t_std__allocatorT_std__unique_ptrT_DiffuseElement_t_t_t,
   _swigc__p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t,
   _swigc__p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t,
-  _swigc__p_std__vectorT_unsigned_int_std__allocatorT_unsigned_int_t_t,
   _swigc__p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t,
   _swigc__p_swig__SwigPyIterator,
   _swigc__p_unsigned_char,