Skip to content
Snippets Groups Projects
Commit 0bfa1ee4 authored by Yurov, Dmitry's avatar Yurov, Dmitry
Browse files

SpecularNewFitTest: Duplication of SpecularFitTest from FitSuite

Redmine: #2127
parent 5a3d27b7
No related branches found
No related tags found
No related merge requests found
......@@ -2,6 +2,7 @@ set(test TestFitObjective)
set(test_cases
MigradCylindersInBA
SpecularNewFitTest
)
include_directories(${RootMinimizers_INCLUDE_DIRS})
......
......@@ -49,3 +49,6 @@ AdjustMinimizerFit::AdjustMinimizerFit()
MultiPatternFit::MultiPatternFit()
: FitObjectiveTest("GSLLMA", "", "MultiPatternPlan") {}
SpecularNewFitTest::SpecularNewFitTest()
: FitObjectiveTest("Minuit2", "Migrad", "SpecularPlan") {}
......@@ -82,5 +82,10 @@ public:
};
class SpecularNewFitTest : public FitObjectiveTest
{
public:
SpecularNewFitTest();
};
#endif // MINIMIZERTESTCASES_H
......@@ -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");
}
......@@ -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;
}
......@@ -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
......@@ -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>);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment