58 void setParameterDistributionToSimulation(
const std::string& parameter_name,
61 std::unique_ptr<ScanResolution> createScanResolution(
const SessionItem* item);
68 parent_job ? parent_job->materialContainerItem() :
nullptr;
77 auto P_multilayer = std::make_unique<MultiLayer>();
79 if (cross_corr_length > 0)
80 P_multilayer->setCrossCorrLength(cross_corr_length);
82 P_multilayer->setExternalField(external_field);
94 std::unique_ptr<LayerRoughness>
97 if (roughnessItem.
modelType() ==
"LayerZeroRoughness") {
99 }
else if (roughnessItem.
modelType() ==
"LayerBasicRoughness") {
100 return std::make_unique<LayerRoughness>(
111 auto P_layout = std::make_unique<ParticleLayout>();
114 P_layout->setTotalParticleSurfaceDensity(total_density);
115 P_layout->setWeight(layout_weight);
121 std::unique_ptr<IParticle> P_particle;
123 auto& particle_item =
static_cast<const ParticleItem&
>(item);
125 }
else if (item.
modelType() ==
"ParticleCoreShell") {
128 }
else if (item.
modelType() ==
"ParticleComposition") {
131 }
else if (item.
modelType() ==
"MesoCrystal") {
138 std::unique_ptr<ParticleDistribution>
150 if (beam_item.
modelType() !=
"GISASBeam") {
155 setParameterDistributionToSimulation<BeamWavelengthItem>(
157 setParameterDistributionToSimulation<BeamInclinationAngleItem>(
159 setParameterDistributionToSimulation<BeamAzimuthalAngleItem>(
166 if (beam_item.
modelType() !=
"SpecularBeam") {
197 if (optionItem->getComputationMethod() ==
"Monte-Carlo Integration") {
199 true, optionItem->getNumberOfMonteCarloPoints());
201 if (optionItem->getFresnelMaterialMethod() ==
"Average Layer Material")
203 if (optionItem->getIncludeSpecularPeak() ==
"Yes")
222 QVector<SessionItem*> children = item.
children();
223 for (
int i = 0; i < children.size(); ++i) {
224 if (children[i]->modelType() ==
"Rotation") {
236 void setParameterDistributionToSimulation(
const std::string& parameter_name,
239 const auto parameter_item =
dynamic_cast<const T*
>(item);
240 if (!parameter_item) {
249 parameter_item->getParameterDistributionForName(parameter_pattern.
toStdString());
254 std::unique_ptr<ScanResolution> createScanResolution(
const SessionItem* item)
265 const double scale = beam_item->scaleFactor();
270 const double deviation = distr_item->deviation(scale);
271 return std::unique_ptr<ScanResolution>(
Declares AngularSpecScan class.
#define ASSERT(condition)
Defines class BeamAngleItems.
Defines BeamItem hierarchy.
Defines class BeamWavelengthItem.
Defines class ComboProperty.
Defines FTDecayFunction1DItem classes.
Defines FTDistribution1DItem's classes.
Defines class GISASSimulation.
Defines class GUIHelpers functions.
Includes all interference function definitions.
Defines auxiliary functions in JobModelFunctions namespace.
Defines classes Lattice2DItems.
Defines classes LayerRoughnessItems.
Defines MaskItems classes.
Defines class MaterialItemUtils.
Defines class MesoCrystalItem.
Defines class MesoCrystal.
Defines class MultiLayerItem.
Defines class ParameterPattern.
Defines class ParticleCompositionItem.
Defines class ParticleCoreShellItem.
Defines ParticleCoreShell.
Defines class ParticleDistributionItem.
Defines class ParticleItem.
Defines class ParticleLayoutItem.
Defines classes representing ranged one-dimensional distributions.
Defines class RectangularDetectorItem.
Defines class RotationItems.
Defines scan resolution class.
Defines namespace SessionItemUtils.
Defines class SimulationOptionsItem.
Declares the class SpecularBeamInclinationItem.
Defines class SphericalDetectorItem.
Defines class TransformToDomain.
Defines some unit conversion factors and other constants in namespace Units.
Defines class VectorItem.
Scan type with inclination angles as coordinate values and a unique wavelength.
void setAngleResolution(const ScanResolution &resolution)
Sets angle resolution values via ScanResolution object.
void setWavelengthResolution(const ScanResolution &resolution)
Sets wavelength resolution values via ScanResolution object.
T z() const
Returns z-component in cartesian coordinate system.
T y() const
Returns y-component in cartesian coordinate system.
T x() const
Returns x-component in cartesian coordinate system.
The BeamDistributionItem handles wavelength, inclination and azimuthal parameter distribution for Bea...
std::unique_ptr< ParameterDistribution > getParameterDistributionForName(const std::string ¶meter_name) const
returns parameter distribution to add into the ISimulation
static const QString P_DISTRIBUTION
static const QString P_AZIMUTHAL_ANGLE
static const QString P_WAVELENGTH
static const QString P_INCLINATION_ANGLE
The ExternalProperty class defines custom QVariant property to carry the text, color and an identifie...
Main class to run a Grazing-Incidence Small-Angle Scattering simulation.
Abstract base class for Particle, ParticleComposition, ParticleCoreShell, MesoCrystal.
void setPosition(kvector_t position)
Sets relative position of the particle's reference point in the coordinate system of parent.
void setRotation(const IRotation &rotation)
Sets transformation.
Abstract base class of OffSpecularSimulation, GISASSimulation and SpecularSimulation.
void addParameterDistribution(const std::string ¶m_name, const IDistribution1D &distribution, size_t nbr_samples, double sigma_factor=0.0, const RealLimits &limits=RealLimits())
const SimulationOptions & getOptions() const
static const QString P_LATERAL_CORR_LENGTH
static const QString P_SIGMA
static const QString P_HURST
static const QString P_THICKNESS
static const QString P_NSLICES
std::unique_ptr< MesoCrystal > createMesoCrystal() const
static const QString P_CROSS_CORR_LENGTH
static const QString P_EXTERNAL_FIELD
Helper class for constructing parameter patterns.
ParameterPattern & beginsWith(std::string start_type)
std::string toStdString() const
ParameterPattern & add(std::string object_type)
std::unique_ptr< ParticleComposition > createParticleComposition() const
std::unique_ptr< ParticleCoreShell > createParticleCoreShell() const
std::unique_ptr< ParticleDistribution > createParticleDistribution() const
std::unique_ptr< Particle > createParticle() const
static const QString P_POSITION
static const QString P_TOTAL_DENSITY
static const QString P_WEIGHT
virtual std::unique_ptr< IRotation > createRotation() const =0
static ScanResolution * scanAbsoluteResolution(const IRangedDistribution &distr, double stddev)
QVariant getItemValue(const QString &tag) const
Directly access value of item under given tag.
T * item(const QString &tag) const
QVector< SessionItem * > children() const
Returns vector of all children.
QString modelType() const
Get model type.
SessionItem * getItem(const QString &tag="", int row=0) const
Returns item in given row of given tag.
The SimulationOptionsItem class holds simulation status (run policy, number of threads,...
void setUseAvgMaterials(bool use_avg_materials)
void setIncludeSpecular(bool include_specular)
void setNumberOfThreads(int nthreads)
Sets number of threads to use during the simulation (0 - take the default value from the hardware)
void setMonteCarloIntegration(bool flag=true, size_t mc_points=50)
Enables/disables MonetCarlo integration.
virtual std::unique_ptr< IRangedDistribution > createIRangedDistribution(double scale) const =0
const JobItem * findJobItem(const SessionItem *item)
Determines parenting JobItem of a given SessionItem.
QString materialTag(const SessionItem &item)
Returns material tag for given item. Returns empty string, if item doesn't have materials.
std::unique_ptr< Material > createDomainMaterial(const ExternalProperty &material_property)
void setPositionInfo(IParticle *result, const SessionItem &item)
void setTransformationInfo(IParticle *result, const SessionItem &item)
void setRotationInfo(IParticle *result, const SessionItem &item)
std::unique_ptr< ParticleLayout > createParticleLayout(const SessionItem &item)
void addBeamDivergencesToScan(const SessionItem &beam_item, AngularSpecScan &simulation)
void addDistributionParametersToSimulation(const SessionItem &beam_item, GISASSimulation &simulation)
adds DistributionParameters to the ISimulation
std::unique_ptr< ParticleDistribution > createParticleDistribution(const SessionItem &item)
std::unique_ptr< Material > createDomainMaterial(const SessionItem &item)
std::unique_ptr< IParticle > createIParticle(const SessionItem &item)
void setBeamDistribution(const std::string ¶meter_name, const BeamDistributionItem &item, ISimulation &simulation)
std::unique_ptr< MultiLayer > createMultiLayer(const SessionItem &item)
void setSimulationOptions(ISimulation *simulation, const SessionItem &item)
std::unique_ptr< Layer > createLayer(const SessionItem &item)
std::unique_ptr< LayerRoughness > createLayerRoughness(const SessionItem &item)