diff --git a/GUI/Model/FromCore/ItemizeSample.cpp b/GUI/Model/FromCore/ItemizeSample.cpp
index 4fb6d6653ed1d0f53cc67919dafe2225db31b790..8bf1f3a8c10b3a079e8b49b08a21d4e148e50acc 100644
--- a/GUI/Model/FromCore/ItemizeSample.cpp
+++ b/GUI/Model/FromCore/ItemizeSample.cpp
@@ -328,9 +328,9 @@ void set_Roughness(LayerItem* parent, const LayerInterface* top_interface)
         set_CrosscorrelationModel(k_corr, crosscorrelation);
         parent->roughnessSelection().setCertainItem(k_corr);
     } else if (const auto* autocorrItem = dynamic_cast<const LinearGrowthModel*>(autocorrelation)) {
-        auto* k_corr = new LinearGrowthRoughnessItem(autocorrItem->clusterVolume(),
-                                                     autocorrItem->damp1(), autocorrItem->damp2(),
-                                                     autocorrItem->damp3(), autocorrItem->damp4());
+        auto* k_corr = new LinearGrowthRoughnessItem(
+            autocorrItem->clusterVolume(), autocorrItem->damp1(), autocorrItem->damp2(),
+            autocorrItem->damp3(), autocorrItem->damp4(), autocorrItem->maxSpatialFrequency());
         set_InterlayerModel(k_corr, interlayer);
         // external crosscorrelation model is not needed here
         parent->roughnessSelection().setCertainItem(k_corr);
diff --git a/GUI/Model/Sample/RoughnessItems.cpp b/GUI/Model/Sample/RoughnessItems.cpp
index 13151947213010fdd665da7a074b52599b0e1e5b..00d28df2779a99c75706b8840119def714045fa3 100644
--- a/GUI/Model/Sample/RoughnessItems.cpp
+++ b/GUI/Model/Sample/RoughnessItems.cpp
@@ -139,7 +139,9 @@ DoubleProperties K_CorrelationRoughnessItem::roughnessProperties()
 //------------------------------------------------------------------------------------------------
 
 LinearGrowthRoughnessItem::LinearGrowthRoughnessItem(double cluster_volume, double damp1,
-                                                     double damp2, double damp3, double damp4)
+                                                     double damp2, double damp3, double damp4,
+                                                     double max_spat_frequency)
+    : RoughnessItem(max_spat_frequency)
 {
     m_cluster_volume.init("Cluster volume (nm^3)",
                           "Volume of cluster or particle arriving at a surface during deposition",
@@ -193,5 +195,15 @@ void LinearGrowthRoughnessItem::readFrom(QXmlStreamReader* r)
 std::unique_ptr<AutocorrelationModel> LinearGrowthRoughnessItem::createModel() const
 {
     return std::make_unique<LinearGrowthModel>(m_cluster_volume.dVal(), m_damp1.dVal(),
-                                               m_damp2.dVal(), m_damp3.dVal(), m_damp4.dVal());
+                                               m_damp2.dVal(), m_damp3.dVal(), m_damp4.dVal(),
+                                               m_max_spatial_frequency.dVal());
+}
+
+DoubleProperties LinearGrowthRoughnessItem::roughnessProperties()
+{
+    DoubleProperties result = {&m_cluster_volume, &m_damp1, &m_damp2, &m_damp3, &m_damp4};
+    const auto base_pars = RoughnessItem::roughnessProperties();
+    for (const auto base_par : base_pars)
+        result.push_back(base_par);
+    return result;
 }
diff --git a/GUI/Model/Sample/RoughnessItems.h b/GUI/Model/Sample/RoughnessItems.h
index 90c121537fdd99e802c898f61594759bcef09f00..45602d182f27387ecf1ca3e1515e9c0c41c58830 100644
--- a/GUI/Model/Sample/RoughnessItems.h
+++ b/GUI/Model/Sample/RoughnessItems.h
@@ -74,16 +74,13 @@ private:
 class LinearGrowthRoughnessItem : public RoughnessItem {
 public:
     LinearGrowthRoughnessItem(double cluster_volume, double damp1, double damp2, double damp3,
-                              double damp4);
+                              double damp4, double max_spat_frequency);
 
     void writeTo(QXmlStreamWriter* w) const override;
     void readFrom(QXmlStreamReader* r) override;
     std::unique_ptr<AutocorrelationModel> createModel() const override;
 
-    DoubleProperties roughnessProperties() override
-    {
-        return {&m_cluster_volume, &m_damp1, &m_damp2, &m_damp3, &m_damp4};
-    }
+    DoubleProperties roughnessProperties() override;
 
 private:
     DoubleProperty m_cluster_volume;
diff --git a/GUI/View/Sample/RoughnessForm.cpp b/GUI/View/Sample/RoughnessForm.cpp
index 50e1fe76e42c9e24a735614b283e7daa3b01a1d0..dc579d29ac9728eb430e6e053767be8980ef6a3c 100644
--- a/GUI/View/Sample/RoughnessForm.cpp
+++ b/GUI/View/Sample/RoughnessForm.cpp
@@ -75,7 +75,7 @@ void RoughnessForm::createRoughnessWidgets()
     RoughnessItem* roughness = m_rs.certainItem();
 
     if (auto* rsi = dynamic_cast<K_CorrelationRoughnessItem*>(roughness)) {
-        m_layout->addGroupOfValues("Lateral parameters", rsi->roughnessProperties());
+        m_layout->addGroupOfValues("Parameters", rsi->roughnessProperties());
         m_layout->addSelection(roughness->interlayerModelSelection());
         if (!m_is_bottom_layer)
             m_layout->addSelection(roughness->crossrorrModelSelection());
@@ -84,7 +84,7 @@ void RoughnessForm::createRoughnessWidgets()
             m_layout->addRow(new QLabel(
                 "The growth model cannot be used for the substrate. Please select another model."));
         } else {
-            m_layout->addGroupOfValues("Growth parameters", rsi->roughnessProperties());
+            m_layout->addGroupOfValues("Parameters", rsi->roughnessProperties());
             m_layout->addSelection(roughness->interlayerModelSelection());
         }
     }
diff --git a/Sample/Interface/AutocorrelationModels.cpp b/Sample/Interface/AutocorrelationModels.cpp
index 01d38b35ddfeb1cd73749c7133a512e51b5bb0f6..7cb67bd82aa04795eadee0e37ff1c9f961c94b79 100644
--- a/Sample/Interface/AutocorrelationModels.cpp
+++ b/Sample/Interface/AutocorrelationModels.cpp
@@ -101,6 +101,7 @@ double K_CorrelationModel::spectralFunction(const R3& q) const
     const double Qpar2 = q.magxy2();
     if (Qpar2 > 4 * pi * pi * m_max_spatial_frequency * m_max_spatial_frequency)
         return 0;
+
     const double H = m_hurst_parameter;
     const double clength2 = m_lateral_corr_length * m_lateral_corr_length;
     return 4.0 * pi * H * m_sigma * m_sigma * clength2 * std::pow(1 + Qpar2 * clength2, -1 - H);
@@ -117,8 +118,9 @@ double K_CorrelationModel::rms() const
 //-------------------------------------------------------------------------------------------------
 
 LinearGrowthModel::LinearGrowthModel(double particle_volume, double damp1, double damp2,
-                                     double damp3, double damp4)
-    : m_cluster_volume(particle_volume)
+                                     double damp3, double damp4, double maxSpatFrequency)
+    : AutocorrelationModel(maxSpatFrequency)
+    , m_cluster_volume(particle_volume)
     , m_damp1(damp1)
     , m_damp2(damp2)
     , m_damp3(damp3)
@@ -129,12 +131,13 @@ LinearGrowthModel::LinearGrowthModel(double particle_volume, double damp1, doubl
 
 LinearGrowthModel* LinearGrowthModel::clone() const
 {
-    return new LinearGrowthModel(m_cluster_volume, m_damp1, m_damp2, m_damp3, m_damp4);
+    return new LinearGrowthModel(m_cluster_volume, m_damp1, m_damp2, m_damp3, m_damp4,
+                                 m_max_spatial_frequency);
 }
 
 std::string LinearGrowthModel::validate() const
 {
-    std::vector<std::string> errs;
+    std::vector<std::string> errs = AutocorrelationModel::validationErrs();
     requestGe0(errs, m_cluster_volume, "particleVolume");
     requestGe0(errs, m_damp1, "dampingExp1");
     requestGe0(errs, m_damp2, "dampingExp2");
@@ -148,11 +151,15 @@ std::string LinearGrowthModel::validate() const
 
 std::vector<ParaMeta> LinearGrowthModel::parDefs() const
 {
-    return {{"Particle volume", "nm^3"},
-            {"Damping 1", ""},
-            {"Damping 2", "nm"},
-            {"Damping 3", "nm^2"},
-            {"Damping 4", "nm^3"}};
+    std::vector<ParaMeta> result = {{"Particle volume", "nm^3"},
+                                    {"Damping 1", ""},
+                                    {"Damping 2", "nm"},
+                                    {"Damping 3", "nm^2"},
+                                    {"Damping 4", "nm^3"}};
+
+    const auto base_pars = AutocorrelationModel::parDefs();
+    result.insert(result.end(), base_pars.begin(), base_pars.end());
+    return result;
 }
 
 std::string LinearGrowthModel::pythonArguments() const
@@ -161,12 +168,13 @@ std::string LinearGrowthModel::pythonArguments() const
                                     {m_damp1, parDefs()[1].unit},
                                     {m_damp2, parDefs()[2].unit},
                                     {m_damp3, parDefs()[3].unit},
-                                    {m_damp4, parDefs()[4].unit}});
+                                    {m_damp4, parDefs()[4].unit}})
+           + ", " + AutocorrelationModel::pythonArguments();
+    ;
 }
 
-double LinearGrowthModel::damping(const R3& q) const
+double LinearGrowthModel::damping(double Qpar) const
 {
-    const double Qpar = q.magxy();
     return m_damp1 * Qpar + m_damp2 * std::pow(Qpar, 2) + m_damp3 * std::pow(Qpar, 3)
            + m_damp4 * std::pow(Qpar, 4);
 }
@@ -175,19 +183,27 @@ double LinearGrowthModel::spectralFunction(double spectrum_below, double thickne
                                            const R3& q) const
 {
     ASSERT(m_validated);
-    const double damp = damping(q);
+    const double Qpar = q.magxy();
+
+    const double damp = damping(Qpar);
     if (damp == 0 || thickness == 0)
         return spectrum_below;
 
     const double exponent = std::exp(-damp * thickness);
-    return spectrum_below * exponent + m_cluster_volume * (1. - exponent * exponent) / 2 / damp;
+    const double inherited_spectrum = spectrum_below * exponent;
+
+    if (Qpar > 2 * pi * m_max_spatial_frequency)
+        return inherited_spectrum;
+
+    return inherited_spectrum + m_cluster_volume * (1. - exponent * exponent) / 2 / damp;
 }
 
 double LinearGrowthModel::crosscorrSpectrum(double spectrum_below, double thickness,
                                             const R3& q) const
 {
     ASSERT(m_validated);
-    const double damp = damping(q);
+    const double Qpar = q.magxy();
+    const double damp = damping(Qpar);
     if (damp == 0 || thickness == 0)
         return spectrum_below;
 
@@ -201,7 +217,7 @@ double LinearGrowthModel::spectralFunction(const R3&) const
     return 0;
 }
 
-double LinearGrowthModel::sigma() const
+double LinearGrowthModel::rms() const
 {
     // TODO
     return 0;
diff --git a/Sample/Interface/AutocorrelationModels.h b/Sample/Interface/AutocorrelationModels.h
index 8425e5a2d5134d8beb2296dca09c931d427a3b2d..2a9e2b380b3a0601ecfd08771fa0b28133a19ae9 100644
--- a/Sample/Interface/AutocorrelationModels.h
+++ b/Sample/Interface/AutocorrelationModels.h
@@ -23,7 +23,11 @@
 class AutocorrelationModel : public ICloneable, public INode {
 public:
     AutocorrelationModel* clone() const override = 0;
+
+    //! Returns rms of roughness
     virtual double rms() const = 0;
+
+    //! Returns power spectral density of the surface roughness
     virtual double spectralFunction(const R3& k) const = 0;
 
     void setMaxSpatialFrequency(double val) { m_max_spatial_frequency = val; }
@@ -53,10 +57,7 @@ public:
     std::string className() const override { return "K_CorrelationModel"; }
     std::vector<ParaMeta> parDefs() const final;
     std::string validate() const override;
-
-    //! Returns power spectral density of the surface roughness
     double spectralFunction(const R3& q) const override;
-
     double rms() const override;
 
     //! Sets rms of roughness
@@ -91,7 +92,7 @@ private:
 class LinearGrowthModel : public AutocorrelationModel {
 public:
     LinearGrowthModel(double particle_volume, double damp1, double damp2, double damp3,
-                      double damp4);
+                      double damp4, double maxSpatFrequency = 0.5);
     LinearGrowthModel* clone() const override;
     std::string className() const override { return "LinearGrowthModel"; }
     std::vector<ParaMeta> parDefs() const final;
@@ -103,8 +104,7 @@ public:
 
     double crosscorrSpectrum(double spectrum_below, double thickness, const R3& q) const;
 
-    //! Returns rms of roughness
-    double sigma() const override;
+    double rms() const override;
 
     void setClusterVolume(double particle_volume) { m_cluster_volume = particle_volume; }
     double clusterVolume() const { return m_cluster_volume; }
@@ -126,7 +126,7 @@ public:
 #endif
 
 private:
-    double damping(const R3& q) const;
+    double damping(double Qpar) const;
 
     double m_cluster_volume; //!< volume of particles, incoming to the surface during growth
     double m_damp1;          //!< damping exponent for spatial frequency raised to the power of 1
diff --git a/Sample/Interface/CrosscorrelationModels.h b/Sample/Interface/CrosscorrelationModels.h
index 8b28799714bb141df2831e802434999d1f98f66b..f8452e77711f0ebf3e63f54d238f96304ffbb26e 100644
--- a/Sample/Interface/CrosscorrelationModels.h
+++ b/Sample/Interface/CrosscorrelationModels.h
@@ -39,8 +39,8 @@ public:
     SpatialFrequencyCrosscorrelation* clone() const override;
     std::string className() const override { return "SpatialFrequencyCrosscorrelation"; }
     std::string validate() const override;
-    double crosscorrSpectrum(double rms_up, double rms_low, double spectrum_up,
-                             double spectrum_low, double thickness, const R3& qvec) const;
+    double crosscorrSpectrum(double rms_up, double rms_low, double spectrum_up, double spectrum_low,
+                             double thickness, const R3& qvec) const;
     std::vector<ParaMeta> parDefs() const override
     {
         return {{"BaseCrosscorrDepth", "nm"}, {"BaseSpatialFrequency", "1/nm"}, {"Power", ""}};
diff --git a/Sim/Computation/RoughMultiLayerContribution.cpp b/Sim/Computation/RoughMultiLayerContribution.cpp
index 091e474fa958aefdb6fde2414f60a9f8a15d6474..38e3657cc44e87c72302903630ceb165de10a77c 100644
--- a/Sim/Computation/RoughMultiLayerContribution.cpp
+++ b/Sim/Computation/RoughMultiLayerContribution.cpp
@@ -153,10 +153,10 @@ double Compute::roughMultiLayerContribution(const ReSample& re_sample, const Dif
         const double thickness = roughStack[j].hig() - roughStack[j + 1].hig();
         if (auto* spat_freq_cc = dynamic_cast<const SpatialFrequencyCrosscorrelation*>(
                 roughStack[j].topRoughness()->crosscorrelationModel())) {
-            const double sigma_up = roughStack[j].topRoughness()->sigma();
-            const double sigma_low = roughStack[j + 1].topRoughness()->sigma();
+            const double rms_up = roughStack[j].topRoughness()->rms();
+            const double rms_low = roughStack[j + 1].topRoughness()->rms();
             crosscorr_with_interface_below[j] = spat_freq_cc->crosscorrSpectrum(
-                sigma_up, sigma_low, spectrum[j], spectrum[j + 1], thickness, q);
+                rms_up, rms_low, spectrum[j], spectrum[j + 1], thickness, q);
         } else if (auto* lin_growth_autocorr = dynamic_cast<const LinearGrowthModel*>(
                        roughStack[j].topRoughness()->autocorrelationModel())) {
             crosscorr_with_interface_below[j] =
diff --git a/auto/Wrap/libBornAgainSample.py b/auto/Wrap/libBornAgainSample.py
index ce9513fa283a9fc42ad7dfb7eeb6525fbff8e43d..edd7a3ee023cbf70832ed8d1ecae66e2658ecdfe 100644
--- a/auto/Wrap/libBornAgainSample.py
+++ b/auto/Wrap/libBornAgainSample.py
@@ -4333,7 +4333,6 @@ class AutocorrelationModel(libBornAgainBase.ICloneable, libBornAgainParam.INode)
     def spectralFunction(self, k):
         r"""spectralFunction(AutocorrelationModel self, R3 k) -> double"""
         return _libBornAgainSample.AutocorrelationModel_spectralFunction(self, k)
-<<<<<<< HEAD
 
     def setMaxSpatialFrequency(self, val):
         r"""setMaxSpatialFrequency(AutocorrelationModel self, double val)"""
@@ -4346,8 +4345,6 @@ class AutocorrelationModel(libBornAgainBase.ICloneable, libBornAgainParam.INode)
     def parDefs(self):
         r"""parDefs(AutocorrelationModel self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
         return _libBornAgainSample.AutocorrelationModel_parDefs(self)
-=======
->>>>>>> 40c60d9aa0 (update roughMultiLayerContribution)
     __swig_destroy__ = _libBornAgainSample.delete_AutocorrelationModel
 
 # Register AutocorrelationModel in _libBornAgainSample:
@@ -4419,9 +4416,9 @@ class LinearGrowthModel(AutocorrelationModel):
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
-    def __init__(self, particle_volume, damp1, damp2, damp3, damp4):
-        r"""__init__(LinearGrowthModel self, double particle_volume, double damp1, double damp2, double damp3, double damp4) -> LinearGrowthModel"""
-        _libBornAgainSample.LinearGrowthModel_swiginit(self, _libBornAgainSample.new_LinearGrowthModel(particle_volume, damp1, damp2, damp3, damp4))
+    def __init__(self, particle_volume, damp1, damp2, damp3, damp4, maxSpatFrequency=0.5):
+        r"""__init__(LinearGrowthModel self, double particle_volume, double damp1, double damp2, double damp3, double damp4, double maxSpatFrequency=0.5) -> LinearGrowthModel"""
+        _libBornAgainSample.LinearGrowthModel_swiginit(self, _libBornAgainSample.new_LinearGrowthModel(particle_volume, damp1, damp2, damp3, damp4, maxSpatFrequency))
 
     def clone(self):
         r"""clone(LinearGrowthModel self) -> LinearGrowthModel"""
@@ -4450,9 +4447,9 @@ class LinearGrowthModel(AutocorrelationModel):
         r"""crosscorrSpectrum(LinearGrowthModel self, double spectrum_below, double thickness, R3 q) -> double"""
         return _libBornAgainSample.LinearGrowthModel_crosscorrSpectrum(self, spectrum_below, thickness, q)
 
-    def sigma(self):
-        r"""sigma(LinearGrowthModel self) -> double"""
-        return _libBornAgainSample.LinearGrowthModel_sigma(self)
+    def rms(self):
+        r"""rms(LinearGrowthModel self) -> double"""
+        return _libBornAgainSample.LinearGrowthModel_rms(self)
 
     def setClusterVolume(self, particle_volume):
         r"""setClusterVolume(LinearGrowthModel self, double particle_volume)"""
@@ -4629,9 +4626,9 @@ class SpatialFrequencyCrosscorrelation(CrosscorrelationModel):
         r"""validate(SpatialFrequencyCrosscorrelation self) -> std::string"""
         return _libBornAgainSample.SpatialFrequencyCrosscorrelation_validate(self)
 
-    def crosscorrSpectrum(self, sigma_up, sigma_low, spectrum_up, spectrum_low, thickness, qvec):
-        r"""crosscorrSpectrum(SpatialFrequencyCrosscorrelation self, double sigma_up, double sigma_low, double spectrum_up, double spectrum_low, double thickness, R3 qvec) -> double"""
-        return _libBornAgainSample.SpatialFrequencyCrosscorrelation_crosscorrSpectrum(self, sigma_up, sigma_low, spectrum_up, spectrum_low, thickness, qvec)
+    def crosscorrSpectrum(self, rms_up, rms_low, spectrum_up, spectrum_low, thickness, qvec):
+        r"""crosscorrSpectrum(SpatialFrequencyCrosscorrelation self, double rms_up, double rms_low, double spectrum_up, double spectrum_low, double thickness, R3 qvec) -> double"""
+        return _libBornAgainSample.SpatialFrequencyCrosscorrelation_crosscorrSpectrum(self, rms_up, rms_low, spectrum_up, spectrum_low, thickness, qvec)
 
     def parDefs(self):
         r"""parDefs(SpatialFrequencyCrosscorrelation self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
diff --git a/auto/Wrap/libBornAgainSample_wrap.cpp b/auto/Wrap/libBornAgainSample_wrap.cpp
index 0a1d7b14b68c66bdf59e88420baf3407ac6dc85f..ef5a821e7ecce3904ee2fae97188774b20be3157 100644
--- a/auto/Wrap/libBornAgainSample_wrap.cpp
+++ b/auto/Wrap/libBornAgainSample_wrap.cpp
@@ -52164,7 +52164,6 @@ fail:
 }
 
 
-<<<<<<< HEAD
 SWIGINTERN PyObject *_wrap_AutocorrelationModel_setMaxSpatialFrequency(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   AutocorrelationModel *arg1 = (AutocorrelationModel *) 0 ;
@@ -52273,8 +52272,6 @@ fail:
 }
 
 
-=======
->>>>>>> 40c60d9aa0 (update roughMultiLayerContribution)
 SWIGINTERN PyObject *_wrap_delete_AutocorrelationModel(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   AutocorrelationModel *arg1 = (AutocorrelationModel *) 0 ;
@@ -53095,7 +53092,79 @@ SWIGINTERN PyObject *K_CorrelationModel_swiginit(PyObject *SWIGUNUSEDPARM(self),
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_LinearGrowthModel(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_LinearGrowthModel__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  double arg5 ;
+  double arg6 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  LinearGrowthModel *result = 0 ;
+  
+  (void)self;
+  if ((nobjs < 6) || (nobjs > 6)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_LinearGrowthModel" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_LinearGrowthModel" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_LinearGrowthModel" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(swig_obj[3], &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_LinearGrowthModel" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_double(swig_obj[4], &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "new_LinearGrowthModel" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  ecode6 = SWIG_AsVal_double(swig_obj[5], &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "new_LinearGrowthModel" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  {
+    try {
+      result = (LinearGrowthModel *)new LinearGrowthModel(arg1,arg2,arg3,arg4,arg5,arg6);
+    } catch (const std::exception& ex) {
+      // message shown in the Python interpreter
+      const std::string msg {
+        "BornAgain C++ Exception: " + std::string(ex.what())
+      };
+      SWIG_exception(SWIG_RuntimeError, msg.c_str());
+    }
+  }
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_LinearGrowthModel, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_LinearGrowthModel__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -53112,11 +53181,10 @@ SWIGINTERN PyObject *_wrap_new_LinearGrowthModel(PyObject *self, PyObject *args)
   int ecode4 = 0 ;
   double val5 ;
   int ecode5 = 0 ;
-  PyObject *swig_obj[5] ;
   LinearGrowthModel *result = 0 ;
   
   (void)self;
-  if (!SWIG_Python_UnpackTuple(args, "new_LinearGrowthModel", 5, 5, swig_obj)) SWIG_fail;
+  if ((nobjs < 5) || (nobjs > 5)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
     SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_LinearGrowthModel" "', argument " "1"" of type '" "double""'");
@@ -53160,6 +53228,98 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_new_LinearGrowthModel(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[7] = {
+    0
+  };
+  
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_LinearGrowthModel", 0, 6, argv))) SWIG_fail;
+  --argc;
+  if (argc == 5) {
+    int _v = 0;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_new_LinearGrowthModel__SWIG_1(self, argc, argv);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v = 0;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_new_LinearGrowthModel__SWIG_0(self, argc, argv);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_LinearGrowthModel'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    LinearGrowthModel::LinearGrowthModel(double,double,double,double,double,double)\n"
+    "    LinearGrowthModel::LinearGrowthModel(double,double,double,double,double)\n");
+  return 0;
+}
+
+
 SWIGINTERN PyObject *_wrap_LinearGrowthModel_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   LinearGrowthModel *arg1 = (LinearGrowthModel *) 0 ;
@@ -53514,7 +53674,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LinearGrowthModel_sigma(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LinearGrowthModel_rms(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   LinearGrowthModel *arg1 = (LinearGrowthModel *) 0 ;
   void *argp1 = 0 ;
@@ -53527,12 +53687,12 @@ SWIGINTERN PyObject *_wrap_LinearGrowthModel_sigma(PyObject *self, PyObject *arg
   swig_obj[0] = args;
   res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LinearGrowthModel, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LinearGrowthModel_sigma" "', argument " "1"" of type '" "LinearGrowthModel const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LinearGrowthModel_rms" "', argument " "1"" of type '" "LinearGrowthModel const *""'"); 
   }
   arg1 = reinterpret_cast< LinearGrowthModel * >(argp1);
   {
     try {
-      result = (double)((LinearGrowthModel const *)arg1)->sigma();
+      result = (double)((LinearGrowthModel const *)arg1)->rms();
     } catch (const std::exception& ex) {
       // message shown in the Python interpreter
       const std::string msg {
@@ -75395,12 +75555,9 @@ static PyMethodDef SwigMethods[] = {
 	 { "AutocorrelationModel_clone", _wrap_AutocorrelationModel_clone, METH_O, "AutocorrelationModel_clone(AutocorrelationModel self) -> AutocorrelationModel"},
 	 { "AutocorrelationModel_rms", _wrap_AutocorrelationModel_rms, METH_O, "AutocorrelationModel_rms(AutocorrelationModel self) -> double"},
 	 { "AutocorrelationModel_spectralFunction", _wrap_AutocorrelationModel_spectralFunction, METH_VARARGS, "AutocorrelationModel_spectralFunction(AutocorrelationModel self, R3 k) -> double"},
-<<<<<<< HEAD
 	 { "AutocorrelationModel_setMaxSpatialFrequency", _wrap_AutocorrelationModel_setMaxSpatialFrequency, METH_VARARGS, "AutocorrelationModel_setMaxSpatialFrequency(AutocorrelationModel self, double val)"},
 	 { "AutocorrelationModel_maxSpatialFrequency", _wrap_AutocorrelationModel_maxSpatialFrequency, METH_O, "AutocorrelationModel_maxSpatialFrequency(AutocorrelationModel self) -> double"},
 	 { "AutocorrelationModel_parDefs", _wrap_AutocorrelationModel_parDefs, METH_O, "AutocorrelationModel_parDefs(AutocorrelationModel self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-=======
->>>>>>> 40c60d9aa0 (update roughMultiLayerContribution)
 	 { "delete_AutocorrelationModel", _wrap_delete_AutocorrelationModel, METH_O, "delete_AutocorrelationModel(AutocorrelationModel self)"},
 	 { "AutocorrelationModel_swigregister", AutocorrelationModel_swigregister, METH_O, NULL},
 	 { "new_K_CorrelationModel", _wrap_new_K_CorrelationModel, METH_VARARGS, "K_CorrelationModel(double sigma=0, double hurst=0.7, double lateralCorrLength=25, double maxSpatFrequency=0.5)"},
@@ -75419,7 +75576,7 @@ static PyMethodDef SwigMethods[] = {
 	 { "delete_K_CorrelationModel", _wrap_delete_K_CorrelationModel, METH_O, "delete_K_CorrelationModel(K_CorrelationModel self)"},
 	 { "K_CorrelationModel_swigregister", K_CorrelationModel_swigregister, METH_O, NULL},
 	 { "K_CorrelationModel_swiginit", K_CorrelationModel_swiginit, METH_VARARGS, NULL},
-	 { "new_LinearGrowthModel", _wrap_new_LinearGrowthModel, METH_VARARGS, "new_LinearGrowthModel(double particle_volume, double damp1, double damp2, double damp3, double damp4) -> LinearGrowthModel"},
+	 { "new_LinearGrowthModel", _wrap_new_LinearGrowthModel, METH_VARARGS, "LinearGrowthModel(double particle_volume, double damp1, double damp2, double damp3, double damp4, double maxSpatFrequency=0.5)"},
 	 { "LinearGrowthModel_clone", _wrap_LinearGrowthModel_clone, METH_O, "LinearGrowthModel_clone(LinearGrowthModel self) -> LinearGrowthModel"},
 	 { "LinearGrowthModel_className", _wrap_LinearGrowthModel_className, METH_O, "LinearGrowthModel_className(LinearGrowthModel self) -> std::string"},
 	 { "LinearGrowthModel_parDefs", _wrap_LinearGrowthModel_parDefs, METH_O, "LinearGrowthModel_parDefs(LinearGrowthModel self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
@@ -75429,7 +75586,7 @@ static PyMethodDef SwigMethods[] = {
 		"LinearGrowthModel_spectralFunction(LinearGrowthModel self, R3 q) -> double\n"
 		""},
 	 { "LinearGrowthModel_crosscorrSpectrum", _wrap_LinearGrowthModel_crosscorrSpectrum, METH_VARARGS, "LinearGrowthModel_crosscorrSpectrum(LinearGrowthModel self, double spectrum_below, double thickness, R3 q) -> double"},
-	 { "LinearGrowthModel_sigma", _wrap_LinearGrowthModel_sigma, METH_O, "LinearGrowthModel_sigma(LinearGrowthModel self) -> double"},
+	 { "LinearGrowthModel_rms", _wrap_LinearGrowthModel_rms, METH_O, "LinearGrowthModel_rms(LinearGrowthModel self) -> double"},
 	 { "LinearGrowthModel_setClusterVolume", _wrap_LinearGrowthModel_setClusterVolume, METH_VARARGS, "LinearGrowthModel_setClusterVolume(LinearGrowthModel self, double particle_volume)"},
 	 { "LinearGrowthModel_clusterVolume", _wrap_LinearGrowthModel_clusterVolume, METH_O, "LinearGrowthModel_clusterVolume(LinearGrowthModel self) -> double"},
 	 { "LinearGrowthModel_setDamp1", _wrap_LinearGrowthModel_setDamp1, METH_VARARGS, "LinearGrowthModel_setDamp1(LinearGrowthModel self, double damp1)"},
@@ -75474,7 +75631,7 @@ static PyMethodDef SwigMethods[] = {
 	 { "SpatialFrequencyCrosscorrelation_clone", _wrap_SpatialFrequencyCrosscorrelation_clone, METH_O, "SpatialFrequencyCrosscorrelation_clone(SpatialFrequencyCrosscorrelation self) -> SpatialFrequencyCrosscorrelation"},
 	 { "SpatialFrequencyCrosscorrelation_className", _wrap_SpatialFrequencyCrosscorrelation_className, METH_O, "SpatialFrequencyCrosscorrelation_className(SpatialFrequencyCrosscorrelation self) -> std::string"},
 	 { "SpatialFrequencyCrosscorrelation_validate", _wrap_SpatialFrequencyCrosscorrelation_validate, METH_O, "SpatialFrequencyCrosscorrelation_validate(SpatialFrequencyCrosscorrelation self) -> std::string"},
-	 { "SpatialFrequencyCrosscorrelation_crosscorrSpectrum", _wrap_SpatialFrequencyCrosscorrelation_crosscorrSpectrum, METH_VARARGS, "SpatialFrequencyCrosscorrelation_crosscorrSpectrum(SpatialFrequencyCrosscorrelation self, double sigma_up, double sigma_low, double spectrum_up, double spectrum_low, double thickness, R3 qvec) -> double"},
+	 { "SpatialFrequencyCrosscorrelation_crosscorrSpectrum", _wrap_SpatialFrequencyCrosscorrelation_crosscorrSpectrum, METH_VARARGS, "SpatialFrequencyCrosscorrelation_crosscorrSpectrum(SpatialFrequencyCrosscorrelation self, double rms_up, double rms_low, double spectrum_up, double spectrum_low, double thickness, R3 qvec) -> double"},
 	 { "SpatialFrequencyCrosscorrelation_parDefs", _wrap_SpatialFrequencyCrosscorrelation_parDefs, METH_O, "SpatialFrequencyCrosscorrelation_parDefs(SpatialFrequencyCrosscorrelation self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
 	 { "SpatialFrequencyCrosscorrelation_baseCrossCorrDepth", _wrap_SpatialFrequencyCrosscorrelation_baseCrossCorrDepth, METH_O, "SpatialFrequencyCrosscorrelation_baseCrossCorrDepth(SpatialFrequencyCrosscorrelation self) -> double"},
 	 { "SpatialFrequencyCrosscorrelation_baseSpatialFrequency", _wrap_SpatialFrequencyCrosscorrelation_baseSpatialFrequency, METH_O, "SpatialFrequencyCrosscorrelation_baseSpatialFrequency(SpatialFrequencyCrosscorrelation self) -> double"},