Skip to content
Snippets Groups Projects
Commit 47d216a5 authored by Wuttke, Joachim's avatar Wuttke, Joachim
Browse files

inline fct

parent b492967a
No related branches found
No related tags found
1 merge request!1301scan resolutions now always set without explicit reference to class ScanResolution
......@@ -71,27 +71,6 @@ void addBackgroundToSimulation(const InstrumentItem& item, ISimulation& simulati
simulation.setBackground(*background);
}
//! Returns distribution and width.
std::pair<std::unique_ptr<IRangedDistribution>, double>
resolutionDistrib(const BeamDistributionItem* item)
{
if (!item)
return {std::unique_ptr<IRangedDistribution>{}, 0};
const auto* distr_item = dynamic_cast<const SymmetricResolutionItem*>(item->distributionItem());
if (!distr_item)
return {std::unique_ptr<IRangedDistribution>{}, 0};
const double scale = item->scaleFactor();
std::unique_ptr<IRangedDistribution> ranged_distr =
distr_item->createIRangedDistribution(scale);
if (!ranged_distr)
return {std::unique_ptr<IRangedDistribution>{}, 0};
const double deviation = distr_item->deviation(scale);
return {std::move(ranged_distr), deviation};
}
void setSimulationOptions(ISimulation* simulation, const SimulationOptionsItem& item)
{
simulation->options().setNumberOfThreads(item.numberOfThreads());
......@@ -137,15 +116,25 @@ SpecularSimulation* createSpecularSimulation(std::unique_ptr<MultiLayer> sample,
AlphaScan scan(beam_item->wavelength(), *axis_item->createAxis(Units::deg));
scan.setFootprintFactor(footprint_item->createFootprint().get());
{
auto [distr, width] = resolutionDistrib(beam_item->wavelengthItem());
if (distr)
scan.setAbsoluteWavelengthResolution(*distr, width);
if (const auto it = beam_item->wavelengthItem()) {
if (const auto* distr_item =
dynamic_cast<const SymmetricResolutionItem*>(it->distributionItem())) {
const double scale = it->scaleFactor();
if (std::unique_ptr<IRangedDistribution> distr =
distr_item->createIRangedDistribution(scale))
scan.setAbsoluteWavelengthResolution(*distr, distr_item->deviation(scale));
}
}
{
auto [distr, width] = resolutionDistrib(beam_item->inclinationAngleItem());
if (distr)
scan.setAbsoluteAngularResolution(*distr, width);
if (const auto it = beam_item->inclinationAngleItem()) {
if (const auto* distr_item =
dynamic_cast<const SymmetricResolutionItem*>(it->distributionItem())) {
const double scale = it->scaleFactor();
if (std::unique_ptr<IRangedDistribution> distr =
distr_item->createIRangedDistribution(scale))
scan.setAbsoluteAngularResolution(*distr, distr_item->deviation(scale));
}
}
auto* result = new SpecularSimulation(scan, *sample);
......
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