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

Switch to the new beam divergence machinery in the GUI

parent 7fb89508
No related branches found
No related tags found
No related merge requests found
...@@ -158,12 +158,11 @@ createSpecularSimulation(std::unique_ptr<MultiLayer> P_multilayer, ...@@ -158,12 +158,11 @@ createSpecularSimulation(std::unique_ptr<MultiLayer> P_multilayer,
AngularSpecScan scan(beam_item->getWavelength(), *axis_item->createAxis(Units::degree)); AngularSpecScan scan(beam_item->getWavelength(), *axis_item->createAxis(Units::degree));
scan.setFootprintFactor(footprint->createFootprint().get()); scan.setFootprintFactor(footprint->createFootprint().get());
TransformToDomain::addBeamDivergencesToScan(*beam_item, scan);
specular_simulation->setBeamIntensity(beam_item->getIntensity()); specular_simulation->setBeamIntensity(beam_item->getIntensity());
specular_simulation->setScan(scan); specular_simulation->setScan(scan);
TransformToDomain::addDistributionParametersToSimulation(*beam_item,
*specular_simulation.get());
// Simulation options // Simulation options
if (options_item) if (options_item)
TransformToDomain::setSimulationOptions(specular_simulation.get(), *options_item); TransformToDomain::setSimulationOptions(specular_simulation.get(), *options_item);
......
...@@ -32,7 +32,7 @@ namespace DomainSimulationBuilder ...@@ -32,7 +32,7 @@ namespace DomainSimulationBuilder
BA_CORE_API_ std::unique_ptr<Simulation> createSimulation(const MultiLayerItem* sampleItem, BA_CORE_API_ std::unique_ptr<Simulation> createSimulation(const MultiLayerItem* sampleItem,
const InstrumentItem* instrumentItem, const InstrumentItem* instrumentItem,
const SimulationOptionsItem* optionsItem = 0); const SimulationOptionsItem* optionsItem = nullptr);
}; };
#endif // DOMAINSIMULATIONBUILDER_H #endif // DOMAINSIMULATIONBUILDER_H
...@@ -45,11 +45,13 @@ ...@@ -45,11 +45,13 @@
#include "ParticleDistributionItem.h" #include "ParticleDistributionItem.h"
#include "ParticleItem.h" #include "ParticleItem.h"
#include "ParticleLayoutItem.h" #include "ParticleLayoutItem.h"
#include "RangedDistributions.h"
#include "RotationItems.h" #include "RotationItems.h"
#include "ScanResolution.h"
#include "SessionItemUtils.h" #include "SessionItemUtils.h"
#include "SimulationOptionsItem.h" #include "SimulationOptionsItem.h"
#include "AngularSpecScan.h"
#include "SpecularBeamInclinationItem.h" #include "SpecularBeamInclinationItem.h"
#include "SpecularSimulation.h"
#include "TransformationItem.h" #include "TransformationItem.h"
#include "Units.h" #include "Units.h"
#include "VectorItem.h" #include "VectorItem.h"
...@@ -61,6 +63,8 @@ namespace ...@@ -61,6 +63,8 @@ namespace
template <class T> template <class T>
void setParameterDistributionToSimulation(const std::string& parameter_name, void setParameterDistributionToSimulation(const std::string& parameter_name,
const SessionItem* item, Simulation& simulation); const SessionItem* item, Simulation& simulation);
std::unique_ptr<ScanResolution> createScanResolution(const SessionItem* item);
} }
std::unique_ptr<Material> std::unique_ptr<Material>
...@@ -166,25 +170,22 @@ void TransformToDomain::addDistributionParametersToSimulation(const SessionItem& ...@@ -166,25 +170,22 @@ void TransformToDomain::addDistributionParametersToSimulation(const SessionItem&
BornAgain::Azimuth, beam_item.getItem(BeamItem::P_AZIMUTHAL_ANGLE), simulation); BornAgain::Azimuth, beam_item.getItem(BeamItem::P_AZIMUTHAL_ANGLE), simulation);
} }
void TransformToDomain::addDistributionParametersToSimulation(const SessionItem& beam_item, void TransformToDomain::addBeamDivergencesToScan(const SessionItem& beam_item,
SpecularSimulation& simulation) AngularSpecScan& scan)
{ {
if (beam_item.modelType() != Constants::SpecularBeamType) { if (beam_item.modelType() != Constants::SpecularBeamType) {
Q_ASSERT(beam_item.modelType() == Constants::SpecularBeamType); Q_ASSERT(beam_item.modelType() == Constants::SpecularBeamType);
return; return;
} }
setParameterDistributionToSimulation<BeamWavelengthItem>( auto resolution = createScanResolution(beam_item.getItem(SpecularBeamItem::P_WAVELENGTH));
BornAgain::Wavelength, beam_item.getItem(SpecularBeamItem::P_WAVELENGTH), simulation); if (resolution)
setParameterDistributionToSimulation<SpecularBeamInclinationItem>( scan.setWavelengthResolution(*resolution);
BornAgain::Inclination, beam_item.getItem(SpecularBeamItem::P_INCLINATION_ANGLE), resolution = createScanResolution(beam_item.getItem(SpecularBeamItem::P_INCLINATION_ANGLE));
simulation); if (resolution)
scan.setAngleResolution(*resolution);
} }
// TODO Consider removal addDistributionParametersToSimulation and
// template <class T> void setParameterDistributionToSimulation in the favor
// of setBeamDistribution.
void TransformToDomain::setBeamDistribution(const std::string& parameter_name, void TransformToDomain::setBeamDistribution(const std::string& parameter_name,
const BeamDistributionItem& item, Simulation& simulation) const BeamDistributionItem& item, Simulation& simulation)
{ {
...@@ -259,4 +260,25 @@ void setParameterDistributionToSimulation(const std::string& parameter_name, ...@@ -259,4 +260,25 @@ void setParameterDistributionToSimulation(const std::string& parameter_name,
if (P_par_distr) if (P_par_distr)
simulation.addParameterDistribution(*P_par_distr); simulation.addParameterDistribution(*P_par_distr);
} }
std::unique_ptr<ScanResolution> createScanResolution(const SessionItem* item)
{
auto beam_item = dynamic_cast<const BeamDistributionItem*>(item);
if (!beam_item)
return nullptr;
auto distr_item = dynamic_cast<const SymmetricDistributionItem*>(
beam_item->getGroupItem(BeamDistributionItem::P_DISTRIBUTION));
if (!distr_item)
return nullptr;
const double scale = beam_item->scaleFactor();
auto ranged_distr = distr_item->createRangedDistribution(scale);
if (!ranged_distr)
return nullptr;
const double deviation = distr_item->deviation(scale);
return std::unique_ptr<ScanResolution>(
ScanResolution::scanAbsoluteResolution(*ranged_distr, deviation));
}
} }
...@@ -27,13 +27,13 @@ ...@@ -27,13 +27,13 @@
#include "ParticleLayout.h" #include "ParticleLayout.h"
#include <memory> #include <memory>
class DetectorItem; class AngularSpecScan;
class BeamDistributionItem;
class GISASSimulation; class GISASSimulation;
class Material; class Material;
class MaterialItemContainer; class MaterialItemContainer;
class SessionItem; class SessionItem;
class Simulation; class Simulation;
class BeamDistributionItem;
namespace TransformToDomain namespace TransformToDomain
{ {
...@@ -48,8 +48,8 @@ BA_CORE_API_ std::unique_ptr<ParticleLayout> createParticleLayout(const SessionI ...@@ -48,8 +48,8 @@ BA_CORE_API_ std::unique_ptr<ParticleLayout> createParticleLayout(const SessionI
BA_CORE_API_ void addDistributionParametersToSimulation( BA_CORE_API_ void addDistributionParametersToSimulation(
const SessionItem& beam_item, GISASSimulation& simulation); const SessionItem& beam_item, GISASSimulation& simulation);
BA_CORE_API_ void addDistributionParametersToSimulation( BA_CORE_API_ void addBeamDivergencesToScan(const SessionItem& beam_item,
const SessionItem& beam_item, SpecularSimulation& simulation); AngularSpecScan& simulation);
BA_CORE_API_ void setBeamDistribution(const std::string& parameter_name, BA_CORE_API_ void setBeamDistribution(const std::string& parameter_name,
const BeamDistributionItem& item, Simulation& simulation); const BeamDistributionItem& item, Simulation& simulation);
......
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