From 19f9f1b0fe90f22e7f0868a9c9ce6f6f78cb199d Mon Sep 17 00:00:00 2001 From: Gennady Pospelov <g.pospelov@fz-juelich.de> Date: Thu, 25 Jul 2013 13:07:26 +0200 Subject: [PATCH] Remove of LayerDecorator --- App/src/DrawHelper.cpp | 1 - App/src/StandardSamples.cpp | 111 +++++++++------ App/src/TestDetectorResolution.cpp | 6 +- App/src/TestFittingModule1.cpp | 12 +- App/src/TestFittingModule2.cpp | 6 +- App/src/TestFittingModule3.cpp | 7 +- App/src/TestIsGISAXS12.cpp | 7 +- App/src/TestIsGISAXS13.cpp | 1 - App/src/TestIsGISAXS5.cpp | 6 +- App/src/TestMesoCrystal1.cpp | 6 +- App/src/TestMesoCrystal2.cpp | 6 +- App/src/TestMiscellaneous.cpp | 1 - App/src/TestRootTree.cpp | 6 +- .../inc/LayerDecoratorDWBASimulation.h | 6 +- Core/Algorithms/inc/StrategyBuilder.h | 21 +-- .../src/LayerDecoratorDWBASimulation.cpp | 19 +-- Core/Algorithms/src/StrategyBuilder.cpp | 4 +- Core/Core.pro | 2 - Core/PythonAPI/inc/PythonCoreList.h | 1 - Core/Samples/inc/ICompositeSample.h | 18 +-- Core/Samples/inc/ISampleVisitor.h | 2 - Core/Samples/inc/Layer.h | 38 ++++-- Core/Samples/inc/LayerDecorator.h | 129 ------------------ Core/Samples/inc/Samples.h | 1 - Core/Samples/src/Layer.cpp | 58 +++++++- Core/Samples/src/LayerDecorator.cpp | 89 ------------ Core/StandardSamples/IsGISAXS01Builder.cpp | 6 +- Core/StandardSamples/IsGISAXS02Builder.cpp | 8 +- Core/StandardSamples/IsGISAXS03Builder.cpp | 16 ++- Core/StandardSamples/IsGISAXS04Builder.cpp | 11 +- Core/StandardSamples/IsGISAXS06Builder.cpp | 21 +-- Core/StandardSamples/IsGISAXS09Builder.cpp | 11 +- Core/Tools/inc/SamplePrintVisitor.h | 1 - Core/Tools/src/SamplePrintVisitor.cpp | 4 +- Doc/UserManual/UserManual.pdf | Bin 790128 -> 790112 bytes Doc/UserManual/UserManual.tex | 2 - .../TestCore/IsGISAXS06/IsGISAXS06.cpp | 1 - .../TestCore/IsGISAXS07/IsGISAXS07.cpp | 5 +- .../TestCore/IsGISAXS08/IsGISAXS08.cpp | 11 +- .../TestCore/IsGISAXS10/IsGISAXS10.cpp | 5 +- .../TestCore/IsGISAXS11/IsGISAXS11.cpp | 6 +- .../TestCore/IsGISAXS15/IsGISAXS15.cpp | 7 +- .../TestCore/MesoCrystal1/SampleBuilder.cpp | 6 +- .../TestFit/TestFit01/TestFit01.cpp | 7 +- .../TestFit/TestFit02/SampleBuilder.cpp | 7 +- dev-tools/python-bindings/MakePyCore.py | 2 +- shared.pri | 3 +- 47 files changed, 287 insertions(+), 417 deletions(-) delete mode 100644 Core/Samples/inc/LayerDecorator.h delete mode 100644 Core/Samples/src/LayerDecorator.cpp diff --git a/App/src/DrawHelper.cpp b/App/src/DrawHelper.cpp index d7e618b0f7a..38afcc969bc 100644 --- a/App/src/DrawHelper.cpp +++ b/App/src/DrawHelper.cpp @@ -18,7 +18,6 @@ #include "MultiLayer.h" #include "Utils.h" #include "Lattice.h" -#include "LayerDecorator.h" #include "MesoCrystal.h" #include "Crystal.h" #include "LatticeBasis.h" diff --git a/App/src/StandardSamples.cpp b/App/src/StandardSamples.cpp index 8eeea50a6ca..7fade17d844 100644 --- a/App/src/StandardSamples.cpp +++ b/App/src/StandardSamples.cpp @@ -21,7 +21,6 @@ #include "FormFactors.h" #include "ParticleDecoration.h" #include "InterferenceFunctionNone.h" -#include "LayerDecorator.h" #include "Lattice.h" #include "LatticeBasis.h" #include "Crystal.h" @@ -368,8 +367,9 @@ ISample *StandardSamples::IsGISAXS7_morphology() (new Particle(n_particle, ff10), m10, pos10, 0.5); particle_decoration.addParticleInfo(particle_info10); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); return p_multi_layer; } @@ -401,9 +401,10 @@ ISample *StandardSamples::IsGISAXS8_2DDL_lattice() (new Particle(n_particle, new FormFactorCylinder (5*Units::nanometer, 5*Units::nanometer))); particle_decoration.addInterferenceFunction(p_interference_function); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); p_multi_layer->addLayer(substrate_layer); return p_multi_layer; } @@ -436,9 +437,10 @@ ISample *StandardSamples::IsGISAXS8_2DDL_lattice2() (new Particle(n_particle, new FormFactorCylinder (5*Units::nanometer, 5*Units::nanometer))); particle_decoration.addInterferenceFunction(p_interference_function); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); p_multi_layer->addLayer(substrate_layer); return p_multi_layer; } @@ -465,9 +467,10 @@ ISample *StandardSamples::IsGISAXS10_CylindersParacrystal1D() (5*Units::nanometer, 5*Units::nanometer))); particle_decoration.addInterferenceFunction(p_interference_function); // particle_decoration.setTotalParticleSurfaceDensity(1.0/(20.0*Units::nanometer*20.0*Units::nanometer)); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); p_multi_layer->addLayer(substrate_layer); return p_multi_layer; } @@ -492,9 +495,10 @@ ISample *StandardSamples::IsGISAXS11_CoreShellParticles() ParticleCoreShell particle(shell_particle, core_particle, core_position); ParticleDecoration particle_decoration(particle.clone()); particle_decoration.addInterferenceFunction(new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); return p_multi_layer; } @@ -521,9 +525,10 @@ ISample *StandardSamples::IsGISAXS14_LayeredSpheresOnGradedInterface() (new Particle(n_particle, new FormFactorSphere (5*Units::nanometer, 5.*2.0*Units::nanometer))); particle_decoration.addInterferenceFunction(p_interference_function); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); p_multi_layer->addLayer(substrate_layer); return p_multi_layer; @@ -562,8 +567,10 @@ ISample *StandardSamples::IsGISAXS15_SSCA() std::cout << "Number of replacements: " << nbr_replacements << std::endl; particle_decoration.addInterferenceFunction(p_interference_function); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); return p_multi_layer; } @@ -616,9 +623,10 @@ ISample *StandardSamples::MesoCrystal1() particle_decoration.addParticle(meso.clone(), 0.0, 0.5); particle_decoration.addParticle(meso2.clone(), 0.0, 0.5); particle_decoration.addInterferenceFunction(p_interference_function); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); p_multi_layer->addLayer(substrate_layer); return p_multi_layer; @@ -683,9 +691,11 @@ ISample *StandardSamples::MesoCrystal2() particle_decoration.addParticle(meso_crystal, 0.2*Units::micrometer); particle_decoration.setTotalParticleSurfaceDensity(surface_density); particle_decoration.addInterferenceFunction(p_interference_function); - LayerDecorator avg_layer_decorator(avg_layer, particle_decoration); + + avg_layer.setDecoration(particle_decoration); + p_multi_layer->addLayer(air_layer); - p_multi_layer->addLayer(avg_layer_decorator); + p_multi_layer->addLayer(avg_layer); p_multi_layer->addLayer(substrate_layer); return p_multi_layer; @@ -714,8 +724,10 @@ ISample *StandardSamples::FormFactor_Box() 5*Units::nanometer))); particle_decoration.addInterferenceFunction (new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); p_multi_layer->addLayer(substrate_layer); return p_multi_layer; } @@ -743,8 +755,10 @@ ISample *StandardSamples::FormFactor_Cone() Units::deg2rad(54.73 )))); particle_decoration.addInterferenceFunction (new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); p_multi_layer->addLayer(substrate_layer); return p_multi_layer; } @@ -771,8 +785,10 @@ ISample *StandardSamples::FormFactor_Sphere() 5*Units::nanometer))); particle_decoration.addInterferenceFunction (new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); p_multi_layer->addLayer(substrate_layer); return p_multi_layer; } @@ -801,8 +817,10 @@ ISample *StandardSamples::FormFactor_Ellipsoid() Units::deg2rad(54.73 )))); particle_decoration.addInterferenceFunction (new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); p_multi_layer->addLayer(substrate_layer); return p_multi_layer; } @@ -829,8 +847,10 @@ ISample *StandardSamples::FormFactor_FullSpheroid() 7*Units::nanometer ))); particle_decoration.addInterferenceFunction (new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); p_multi_layer->addLayer(substrate_layer); return p_multi_layer; } @@ -858,8 +878,10 @@ ISample *StandardSamples::FormFactor_HemiSpheroid() 2*Units::nanometer))); particle_decoration.addInterferenceFunction (new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); p_multi_layer->addLayer(substrate_layer); return p_multi_layer; } @@ -887,8 +909,10 @@ ISample *StandardSamples::FormFactor_Parallelpiped() ParticleDecoration particle_decoration(particle.clone()); particle_decoration.addInterferenceFunction (new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); return p_multi_layer; } @@ -915,9 +939,11 @@ ISample *StandardSamples::FormFactor_Cylinder() ParticleDecoration particle_decoration(particle.clone()); particle_decoration.addInterferenceFunction (new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + + p_multi_layer->addLayer(air_layer); return p_multi_layer; } @@ -944,9 +970,10 @@ ISample *StandardSamples::FormFactor_Pyramid() Units::deg2rad(54.73 ) ) ) ); particle_decoration.addInterferenceFunction (new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); p_multi_layer->addLayer(substrate_layer); return p_multi_layer; } @@ -973,9 +1000,10 @@ ISample *StandardSamples::FormFactor_Prism3() 5*Units::nanometer))); particle_decoration.addInterferenceFunction (new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); p_multi_layer->addLayer(substrate_layer); return p_multi_layer; } @@ -1001,9 +1029,10 @@ ISample *StandardSamples::FormFactor_FullSphere() new FormFactorFullSphere(5*Units::nanometer ) ) ); particle_decoration.addInterferenceFunction (new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); p_multi_layer->addLayer(substrate_layer); return p_multi_layer; } diff --git a/App/src/TestDetectorResolution.cpp b/App/src/TestDetectorResolution.cpp index 6a13b976838..5cd4aa0cc7f 100644 --- a/App/src/TestDetectorResolution.cpp +++ b/App/src/TestDetectorResolution.cpp @@ -21,7 +21,6 @@ #include "Simulation.h" #include "MultiLayer.h" #include "MaterialManager.h" -#include "LayerDecorator.h" #include "MathFunctions.h" #include "ResolutionFunction2DSimple.h" @@ -73,9 +72,10 @@ void TestDetectorResolution::initializeSample() new FormFactorCylinder(5*Units::nanometer, 5*Units::nanometer))); particle_decoration.addInterferenceFunction(p_interference_funtion); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); p_multi_layer->addLayer(substrate_layer); mp_sample = p_multi_layer; } diff --git a/App/src/TestFittingModule1.cpp b/App/src/TestFittingModule1.cpp index 988aa9f02d7..9fa45e36bae 100644 --- a/App/src/TestFittingModule1.cpp +++ b/App/src/TestFittingModule1.cpp @@ -25,7 +25,6 @@ #include "InterferenceFunction1DParaCrystal.h" #include "InterferenceFunctionNone.h" #include "IsGISAXSTools.h" -#include "LayerDecorator.h" #include "MaterialManager.h" #include "MathFunctions.h" #include "MinimizerFactory.h" @@ -121,8 +120,10 @@ void TestFittingModule1::initializeSample1() ParticleDecoration particle_decoration( new Particle(n_particle, new FormFactorCylinder(5*Units::nanometer, 5*Units::nanometer))); particle_decoration.addInterferenceFunction(new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); mp_sample = p_multi_layer; // defining parameters for minimization @@ -163,9 +164,10 @@ void TestFittingModule1::initializeSample2() particle_decoration.addParticle(new Particle(n_particle, new FormFactorCylinder(cylinder_height, cylinder_radius)),0.0, 0.2); particle_decoration.addParticle(new Particle(n_particle, new FormFactorPrism3(prism3_height, prism3_half_side)), 0.0, 0.8); particle_decoration.addInterferenceFunction(new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); p_multi_layer->addLayer(substrate_layer); mp_sample = p_multi_layer; diff --git a/App/src/TestFittingModule2.cpp b/App/src/TestFittingModule2.cpp index 0a945ecee3d..0c73396687d 100644 --- a/App/src/TestFittingModule2.cpp +++ b/App/src/TestFittingModule2.cpp @@ -27,7 +27,6 @@ #include "InterferenceFunction1DParaCrystal.h" #include "InterferenceFunctionNone.h" #include "IsGISAXSTools.h" -#include "LayerDecorator.h" #include "MaterialManager.h" #include "MathFunctions.h" #include "MinimizerFactory.h" @@ -340,9 +339,10 @@ ISample *TestFittingModule2::SampleBuilder::buildSample() const m_prism3_half_side)), 0.0, 1.0 - m_cylinder_ratio); particle_decoration.addInterferenceFunction(new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); p_multi_layer->addLayer(substrate_layer); return p_multi_layer; diff --git a/App/src/TestFittingModule3.cpp b/App/src/TestFittingModule3.cpp index c5fcba93431..3aa40f68872 100644 --- a/App/src/TestFittingModule3.cpp +++ b/App/src/TestFittingModule3.cpp @@ -24,7 +24,6 @@ #include "InterferenceFunction1DParaCrystal.h" #include "InterferenceFunctionNone.h" #include "IsGISAXSTools.h" -#include "LayerDecorator.h" #include "MaterialManager.h" #include "MathFunctions.h" #include "MinimizerFactory.h" @@ -128,8 +127,10 @@ void TestFittingModule3::initializeSample() particle_decoration.addParticle(new Particle(n_particle, new FormFactorCylinder(cylinder_height, cylinder_radius)),0.0, 0.2); particle_decoration.addParticle(new Particle(n_particle, new FormFactorPrism3(prism3_height, prism3_half_side)), 0.0, 0.8); particle_decoration.addInterferenceFunction(new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); p_multi_layer->addLayer(substrate_layer); m_sample = p_multi_layer; } diff --git a/App/src/TestIsGISAXS12.cpp b/App/src/TestIsGISAXS12.cpp index c421b61af8a..fcad0c8cf2d 100644 --- a/App/src/TestIsGISAXS12.cpp +++ b/App/src/TestIsGISAXS12.cpp @@ -24,7 +24,6 @@ #include "IsGISAXSData.h" #include "IsGISAXSTools.h" #include "Layer.h" -#include "LayerDecorator.h" #include "MaterialManager.h" #include "MathFunctions.h" #include "MinimizerFactory.h" @@ -519,9 +518,9 @@ ISample *TestIsGISAXS12::TestSampleBuilder::buildSample() const builder.setPrototype(cylinder2,"/Particle/FormFactorCylinder/radius", par2, particle_probability2); builder.plantParticles(particle_decoration); - // making layer holding all whose nano particles - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); Layer substrate_layer; substrate_layer.setMaterial(substrate_material); diff --git a/App/src/TestIsGISAXS13.cpp b/App/src/TestIsGISAXS13.cpp index 6445d51c2a5..2ec6832c912 100644 --- a/App/src/TestIsGISAXS13.cpp +++ b/App/src/TestIsGISAXS13.cpp @@ -23,7 +23,6 @@ #include "IsGISAXSData.h" #include "IsGISAXSTools.h" #include "Layer.h" -#include "LayerDecorator.h" #include "MaterialManager.h" #include "MathFunctions.h" #include "MinimizerFactory.h" diff --git a/App/src/TestIsGISAXS5.cpp b/App/src/TestIsGISAXS5.cpp index a48b86f5716..44bce3ad91d 100644 --- a/App/src/TestIsGISAXS5.cpp +++ b/App/src/TestIsGISAXS5.cpp @@ -24,7 +24,6 @@ #include "IsGISAXSData.h" #include "IsGISAXSTools.h" #include "Layer.h" -#include "LayerDecorator.h" #include "MaterialManager.h" #include "MathFunctions.h" #include "MinimizerFactory.h" @@ -303,8 +302,9 @@ ISample *TestIsGISAXS5::SampleBuilder::buildSample() const builder.plantParticles(particle_decoration); // making layer holding all whose nano particles - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); Layer substrate_layer; substrate_layer.setMaterial(substrate_material); diff --git a/App/src/TestMesoCrystal1.cpp b/App/src/TestMesoCrystal1.cpp index fc90f678de8..9c278539975 100644 --- a/App/src/TestMesoCrystal1.cpp +++ b/App/src/TestMesoCrystal1.cpp @@ -20,7 +20,6 @@ #include "Simulation.h" #include "MultiLayer.h" #include "MaterialManager.h" -#include "LayerDecorator.h" #include "ParticleDecoration.h" #include "MesoCrystal.h" #include "Crystal.h" @@ -231,12 +230,13 @@ ISample* TestMesoCrystal1::SampleBuilder::buildSample() const particle_decoration.setTotalParticleSurfaceDensity(surface_density); particle_decoration.addInterferenceFunction(p_interference_funtion); - LayerDecorator avg_layer_decorator(avg_layer, particle_decoration); + + avg_layer.setDecoration(particle_decoration); LayerRoughness roughness(m_roughness, 0.3, 500.0*Units::nanometer); p_multi_layer->addLayer(air_layer); - p_multi_layer->addLayer(avg_layer_decorator); + p_multi_layer->addLayer(avg_layer); p_multi_layer->addLayerWithTopRoughness(substrate_layer, roughness); // std::cout << "Average layer index: " << n_avg << std::endl; diff --git a/App/src/TestMesoCrystal2.cpp b/App/src/TestMesoCrystal2.cpp index 8ecb161b531..4b5354a5cb6 100644 --- a/App/src/TestMesoCrystal2.cpp +++ b/App/src/TestMesoCrystal2.cpp @@ -26,7 +26,6 @@ #include "InterferenceFunctionNone.h" #include "IsGISAXSTools.h" #include "LatticeBasis.h" -#include "LayerDecorator.h" #include "MaterialManager.h" #include "MathFunctions.h" #include "MesoCrystal.h" @@ -603,12 +602,13 @@ ISample* TestMesoCrystal2::SampleBuilder::buildSample() const particle_decoration.setTotalParticleSurfaceDensity(surface_density); particle_decoration.addInterferenceFunction(p_interference_funtion); - LayerDecorator avg_layer_decorator(avg_layer, particle_decoration); + + avg_layer.setDecoration(particle_decoration); LayerRoughness roughness(m_roughness, 0.3, 500.0*Units::nanometer); p_multi_layer->addLayer(air_layer); - p_multi_layer->addLayer(avg_layer_decorator); + p_multi_layer->addLayer(avg_layer); p_multi_layer->addLayerWithTopRoughness(substrate_layer, roughness); // std::cout << "Average layer index: " << n_avg << std::endl; diff --git a/App/src/TestMiscellaneous.cpp b/App/src/TestMiscellaneous.cpp index 3f7f41aabdc..fe8db667890 100644 --- a/App/src/TestMiscellaneous.cpp +++ b/App/src/TestMiscellaneous.cpp @@ -24,7 +24,6 @@ #include "Simulation.h" #include "IsGISAXSTools.h" #include "Lattice.h" -#include "LayerDecorator.h" #include "MesoCrystal.h" #include "Crystal.h" #include "LatticeBasis.h" diff --git a/App/src/TestRootTree.cpp b/App/src/TestRootTree.cpp index 49480877efc..b0b957f458c 100644 --- a/App/src/TestRootTree.cpp +++ b/App/src/TestRootTree.cpp @@ -18,7 +18,6 @@ #include "MaterialManager.h" #include "ParticleDecoration.h" #include "Particle.h" -#include "LayerDecorator.h" #include "Simulation.h" #include "FormFactors.h" #include "Units.h" @@ -425,10 +424,11 @@ void TestRootTree::initializeMesoCrystal( particle_decoration.setTotalParticleSurfaceDensity(surface_density); particle_decoration.addInterferenceFunction(p_interference_funtion); - LayerDecorator avg_layer_decorator(avg_layer, particle_decoration); + + avg_layer.setDecoration(particle_decoration); p_multi_layer->addLayer(air_layer); - p_multi_layer->addLayer(avg_layer_decorator); + p_multi_layer->addLayer(avg_layer); p_multi_layer->addLayer(substrate_layer); mp_sample = p_multi_layer; } diff --git a/Core/Algorithms/inc/LayerDecoratorDWBASimulation.h b/Core/Algorithms/inc/LayerDecoratorDWBASimulation.h index 233514d3622..ada2ef46461 100644 --- a/Core/Algorithms/inc/LayerDecoratorDWBASimulation.h +++ b/Core/Algorithms/inc/LayerDecoratorDWBASimulation.h @@ -20,14 +20,14 @@ #include "DiffuseDWBASimulation.h" #include "IInterferenceFunctionStrategy.h" -class LayerDecorator; +class Layer; //! Calculates scattering cross sections in DWBA for a layer with particles in/on it class LayerDecoratorDWBASimulation : public LayerDWBASimulation { public: - LayerDecoratorDWBASimulation(const LayerDecorator *p_layer_decorator); + LayerDecoratorDWBASimulation(const Layer *p_layer_decorator); virtual ~LayerDecoratorDWBASimulation(); LayerDecoratorDWBASimulation *clone() const @@ -40,7 +40,7 @@ class LayerDecoratorDWBASimulation : public LayerDWBASimulation virtual void run(); protected: - LayerDecorator *mp_layer_decorator; + Layer *mp_layer; DiffuseDWBASimulation *mp_diffuseDWBA; private: diff --git a/Core/Algorithms/inc/StrategyBuilder.h b/Core/Algorithms/inc/StrategyBuilder.h index 7568cf959cd..b3e231f2654 100644 --- a/Core/Algorithms/inc/StrategyBuilder.h +++ b/Core/Algorithms/inc/StrategyBuilder.h @@ -24,24 +24,22 @@ class FormFactorInfo; class IInterferenceFunction; class IInterferenceFunctionStrategy; -class LayerDecorator; +class Layer; class Simulation; class IDoubleToPairOfComplexMap; class ParticleInfo; class IFormFactor; -//! Methods to generate a simulation strategy from a LayerDecorator and SimulationParameters +//! Methods to generate a simulation strategy for decorated Layer SimulationParameters class LayerDecoratorStrategyBuilder { - public: - /* out-of-place implementation required due to LayerDecorator */ +public: LayerDecoratorStrategyBuilder( - const LayerDecorator& decorated_layer, + const Layer& decorated_layer, const Simulation& simulation, const SimulationParameters& sim_params); - /* out-of-place implementation required due to LayerDecorator */ virtual ~LayerDecoratorStrategyBuilder(); //! Sets R and T coefficient map for DWBA simulation @@ -50,12 +48,14 @@ class LayerDecoratorStrategyBuilder //! Creates a strategy object which is able to calculate the scattering for fixed k_f virtual IInterferenceFunctionStrategy *createStrategy(); - protected: - LayerDecorator *mp_layer_decorator; //!< decorated layer + +protected: + Layer *mp_layer_decorator; //!< decorated layer Simulation *mp_simulation; //!< simulation SimulationParameters m_sim_params; //!< simulation parameters IDoubleToPairOfComplexMap *mp_RT_function; //!< R and T coefficients for DWBA - private: + +private: //! collect the formfactor info of all particles in the decoration and decorate //! these for DWBA when needed void collectFormFactorInfos(); @@ -73,9 +73,10 @@ class LayerDecoratorStrategyBuilder SafePointerVector<IInterferenceFunction> m_ifs; }; + class FormFactorInfo : public ICloneable { - public: +public: FormFactorInfo() : mp_ff(0), m_pos_x(0.0), m_pos_y(0.0), m_abundance(0.0) {} ~FormFactorInfo(); diff --git a/Core/Algorithms/src/LayerDecoratorDWBASimulation.cpp b/Core/Algorithms/src/LayerDecoratorDWBASimulation.cpp index 1b97b889cd8..7ffc825f958 100644 --- a/Core/Algorithms/src/LayerDecoratorDWBASimulation.cpp +++ b/Core/Algorithms/src/LayerDecoratorDWBASimulation.cpp @@ -14,20 +14,21 @@ // ************************************************************************** // #include "LayerDecoratorDWBASimulation.h" -#include "LayerDecorator.h" +//#include "LayerDecorator.h" +#include "Layer.h" #include "FormFactors.h" #include "MessageService.h" LayerDecoratorDWBASimulation::LayerDecoratorDWBASimulation( - const LayerDecorator *p_layer_decorator) + const Layer *p_layer) { - mp_layer_decorator = p_layer_decorator->clone(); - mp_diffuseDWBA = mp_layer_decorator->createDiffuseDWBASimulation(); + mp_layer = p_layer->clone(); + mp_diffuseDWBA = mp_layer->createDiffuseDWBASimulation(); } LayerDecoratorDWBASimulation::~LayerDecoratorDWBASimulation() { - delete mp_layer_decorator; + delete mp_layer; delete mp_diffuseDWBA; } @@ -55,7 +56,7 @@ IInterferenceFunctionStrategy *LayerDecoratorDWBASimulation::createAndInitStrategy() const { LayerDecoratorStrategyBuilder builder( - *mp_layer_decorator, *mp_simulation, m_sim_params); + *mp_layer, *mp_simulation, m_sim_params); if (mp_RT_function) builder.setReflectionTransmissionFunction(*mp_RT_function); IInterferenceFunctionStrategy *p_strategy = builder.createStrategy(); @@ -67,8 +68,8 @@ LayerDecoratorDWBASimulation::createDWBAFormFactors() const { msglog(MSG::DEBUG) << "LayerDecoratorDWBASimulation::create...()"; std::vector<IFormFactor*> result; - const IDecoration *p_decoration = mp_layer_decorator->getDecoration(); - complex_t n_layer = mp_layer_decorator->getRefractiveIndex(); + const IDecoration *p_decoration = mp_layer->getDecoration(); + complex_t n_layer = mp_layer->getRefractiveIndex(); size_t number_of_particles = p_decoration->getNumberOfParticles(); for (size_t particle_index = 0; particle_index<number_of_particles; ++particle_index) { @@ -109,7 +110,7 @@ void LayerDecoratorDWBASimulation::calculateCoherentIntensity( msglog(MSG::DEBUG) << "LayerDecoratorDWBASimulation::calculateCoh...()"; double wavelength = getWaveLength(); double total_surface_density = - mp_layer_decorator->getTotalParticleSurfaceDensity(); + mp_layer->getTotalParticleSurfaceDensity(); cvector_t k_ij = m_ki; k_ij.setZ(-mp_kz_function->evaluate(-m_alpha_i)); diff --git a/Core/Algorithms/src/StrategyBuilder.cpp b/Core/Algorithms/src/StrategyBuilder.cpp index 03e7f4b3b72..d420ed4169c 100644 --- a/Core/Algorithms/src/StrategyBuilder.cpp +++ b/Core/Algorithms/src/StrategyBuilder.cpp @@ -15,7 +15,7 @@ // ************************************************************************** // #include "StrategyBuilder.h" -#include "LayerDecorator.h" +#include "Layer.h" #include "Simulation.h" #include "IDoubleToComplexFunction.h" #include "InterferenceFunctions.h" @@ -26,7 +26,7 @@ #include <cmath> LayerDecoratorStrategyBuilder::LayerDecoratorStrategyBuilder( - const LayerDecorator& decorated_layer, const Simulation& simulation, + const Layer& decorated_layer, const Simulation& simulation, const SimulationParameters& sim_params) : mp_layer_decorator(decorated_layer.clone()) , mp_simulation(simulation.clone()) diff --git a/Core/Core.pro b/Core/Core.pro index 7a42368f8d0..944aaff1755 100644 --- a/Core/Core.pro +++ b/Core/Core.pro @@ -112,7 +112,6 @@ SOURCES += \ Samples/src/Lattice.cpp \ Samples/src/LatticeBasis.cpp \ Samples/src/Layer.cpp \ - Samples/src/LayerDecorator.cpp \ Samples/src/LayerInterface.cpp \ Samples/src/LayerRoughness.cpp \ Samples/src/MaterialManager.cpp \ @@ -284,7 +283,6 @@ HEADERS += \ Samples/inc/Lattice2DIFParameters.h \ Samples/inc/LatticeBasis.h \ Samples/inc/Layer.h \ - Samples/inc/LayerDecorator.h \ Samples/inc/LayerInterface.h \ Samples/inc/LayerRoughness.h \ Samples/inc/MaterialManager.h \ diff --git a/Core/PythonAPI/inc/PythonCoreList.h b/Core/PythonAPI/inc/PythonCoreList.h index db28eea6eae..73aa060f44d 100644 --- a/Core/PythonAPI/inc/PythonCoreList.h +++ b/Core/PythonAPI/inc/PythonCoreList.h @@ -53,7 +53,6 @@ #include "Lattice2DIFParameters.h" #include "LatticeBasis.h" #include "Layer.h" -#include "LayerDecorator.h" #include "LayerRoughness.h" #include "MathFunctions.h" #include "MaterialManager.h" diff --git a/Core/Samples/inc/ICompositeSample.h b/Core/Samples/inc/ICompositeSample.h index 173a24ee782..d5867c0a9bf 100644 --- a/Core/Samples/inc/ICompositeSample.h +++ b/Core/Samples/inc/ICompositeSample.h @@ -22,23 +22,7 @@ //! Interface to equip ISample with a tree structure. -//! As of March 2013, this is the base class for -//! - IClustered Particle -//! - Crystal -//! - IDecoration -//! - ParticleDecoration -//! - Layer -//! - LayerDecorator -//! - LayerInterface -//! - MultiLayer -//! - Particle -//! - LatticeBasis -//! - MesoCrystal -//! - ParticleCoreShell -//! - ParticleInfo -//! - DiffuseParticleInfo -//! - PositionParticleInfo -//! + class BA_CORE_API_ ICompositeSample : public ISample { public: diff --git a/Core/Samples/inc/ISampleVisitor.h b/Core/Samples/inc/ISampleVisitor.h index 84932cb9483..257adc86590 100644 --- a/Core/Samples/inc/ISampleVisitor.h +++ b/Core/Samples/inc/ISampleVisitor.h @@ -22,7 +22,6 @@ class ISample; class MultiLayer; class Layer; class LayerInterface; -class LayerDecorator; class ParticleDecoration; class ParticleInfo; class Particle; @@ -49,7 +48,6 @@ public: virtual void visit(const ISample *) { throw NotImplementedException("ISampleVisitor::visit(ISample *)"); } virtual void visit(const MultiLayer *) { throw NotImplementedException("ISampleVisitor::visit(MultiLayer *)"); } virtual void visit(const Layer *) { throw NotImplementedException("ISampleVisitor::visit(Layer *)"); } - virtual void visit(const LayerDecorator *) { throw NotImplementedException("ISampleVisitor::visit(LayerDecorator *)"); } virtual void visit(const LayerInterface *) { throw NotImplementedException("ISampleVisitor::visit(LayerInterface *)"); } virtual void visit(const ParticleDecoration *) { throw NotImplementedException("ISampleVisitor::visit(ParticleDecoration *)"); } virtual void visit(const ParticleInfo *) { throw NotImplementedException("ISampleVisitor::visit(ParticleInfo *)"); } diff --git a/Core/Samples/inc/Layer.h b/Core/Samples/inc/Layer.h index 15762495db2..7c0180a8829 100644 --- a/Core/Samples/inc/Layer.h +++ b/Core/Samples/inc/Layer.h @@ -21,6 +21,8 @@ #include "IMaterial.h" #include "HomogeneousMaterial.h" #include "LayerDWBASimulation.h" +#include "ParticleDecoration.h" +#include "LayerDecoratorDWBASimulation.h" //! A Layer with thickness and pointer to the material @@ -28,16 +30,12 @@ class BA_CORE_API_ Layer : public ICompositeSample { public: //! Constructs empty layer. - Layer() : mp_material(0), m_thickness(0) - { - setName("Layer"); - init_parameters(); - } + Layer(); //! Constructs layer made of _material_ with _thickness_ in nanometers. Layer(const IMaterial* material, double thickness=0); - virtual ~Layer() {} + virtual ~Layer(); virtual Layer *clone() const { return new Layer(*this); } @@ -62,11 +60,22 @@ class BA_CORE_API_ Layer : public ICompositeSample //! Returns refractive index of the layer's material. virtual complex_t getRefractiveIndex() const; - //! Returns false (override is important for polymorphism of LayerDecorator). - virtual bool hasDWBASimulation() const { return false; } + //! sets particle decoration + void setDecoration(IDecoration *decoration) { delete mp_decoration; mp_decoration = decoration; } + void setDecoration(const IDecoration &decoration) { delete mp_decoration; mp_decoration = decoration.clone(); } + + //! returns particle decoration + const IDecoration* getDecoration() const { return mp_decoration; } + + //! Returns true if decoration is present + virtual bool hasDWBASimulation() const { return (mp_decoration ? true : false); } + + //! creates and return LayerDWBASimulation in the case of present decoration + virtual LayerDWBASimulation *createDWBASimulation() const; + + virtual DiffuseDWBASimulation *createDiffuseDWBASimulation() const; - //! Returns zero pointer (override is important for polymorphism of LayerDecorator). - virtual LayerDWBASimulation *createDWBASimulation() const { return 0; } + virtual double getTotalParticleSurfaceDensity() const; protected: Layer(const Layer& other); @@ -76,6 +85,7 @@ class BA_CORE_API_ Layer : public ICompositeSample void print(std::ostream& ostr) const; const IMaterial* mp_material; //!< pointer to the material + IDecoration *mp_decoration; //!< particle decoration double m_thickness; //!< layer thickness in nanometers }; @@ -86,6 +96,14 @@ inline complex_t Layer::getRefractiveIndex() const return (material ? material->getRefractiveIndex() : complex_t(0,0)); } +inline double Layer::getTotalParticleSurfaceDensity() const +{ + if (mp_decoration) { + return mp_decoration->getTotalParticleSurfaceDensity(); + } + return 0.0; +} + #endif // LAYER_H diff --git a/Core/Samples/inc/LayerDecorator.h b/Core/Samples/inc/LayerDecorator.h deleted file mode 100644 index d28fb702928..00000000000 --- a/Core/Samples/inc/LayerDecorator.h +++ /dev/null @@ -1,129 +0,0 @@ -// ************************************************************************** // -// -// BornAgain: simulate and fit scattering at grazing incidence -// -//! @file Samples/inc/LayerDecorator.h -//! @brief Defines class LayerDecorator. -//! -//! @homepage http://apps.jcns.fz-juelich.de/BornAgain -//! @license GNU General Public License v3 or higher (see COPYING) -//! @copyright Forschungszentrum Jülich GmbH 2013 -//! @authors Scientific Computing Group at MLZ Garching -//! @authors C. Durniak, G. Pospelov, W. Van Herck, J. Wuttke -// -// ************************************************************************** // - -#ifndef LAYERDECORATOR_H_ -#define LAYERDECORATOR_H_ - -#include "WinDllMacros.h" -#include "Layer.h" -#include "ParticleDecoration.h" -#include "LayerDecoratorDWBASimulation.h" - -//! Combines a Layer with an IDecoration. - -class BA_CORE_API_ LayerDecorator : public Layer -{ - public: - //! Constructs LayerDecorator object by cloning _layer_ and _decoration_. - LayerDecorator(const Layer& layer, const IDecoration& decoration); - virtual ~LayerDecorator(); - - virtual LayerDecorator *clone() const; - - //! calls the ISampleVisitor's visit method - virtual void accept(ISampleVisitor *visitor) const { visitor->visit(this); } - - //! Sets _thickness_ in nanometers. - virtual void setThickness(double thickness); - - //! Returns thickness in nanometers. - virtual double getThickness() const; - - //! Sets _material_. - virtual void setMaterial(const IMaterial* material); - - //! Sets _material_ and _thickness_ in nanometers. - virtual void setMaterial(const IMaterial* material, double thickness); - - //! Returns material - const virtual IMaterial* getMaterial() const; - - //! Returns refractive index. - virtual complex_t getRefractiveIndex() const; - - virtual void init_parameters(); - - const Layer* getDecoratedLayer() const { return mp_decorated_layer; } - - const IDecoration* getDecoration() const { return mp_decoration; } - - virtual bool hasDWBASimulation() const { return true; } - - virtual LayerDecoratorDWBASimulation *createDWBASimulation() const - { return new LayerDecoratorDWBASimulation(this); } - - virtual DiffuseDWBASimulation *createDiffuseDWBASimulation() const; - - virtual double getTotalParticleSurfaceDensity() const; - - protected: - //! Constructs a new object by cloning _other_'s layer and decoration. - LayerDecorator(const LayerDecorator& other); - - Layer *mp_decorated_layer; - IDecoration *mp_decoration; - - private: - void print(std::ostream& ostr) const; -}; - - -inline LayerDecorator *LayerDecorator::clone() const -{ - return new LayerDecorator(*this); -} - -inline void LayerDecorator::setThickness(double thickness) -{ - mp_decorated_layer->setThickness(thickness); -} - -inline double LayerDecorator::getThickness() const -{ - return mp_decorated_layer->getThickness(); -} - -inline void LayerDecorator::setMaterial(const IMaterial* material) -{ - mp_decorated_layer->setMaterial(material); -} - -inline void LayerDecorator::setMaterial(const IMaterial* material, double thickness) -{ - mp_decorated_layer->setMaterial(material, thickness); -} - -inline const IMaterial* LayerDecorator::getMaterial() const -{ - return mp_decorated_layer->getMaterial(); -} - -inline complex_t LayerDecorator::getRefractiveIndex() const -{ - return mp_decorated_layer->getRefractiveIndex(); -} - -inline double LayerDecorator::getTotalParticleSurfaceDensity() const -{ - if (mp_decoration) { - return mp_decoration->getTotalParticleSurfaceDensity(); - } - return 0.; -} - - -#endif /* LAYERDECORATOR_H_ */ - - diff --git a/Core/Samples/inc/Samples.h b/Core/Samples/inc/Samples.h index 21ebbbf3376..24323147de9 100644 --- a/Core/Samples/inc/Samples.h +++ b/Core/Samples/inc/Samples.h @@ -19,7 +19,6 @@ #include "Crystal.h" #include "MaterialManager.h" #include "Layer.h" -#include "LayerDecorator.h" #include "LayerInterface.h" #include "MultiLayer.h" #include "Particle.h" diff --git a/Core/Samples/src/Layer.cpp b/Core/Samples/src/Layer.cpp index f78b17c104d..97951050d2d 100644 --- a/Core/Samples/src/Layer.cpp +++ b/Core/Samples/src/Layer.cpp @@ -18,8 +18,19 @@ #include <iomanip> +Layer::Layer() + : mp_material(0) + , mp_decoration(0) + , m_thickness(0) +{ + setName("Layer"); + init_parameters(); +} + + Layer::Layer(const IMaterial* material, double thickness) - : m_thickness(thickness) + : mp_decoration(0) + , m_thickness(thickness) { setName("Layer"); setMaterial(material); @@ -30,12 +41,20 @@ Layer::Layer(const IMaterial* material, double thickness) Layer::Layer(const Layer& other) : ICompositeSample() { mp_material = other.mp_material; + mp_decoration = 0; + if(other.getDecoration()) mp_decoration = other.getDecoration()->clone(); m_thickness = other.m_thickness; setName(other.getName()); init_parameters(); } +Layer::~Layer() +{ + delete mp_decoration; +} + + void Layer::init_parameters() { clearParameterPool(); @@ -76,3 +95,40 @@ void Layer::print(std::ostream& ostr) const } +LayerDWBASimulation *Layer::createDWBASimulation() const +{ + if(mp_decoration) { + return new LayerDecoratorDWBASimulation(this); + } + return 0; +} + + +DiffuseDWBASimulation* Layer::createDiffuseDWBASimulation() const +{ + DiffuseDWBASimulation *p_sim = new DiffuseDWBASimulation; + size_t nbr_particles = mp_decoration->getNumberOfParticles(); + double particle_density = mp_decoration->getTotalParticleSurfaceDensity(); + for (size_t i=0; i<nbr_particles; ++i) { + const ParticleInfo *p_info = mp_decoration->getParticleInfo(i); + std::vector<DiffuseParticleInfo *> *p_diffuse_nps = + p_info->getParticle()->createDiffuseParticleInfo(*p_info); + if (p_diffuse_nps) { + for (size_t j=0; j<p_diffuse_nps->size(); ++j) { + DiffuseParticleInfo *p_diff_info = (*p_diffuse_nps)[j]; + p_diff_info->setNumberPerMeso( + particle_density * p_info->getAbundance() * + p_diff_info->getNumberPerMeso()); + p_sim->addParticleInfo((*p_diffuse_nps)[j]); + } + delete p_diffuse_nps; + break; // TODO: remove this break (this necessitates the creation of a phi-averaged mesocrystal class generating only one nanoparticle for diffuse calculations) + } + } + if (p_sim->getSize()>0) { + p_sim->setRefractiveIndex(getRefractiveIndex()); + return p_sim; + } + delete p_sim; + return 0; +} diff --git a/Core/Samples/src/LayerDecorator.cpp b/Core/Samples/src/LayerDecorator.cpp deleted file mode 100644 index 8fae10b8e63..00000000000 --- a/Core/Samples/src/LayerDecorator.cpp +++ /dev/null @@ -1,89 +0,0 @@ -// ************************************************************************** // -// -// BornAgain: simulate and fit scattering at grazing incidence -// -//! @file Samples/src/LayerDecorator.cpp -//! @brief Implements class LayerDecorator. -//! -//! @homepage http://apps.jcns.fz-juelich.de/BornAgain -//! @license GNU General Public License v3 or higher (see COPYING) -//! @copyright Forschungszentrum Jülich GmbH 2013 -//! @authors Scientific Computing Group at MLZ Garching -//! @authors C. Durniak, G. Pospelov, W. Van Herck, J. Wuttke -// -// ************************************************************************** // - -#include "LayerDecorator.h" - - -LayerDecorator::LayerDecorator(const Layer& layer, const IDecoration& decoration) - : mp_decorated_layer(layer.clone()), mp_decoration(decoration.clone()) -{ - setName("LayerDecorator"); - registerChild(mp_decorated_layer); - registerChild(mp_decoration); - init_parameters(); -} - - -LayerDecorator::LayerDecorator(const LayerDecorator& other) - : Layer(other) -{ - mp_decorated_layer = other.getDecoratedLayer()->clone(); - mp_decoration = other.getDecoration()->clone(); - setName("LayerDecorator"); - registerChild(mp_decorated_layer); - registerChild(mp_decoration); - init_parameters(); -} - - -LayerDecorator::~LayerDecorator() -{ - delete mp_decorated_layer; - delete mp_decoration; -} - - -void LayerDecorator::init_parameters() -{ - clearParameterPool(); -} - - -DiffuseDWBASimulation* LayerDecorator::createDiffuseDWBASimulation() const -{ - DiffuseDWBASimulation *p_sim = new DiffuseDWBASimulation; - size_t nbr_particles = mp_decoration->getNumberOfParticles(); - double particle_density = mp_decoration->getTotalParticleSurfaceDensity(); - for (size_t i=0; i<nbr_particles; ++i) { - const ParticleInfo *p_info = mp_decoration->getParticleInfo(i); - std::vector<DiffuseParticleInfo *> *p_diffuse_nps = - p_info->getParticle()->createDiffuseParticleInfo(*p_info); - if (p_diffuse_nps) { - for (size_t j=0; j<p_diffuse_nps->size(); ++j) { - DiffuseParticleInfo *p_diff_info = (*p_diffuse_nps)[j]; - p_diff_info->setNumberPerMeso( - particle_density * p_info->getAbundance() * - p_diff_info->getNumberPerMeso()); - p_sim->addParticleInfo((*p_diffuse_nps)[j]); - } - delete p_diffuse_nps; - break; // TODO: remove this break (this necessitates the creation of a phi-averaged mesocrystal class generating only one nanoparticle for diffuse calculations) - } - } - if (p_sim->getSize()>0) { - p_sim->setRefractiveIndex(getRefractiveIndex()); - return p_sim; - } - delete p_sim; - return 0; -} - -void LayerDecorator::print(std::ostream& ostr) const -{ - Layer::print(ostr); - ostr << "-->LayerDecorator{" << *mp_decoration << "}"; -} - - diff --git a/Core/StandardSamples/IsGISAXS01Builder.cpp b/Core/StandardSamples/IsGISAXS01Builder.cpp index f30e3d97622..1bd91710529 100644 --- a/Core/StandardSamples/IsGISAXS01Builder.cpp +++ b/Core/StandardSamples/IsGISAXS01Builder.cpp @@ -1,7 +1,6 @@ #include "IsGISAXS01Builder.h" #include "MultiLayer.h" #include "ParticleDecoration.h" -#include "LayerDecorator.h" #include "MaterialManager.h" #include "FormFactorCylinder.h" #include "FormFactorPrism3.h" @@ -56,9 +55,10 @@ ISample *IsGISAXS01Builder::buildSample() const 0.0, 1.0-m_cylinder_weight); particle_decoration.addInterferenceFunction(new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); + //LayerDecorator air_layer_decorator(air_layer, particle_decoration); + air_layer.setDecoration(particle_decoration); - multi_layer->addLayer(air_layer_decorator); + multi_layer->addLayer(air_layer); multi_layer->addLayer(substrate_layer); return multi_layer; } diff --git a/Core/StandardSamples/IsGISAXS02Builder.cpp b/Core/StandardSamples/IsGISAXS02Builder.cpp index 8a139788dc7..273bb3207a7 100644 --- a/Core/StandardSamples/IsGISAXS02Builder.cpp +++ b/Core/StandardSamples/IsGISAXS02Builder.cpp @@ -1,7 +1,6 @@ #include "IsGISAXS02Builder.h" #include "MultiLayer.h" #include "ParticleDecoration.h" -#include "LayerDecorator.h" #include "MaterialManager.h" #include "FormFactorCylinder.h" #include "FormFactorPrism3.h" @@ -74,9 +73,10 @@ ISample *IsGISAXS02Builder::buildSample() const builder.plantParticles(particle_decoration); particle_decoration.addInterferenceFunction(new InterferenceFunctionNone()); - // making layer holding all whose nano particles - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - multi_layer->addLayer(air_layer_decorator); + + air_layer.setDecoration(particle_decoration); + + multi_layer->addLayer(air_layer); return multi_layer; } diff --git a/Core/StandardSamples/IsGISAXS03Builder.cpp b/Core/StandardSamples/IsGISAXS03Builder.cpp index 524ad7b48f5..abc08aabe62 100644 --- a/Core/StandardSamples/IsGISAXS03Builder.cpp +++ b/Core/StandardSamples/IsGISAXS03Builder.cpp @@ -1,7 +1,6 @@ #include "IsGISAXS03Builder.h" #include "MultiLayer.h" #include "ParticleDecoration.h" -#include "LayerDecorator.h" #include "MaterialManager.h" #include "FormFactorCylinder.h" #include "FormFactorPrism3.h" @@ -47,8 +46,9 @@ ISample *IsGISAXS03DWBABuilder::buildSample() const ParticleDecoration particle_decoration( new Particle(n_particle, new FormFactorCylinder(m_height, m_radius))); particle_decoration.addInterferenceFunction(new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + multi_layer->addLayer(air_layer); multi_layer->addLayer(substrate_layer); return multi_layer; @@ -89,8 +89,9 @@ ISample *IsGISAXS03BABuilder::buildSample() const complex_t n_particle(1.0-6e-4, 2e-8); ParticleDecoration particle_decoration( new Particle(n_particle, new FormFactorCylinder(m_height, m_radius))); particle_decoration.addInterferenceFunction(new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - multi_layer->addLayer(air_layer_decorator); + + air_layer.setDecoration(particle_decoration); + multi_layer->addLayer(air_layer); return multi_layer; } @@ -141,9 +142,10 @@ ISample *IsGISAXS03BASizeBuilder::buildSample() const builder.setPrototype(nano_particle,"/Particle/FormFactorCylinder/radius", par); builder.plantParticles(particle_decoration); particle_decoration.addInterferenceFunction(new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + multi_layer->addLayer(air_layer); return multi_layer; } diff --git a/Core/StandardSamples/IsGISAXS04Builder.cpp b/Core/StandardSamples/IsGISAXS04Builder.cpp index e72f88d1644..b0905b93e79 100644 --- a/Core/StandardSamples/IsGISAXS04Builder.cpp +++ b/Core/StandardSamples/IsGISAXS04Builder.cpp @@ -1,7 +1,6 @@ #include "IsGISAXS04Builder.h" #include "MultiLayer.h" #include "ParticleDecoration.h" -#include "LayerDecorator.h" #include "MaterialManager.h" #include "InterferenceFunction1DParaCrystal.h" #include "InterferenceFunction2DParaCrystal.h" @@ -46,9 +45,10 @@ ISample *IsGISAXS04Para1DBuilder::buildSample() const IInterferenceFunction *p_interference_function = new InterferenceFunction1DParaCrystal(m_corr_peak_distance,m_corr_width, m_corr_length); ParticleDecoration particle_decoration( new Particle(n_particle, new FormFactorCylinder(m_cylinder_height, m_cylinder_radius))); particle_decoration.addInterferenceFunction(p_interference_function); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + multi_layer->addLayer(air_layer); multi_layer->addLayer(substrate_layer); return multi_layer; @@ -101,9 +101,10 @@ ISample *IsGISAXS04Para2DBuilder::buildSample() const p_interference_function->setProbabilityDistributions(pdf, pdf); ParticleDecoration particle_decoration( new Particle(n_particle, new FormFactorCylinder(m_cylinder_height, m_cylinder_radius))); particle_decoration.addInterferenceFunction(p_interference_function); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + multi_layer->addLayer(air_layer); multi_layer->addLayer(substrate_layer); return multi_layer; diff --git a/Core/StandardSamples/IsGISAXS06Builder.cpp b/Core/StandardSamples/IsGISAXS06Builder.cpp index 4fc51f8676b..93bc2e8b544 100644 --- a/Core/StandardSamples/IsGISAXS06Builder.cpp +++ b/Core/StandardSamples/IsGISAXS06Builder.cpp @@ -1,7 +1,6 @@ #include "IsGISAXS06Builder.h" #include "MultiLayer.h" #include "ParticleDecoration.h" -#include "LayerDecorator.h" #include "FormFactorCylinder.h" #include "Simulation.h" #include "Units.h" @@ -58,9 +57,10 @@ ISample *IsGISAXS06Lattice1Builder::buildSample() const particle_decoration.addParticleInfo(particle_info); particle_decoration.addInterferenceFunction(p_interference_function); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + multi_layer->addLayer(air_layer); multi_layer->addLayer(substrate_layer); return multi_layer; @@ -113,9 +113,10 @@ ISample *IsGISAXS06Lattice2Builder::buildSample() const particle_decoration.addParticleInfo(particle_info); particle_decoration.addInterferenceFunction(p_interference_function); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + multi_layer->addLayer(air_layer); multi_layer->addLayer(substrate_layer); return multi_layer; @@ -166,9 +167,10 @@ ISample *IsGISAXS06Lattice3Builder::buildSample() const new Particle(n_particle, ff_cyl.clone()), position, 1.0); particle_decoration.addParticleInfo(particle_info); particle_decoration.addInterferenceFunction(p_interference_function); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + multi_layer->addLayer(air_layer); multi_layer->addLayer(substrate_layer); return multi_layer; @@ -228,9 +230,10 @@ ISample *IsGISAXS06Lattice4Builder::buildSample() const particle_decoration.addParticleInfo(particle_info); particle_decoration.addInterferenceFunction(p_interference_function); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - p_multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + p_multi_layer->addLayer(air_layer); p_multi_layer->addLayer(substrate_layer); return p_multi_layer; diff --git a/Core/StandardSamples/IsGISAXS09Builder.cpp b/Core/StandardSamples/IsGISAXS09Builder.cpp index 961615b36fa..2c12bb0e520 100644 --- a/Core/StandardSamples/IsGISAXS09Builder.cpp +++ b/Core/StandardSamples/IsGISAXS09Builder.cpp @@ -1,7 +1,6 @@ #include "IsGISAXS09Builder.h" #include "FormFactorPyramid.h" #include "InterferenceFunctionNone.h" -#include "LayerDecorator.h" #include "MaterialManager.h" #include "MultiLayer.h" #include "ParticleDecoration.h" @@ -50,8 +49,9 @@ ISample *IsGISAXS09Builder::buildSample() const particle_decoration.addInterferenceFunction(new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + multi_layer->addLayer(air_layer); multi_layer->addLayer(substrate_layer); return multi_layer; @@ -106,8 +106,9 @@ ISample *IsGISAXS09RotatedBuilder::buildSample() const particle_decoration.addParticle(pyramid, transform); particle_decoration.addInterferenceFunction(new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - multi_layer->addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + multi_layer->addLayer(air_layer); multi_layer->addLayer(substrate_layer); diff --git a/Core/Tools/inc/SamplePrintVisitor.h b/Core/Tools/inc/SamplePrintVisitor.h index 77029abf5bc..f4388bafa4c 100644 --- a/Core/Tools/inc/SamplePrintVisitor.h +++ b/Core/Tools/inc/SamplePrintVisitor.h @@ -13,7 +13,6 @@ public: void visit(const ISample *sample); void visit(const MultiLayer *sample); void visit(const Layer *sample); - void visit(const LayerDecorator *sample); void visit(const LayerInterface *sample); void visit(const ParticleDecoration *sample); void visit(const ParticleInfo *sample); diff --git a/Core/Tools/src/SamplePrintVisitor.cpp b/Core/Tools/src/SamplePrintVisitor.cpp index 4edecd8f629..b2b5e6130ce 100644 --- a/Core/Tools/src/SamplePrintVisitor.cpp +++ b/Core/Tools/src/SamplePrintVisitor.cpp @@ -2,7 +2,6 @@ #include "ISample.h" #include "FormFactors.h" #include "MultiLayer.h" -#include "LayerDecorator.h" #include "ParticleDecoration.h" #include "Particle.h" #include "InterferenceFunction1DParaCrystal.h" @@ -52,6 +51,7 @@ void SamplePrintVisitor::visit(const Layer *sample) } +/* void SamplePrintVisitor::visit(const LayerDecorator *sample) { assert(sample); @@ -69,7 +69,7 @@ void SamplePrintVisitor::visit(const LayerDecorator *sample) goBack(); } - +*/ void SamplePrintVisitor::visit(const LayerInterface *sample) { diff --git a/Doc/UserManual/UserManual.pdf b/Doc/UserManual/UserManual.pdf index 0eed5704e5fbbb3103926630873ffd6085647c4f..687115dafc8a2ab2fab10abd1df8aac576a24dcf 100644 GIT binary patch delta 23997 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 b=`%{t5}7^pbvObI8aE$0BcrUk9QuC%`b`yl delta 23982 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 b^b6v31Vai$6bFkAU62ohnOXUr3dVl{z*G3* diff --git a/Doc/UserManual/UserManual.tex b/Doc/UserManual/UserManual.tex index 4817f7389fb..9de3acd59f1 100644 --- a/Doc/UserManual/UserManual.tex +++ b/Doc/UserManual/UserManual.tex @@ -127,8 +127,6 @@ BornAgain - simulating and fitting X-ray and neutron scattering at grazing incid \author{Scientific Computing Group at FRM-II} - - \usepackage{eso-pic} \newcommand\BackgroundPic{% \put(0,0){% diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS06/IsGISAXS06.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS06/IsGISAXS06.cpp index f73596b9616..2d3a7bc005d 100644 --- a/Tests/FunctionalTests/TestCore/IsGISAXS06/IsGISAXS06.cpp +++ b/Tests/FunctionalTests/TestCore/IsGISAXS06/IsGISAXS06.cpp @@ -1,7 +1,6 @@ #include "IsGISAXS06.h" #include "MultiLayer.h" #include "ParticleDecoration.h" -#include "LayerDecorator.h" #include "FormFactorCylinder.h" #include "Simulation.h" #include "Units.h" diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS07/IsGISAXS07.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS07/IsGISAXS07.cpp index 926c2c723a7..70134804473 100644 --- a/Tests/FunctionalTests/TestCore/IsGISAXS07/IsGISAXS07.cpp +++ b/Tests/FunctionalTests/TestCore/IsGISAXS07/IsGISAXS07.cpp @@ -4,7 +4,6 @@ #include "MaterialManager.h" #include "FormFactorBox.h" #include "ParticleDecoration.h" -#include "LayerDecorator.h" #include "Simulation.h" #include "OutputDataIOFactory.h" #include "PositionParticleInfo.h" @@ -91,8 +90,8 @@ void FunctionalTests::IsGISAXS07::run() PositionParticleInfo particle_info10(new Particle(n_particle, ff10), m10, pos10, 0.5); particle_decoration.addParticleInfo(particle_info10); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - multi_layer.addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + multi_layer.addLayer(air_layer); // --------------------- // building simulation diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS08/IsGISAXS08.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS08/IsGISAXS08.cpp index e285ff511b4..a4909f77e47 100644 --- a/Tests/FunctionalTests/TestCore/IsGISAXS08/IsGISAXS08.cpp +++ b/Tests/FunctionalTests/TestCore/IsGISAXS08/IsGISAXS08.cpp @@ -1,7 +1,6 @@ #include "IsGISAXS08.h" #include "MultiLayer.h" #include "ParticleDecoration.h" -#include "LayerDecorator.h" #include "ParticleBuilder.h" #include "InterferenceFunction2DParaCrystal.h" #include "FormFactorCylinder.h" @@ -54,9 +53,10 @@ void FunctionalTests::IsGISAXS08::run2DDL() ParticleDecoration particle_decoration( new Particle(n_particle, new FormFactorCylinder(5*Units::nanometer, 5*Units::nanometer))); particle_decoration.addInterferenceFunction(p_interference_function); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - multi_layer.addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + multi_layer.addLayer(air_layer); multi_layer.addLayer(substrate_layer); // building simulation @@ -99,9 +99,10 @@ void FunctionalTests::IsGISAXS08::run2DDL2() ParticleDecoration particle_decoration( new Particle(n_particle, new FormFactorCylinder(5*Units::nanometer, 5*Units::nanometer))); particle_decoration.addInterferenceFunction(p_interference_function); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - multi_layer.addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + multi_layer.addLayer(air_layer); multi_layer.addLayer(substrate_layer); // building simulation diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS10/IsGISAXS10.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS10/IsGISAXS10.cpp index 461fea1c6e3..49832bade97 100644 --- a/Tests/FunctionalTests/TestCore/IsGISAXS10/IsGISAXS10.cpp +++ b/Tests/FunctionalTests/TestCore/IsGISAXS10/IsGISAXS10.cpp @@ -1,7 +1,6 @@ #include "IsGISAXS10.h" #include "FormFactorCylinder.h" #include "InterferenceFunction1DParaCrystal.h" -#include "LayerDecorator.h" #include "MaterialManager.h" #include "MultiLayer.h" #include "OutputDataIOFactory.h" @@ -42,9 +41,9 @@ void FunctionalTests::IsGISAXS10::run() new FormFactorCylinder(5*Units::nanometer, 5*Units::nanometer))); particle_decoration.addInterferenceFunction(p_interference_function); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); + air_layer.setDecoration(particle_decoration); - multi_layer.addLayer(air_layer_decorator); + multi_layer.addLayer(air_layer); multi_layer.addLayer(substrate_layer); // building simulation diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS11/IsGISAXS11.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS11/IsGISAXS11.cpp index 6eacd5a0058..497f8049457 100644 --- a/Tests/FunctionalTests/TestCore/IsGISAXS11/IsGISAXS11.cpp +++ b/Tests/FunctionalTests/TestCore/IsGISAXS11/IsGISAXS11.cpp @@ -1,7 +1,6 @@ #include "IsGISAXS11.h" #include "FormFactorParallelepiped.h" #include "InterferenceFunctionNone.h" -#include "LayerDecorator.h" #include "MaterialManager.h" #include "MultiLayer.h" #include "OutputDataIOFactory.h" @@ -44,9 +43,10 @@ void FunctionalTests::IsGISAXS11::run() ParticleCoreShell particle(shell_particle, core_particle, core_position); ParticleDecoration particle_decoration(particle.clone()); particle_decoration.addInterferenceFunction(new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - multi_layer.addLayer(air_layer_decorator); + air_layer.setDecoration(particle_decoration); + + multi_layer.addLayer(air_layer); // building simulation Simulation simulation; diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS15/IsGISAXS15.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS15/IsGISAXS15.cpp index 67adc58d08e..6616cccc040 100644 --- a/Tests/FunctionalTests/TestCore/IsGISAXS15/IsGISAXS15.cpp +++ b/Tests/FunctionalTests/TestCore/IsGISAXS15/IsGISAXS15.cpp @@ -1,7 +1,6 @@ #include "IsGISAXS15.h" #include "MultiLayer.h" #include "ParticleDecoration.h" -#include "LayerDecorator.h" #include "ParticleBuilder.h" #include "InterferenceFunction1DParaCrystal.h" #include "FormFactorCylinder.h" @@ -52,8 +51,10 @@ void FunctionalTests::IsGISAXS15::run() p_parameters->fixRatioBetweenParameters("height", "radius", 1.0); particle_decoration.addInterferenceFunction(p_interference_function); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - multi_layer.addLayer(air_layer_decorator); + + air_layer.setDecoration(particle_decoration); + + multi_layer.addLayer(air_layer); // building simulation Simulation simulation; diff --git a/Tests/FunctionalTests/TestCore/MesoCrystal1/SampleBuilder.cpp b/Tests/FunctionalTests/TestCore/MesoCrystal1/SampleBuilder.cpp index 483efcba3b9..8486a43d6ad 100644 --- a/Tests/FunctionalTests/TestCore/MesoCrystal1/SampleBuilder.cpp +++ b/Tests/FunctionalTests/TestCore/MesoCrystal1/SampleBuilder.cpp @@ -6,7 +6,6 @@ #include "Crystal.h" #include "MesoCrystal.h" #include "ParticleDecoration.h" -#include "LayerDecorator.h" #include "Units.h" #include "MaterialManager.h" #include "FormFactorSphereGaussianRadius.h" @@ -86,12 +85,13 @@ ISample* SampleBuilder::buildSample() const particle_decoration.setTotalParticleSurfaceDensity(surface_density); particle_decoration.addInterferenceFunction(p_interference_funtion); - LayerDecorator avg_layer_decorator(avg_layer, particle_decoration); + + avg_layer.setDecoration(particle_decoration); LayerRoughness roughness(m_roughness, 0.3, 500.0*Units::nanometer); p_multi_layer->addLayer(air_layer); - p_multi_layer->addLayer(avg_layer_decorator); + p_multi_layer->addLayer(avg_layer); p_multi_layer->addLayerWithTopRoughness(substrate_layer, roughness); return p_multi_layer; diff --git a/Tests/FunctionalTests/TestFit/TestFit01/TestFit01.cpp b/Tests/FunctionalTests/TestFit/TestFit01/TestFit01.cpp index 0bf98b94ec6..b4c456b49f1 100644 --- a/Tests/FunctionalTests/TestFit/TestFit01/TestFit01.cpp +++ b/Tests/FunctionalTests/TestFit/TestFit01/TestFit01.cpp @@ -2,7 +2,6 @@ #include "MaterialManager.h" #include "MessageService.h" #include "MultiLayer.h" -#include "LayerDecorator.h" #include "ParticleDecoration.h" #include "InterferenceFunctions.h" #include "FormFactorCylinder.h" @@ -117,8 +116,10 @@ ISample *TestFit01::buildSample() complex_t n_particle(1.0-6e-4, 2e-8); ParticleDecoration particle_decoration( new Particle(n_particle, new FormFactorCylinder(m_cylinder_height, m_cylinder_radius))); particle_decoration.addInterferenceFunction(new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - multi_layer->addLayer(air_layer_decorator); + + air_layer.setDecoration(particle_decoration); + + multi_layer->addLayer(air_layer); return multi_layer; } diff --git a/Tests/FunctionalTests/TestFit/TestFit02/SampleBuilder.cpp b/Tests/FunctionalTests/TestFit/TestFit02/SampleBuilder.cpp index 1317e42b505..c996ecea447 100644 --- a/Tests/FunctionalTests/TestFit/TestFit02/SampleBuilder.cpp +++ b/Tests/FunctionalTests/TestFit/TestFit02/SampleBuilder.cpp @@ -1,6 +1,5 @@ #include "SampleBuilder.h" #include "MultiLayer.h" -#include "LayerDecorator.h" #include "ParticleDecoration.h" #include "InterferenceFunctions.h" #include "FormFactorCylinder.h" @@ -54,8 +53,10 @@ ISample *SampleBuilder::buildSample() const particle_decoration.addParticle(new Particle(n_particle, new FormFactorCylinder(m_cylinder_height, m_cylinder_radius)),0.0, m_cylinder_ratio); particle_decoration.addParticle(new Particle(n_particle, new FormFactorPrism3(m_prism3_height, m_prism3_half_side)), 0.0, 1.0 - m_cylinder_ratio); particle_decoration.addInterferenceFunction(new InterferenceFunctionNone()); - LayerDecorator air_layer_decorator(air_layer, particle_decoration); - multi_layer->addLayer(air_layer_decorator); + + air_layer.setDecoration(particle_decoration); + + multi_layer->addLayer(air_layer); multi_layer->addLayer(substrate_layer); return multi_layer; } diff --git a/dev-tools/python-bindings/MakePyCore.py b/dev-tools/python-bindings/MakePyCore.py index a1f51c606f4..f7b8b5b2a58 100644 --- a/dev-tools/python-bindings/MakePyCore.py +++ b/dev-tools/python-bindings/MakePyCore.py @@ -85,7 +85,7 @@ include_classes = [ "Lattice2DIFParameters", "LatticeBasis", "Layer", -"LayerDecorator", +#"LayerDecorator", "LayerInterface", "LayerRoughness", "MaterialManager", diff --git a/shared.pri b/shared.pri index b7e1937aa87..8e044455a20 100644 --- a/shared.pri +++ b/shared.pri @@ -126,7 +126,8 @@ win32 { isEmpty(BOOST_LIB): message("Can't find" $${BOOST_LIBFILES} "in" $${BOOST_LIB_LOCATIONS}) INCLUDEPATH *= $${BOOST_INCLUDE} LIBS *= -L$${BOOST_LIB} -LIBS += -lboost_program_options -lboost_iostreams -lboost_system -lboost_filesystem -lboost_regex -lboost_thread -lz +LIBS += -lboost_program_options -lboost_iostreams -lboost_system -lboost_filesystem -lboost_regex -lboost_thread +#LIBS += -lboost_program_options -lboost_iostreams -lboost_system -lboost_filesystem -lboost_regex -lboost_thread -lz # checking special case when system doesn't have libboost_thread library but have libboost_thread-mt !win32 { NumberOfSuchFiles=$$system(ls $${BOOST_LIB}/libboost_thread-mt* 2> /dev/null | wc -l) -- GitLab