From 0bfa1ee434722c94505ff0d439a07c8ca5e50f48 Mon Sep 17 00:00:00 2001 From: Dmitry Yurov <d.yurov@fz-juelich.de> Date: Mon, 30 Jul 2018 17:54:52 +0200 Subject: [PATCH] SpecularNewFitTest: Duplication of SpecularFitTest from FitSuite Redmine: #2127 --- .../Fit/FitObjective/CMakeLists.txt | 1 + .../FitObjective/FitObjectiveTestCases.cpp | 3 ++ .../Fit/FitObjective/FitObjectiveTestCases.h | 5 +++ .../FitObjective/FitObjectiveTestFactory.cpp | 2 + .../Fit/FitObjective/FitPlanCases.cpp | 38 +++++++++++++++++++ .../Fit/FitObjective/FitPlanCases.h | 10 +++++ .../Fit/FitObjective/FitPlanFactory.cpp | 1 + 7 files changed, 60 insertions(+) diff --git a/Tests/Functional/Fit/FitObjective/CMakeLists.txt b/Tests/Functional/Fit/FitObjective/CMakeLists.txt index 1977ee07dda..c7426a71592 100644 --- a/Tests/Functional/Fit/FitObjective/CMakeLists.txt +++ b/Tests/Functional/Fit/FitObjective/CMakeLists.txt @@ -2,6 +2,7 @@ set(test TestFitObjective) set(test_cases MigradCylindersInBA + SpecularNewFitTest ) include_directories(${RootMinimizers_INCLUDE_DIRS}) diff --git a/Tests/Functional/Fit/FitObjective/FitObjectiveTestCases.cpp b/Tests/Functional/Fit/FitObjective/FitObjectiveTestCases.cpp index 5ca6b7ed1d9..2c76458b29b 100644 --- a/Tests/Functional/Fit/FitObjective/FitObjectiveTestCases.cpp +++ b/Tests/Functional/Fit/FitObjective/FitObjectiveTestCases.cpp @@ -49,3 +49,6 @@ AdjustMinimizerFit::AdjustMinimizerFit() MultiPatternFit::MultiPatternFit() : FitObjectiveTest("GSLLMA", "", "MultiPatternPlan") {} + +SpecularNewFitTest::SpecularNewFitTest() + : FitObjectiveTest("Minuit2", "Migrad", "SpecularPlan") {} diff --git a/Tests/Functional/Fit/FitObjective/FitObjectiveTestCases.h b/Tests/Functional/Fit/FitObjective/FitObjectiveTestCases.h index 760bd9b6430..900aa533b11 100644 --- a/Tests/Functional/Fit/FitObjective/FitObjectiveTestCases.h +++ b/Tests/Functional/Fit/FitObjective/FitObjectiveTestCases.h @@ -82,5 +82,10 @@ public: }; +class SpecularNewFitTest : public FitObjectiveTest +{ +public: + SpecularNewFitTest(); +}; #endif // MINIMIZERTESTCASES_H diff --git a/Tests/Functional/Fit/FitObjective/FitObjectiveTestFactory.cpp b/Tests/Functional/Fit/FitObjective/FitObjectiveTestFactory.cpp index e8f6f3dd6e7..f0699e6447a 100644 --- a/Tests/Functional/Fit/FitObjective/FitObjectiveTestFactory.cpp +++ b/Tests/Functional/Fit/FitObjective/FitObjectiveTestFactory.cpp @@ -37,4 +37,6 @@ FitObjectiveTestFactory::FitObjectiveTestFactory() "Minuit + Genetic, CylindersInBA"); registerItem("MultiPatternFit", create_new<MultiPatternFit>, "Minuit, MultiPatternSample"); + registerItem("SpecularNewFitTest", create_new<SpecularNewFitTest>, + "Minuit, Basic specular fitting"); } diff --git a/Tests/Functional/Fit/FitObjective/FitPlanCases.cpp b/Tests/Functional/Fit/FitObjective/FitPlanCases.cpp index 2517e0fef69..69afc40eca5 100644 --- a/Tests/Functional/Fit/FitObjective/FitPlanCases.cpp +++ b/Tests/Functional/Fit/FitObjective/FitPlanCases.cpp @@ -126,3 +126,41 @@ std::unique_ptr<MultiLayer> MultiPatternPlan::createMultiLayer(const Parameters& result->addLayer(substrate_layer); return result; } + +// ---------------------------------------------------------------------------- + +SpecularPlan::SpecularPlan() + : FitPlan("SpecularPlan", /*residual_based = */ true) +{ + setSimulationName("BasicSpecular"); + addParameter(Parameter("thickness", 5.0 * nm, AttLimits::limited(1.0 * nm, 7.0 * nm), 0.1), + 3.0 * nm); +} + +SpecularPlan::~SpecularPlan() = default; + +std::unique_ptr<MultiLayer> SpecularPlan::createMultiLayer(const Fit::Parameters& params) const +{ + const size_t number_of_layers = 10; + double thick_ni = 7.0 * nm; + double thick_ti = params["thickness"].value(); + + Material vacuum_material = MaterialBySLD(); + Material substrate_material = MaterialBySLD("Si_substrate", 2.0704e-06, 2.3726e-11); + Material ni_material = MaterialBySLD("Ni", -1.9493e-06, 9.6013e-10); + Material ti_material = MaterialBySLD("Ti", 9.4245e-06, 1.1423e-09); + + Layer vacuum_layer(vacuum_material, 0); + Layer ni_layer(ni_material, thick_ni); + Layer ti_layer(ti_material, thick_ti); + Layer substrate_layer(substrate_material, 0); + + std::unique_ptr<MultiLayer> multi_layer(new MultiLayer()); + multi_layer->addLayer(vacuum_layer); + for (size_t i = 0; i < number_of_layers; ++i) { + multi_layer->addLayer(ti_layer); + multi_layer->addLayer(ni_layer); + } + multi_layer->addLayer(substrate_layer); + return multi_layer; +} diff --git a/Tests/Functional/Fit/FitObjective/FitPlanCases.h b/Tests/Functional/Fit/FitObjective/FitPlanCases.h index b28825e704b..b361cdd069e 100644 --- a/Tests/Functional/Fit/FitObjective/FitPlanCases.h +++ b/Tests/Functional/Fit/FitObjective/FitPlanCases.h @@ -69,6 +69,16 @@ protected: std::unique_ptr<MultiLayer> createMultiLayer(const Fit::Parameters& params) const; }; +class SpecularPlan : public FitPlan +{ +public: + SpecularPlan(); + ~SpecularPlan() override; + +protected: + std::unique_ptr<MultiLayer> createMultiLayer(const Fit::Parameters& params) const override; +}; + #endif // FITPLANCASES_H diff --git a/Tests/Functional/Fit/FitObjective/FitPlanFactory.cpp b/Tests/Functional/Fit/FitObjective/FitPlanFactory.cpp index 9bf7042c272..e53a65c5dd4 100644 --- a/Tests/Functional/Fit/FitObjective/FitPlanFactory.cpp +++ b/Tests/Functional/Fit/FitObjective/FitPlanFactory.cpp @@ -24,4 +24,5 @@ FitPlanFactory::FitPlanFactory() registerItem("RectDetPlan", create_new<RectDetPlan>); registerItem("AdjustMinimizerPlan", create_new<AdjustMinimizerPlan>); registerItem("MultiPatternPlan", create_new<MultiPatternPlan>); + registerItem("SpecularPlan", create_new<SpecularPlan>); } -- GitLab