48 std::unique_ptr<ISimulation> sim(simulation.
clone());
49 sim->prepareSimulation();
57 const QString& sample_name)
65 const QString& instrument_name)
67 ASSERT(p_instrument_model);
69 QString
name = instrument_name.isEmpty()
73 if (
auto gisasSimulation =
dynamic_cast<const GISASSimulation*
>(&simulation)) {
74 return createGISASInstrumentItem(p_instrument_model, *gisasSimulation,
name);
76 return createOffSpecularInstrumentItem(p_instrument_model, *offSpecSimulation,
name);
77 }
else if (
auto spec_simulation =
dynamic_cast<const SpecularSimulation*
>(&simulation)) {
78 return createSpecularInstrumentItem(p_instrument_model, *spec_simulation,
name);
81 throw GUIHelpers::Error(
"GUIObjectBuilder::populateInstrumentModel() -> Error. ISimulation is "
91 p_options_item->setNumberOfMonteCarloPoints(
95 p_options_item->setFresnelMaterialMethod(
"Average Layer Material");
98 p_options_item->setIncludeSpecularPeak(
"Yes");
100 return p_options_item;
#define ASSERT(condition)
Defines class DocumentModel.
Defines class GISASSimulation.
Defines class GUIDomainSampleVisitor.
Defines class GUIHelpers functions.
Defines GUIObjectBuilder namespace.
Defines InstrumentItems classes.
Defines class InstrumentModel.
Defines class MultiLayer.
Defines class OffSpecularSimulation.
Defines class SampleModel.
Defines class SimulationOptionsItem.
Defines class SpecularSimulation.
Defines namespace TransformFromDomain.
Defines some unit conversion factors and other constants in namespace Units.
The DocumentModel class is a model with GUI settings related to the opened project.
Main class to run a Grazing-Incidence Small-Angle Scattering simulation.
Visits domain sample tree to build GUI presentation.
SessionItem * populateSampleModel(SampleModel *sampleModel, MaterialModel *materialModel, const MultiLayer &sample, const QString &sample_name="")
const std::string & getName() const
Abstract base class of OffSpecularSimulation, GISASSimulation and SpecularSimulation.
virtual ISimulation * clone() const =0
const Instrument & instrument() const
const SimulationOptions & getOptions() const
Our sample model: a stack of layers one below the other.
static const QString P_ALPHA_AXIS
Main class to run an off-specular simulation.
const IAxis * beamAxis() const
Returns axis of the beam.
Main model to hold sample items.
void setItemName(const QString &name)
Set item name, add property if necessary.
T * insertItem(SessionItem *parent=nullptr, int row=-1, QString tag="")
The SimulationOptionsItem class holds simulation status (run policy, number of threads,...
void setComputationMethod(const QString &name)
size_t getMcPoints() const
bool includeSpecular() const
bool useAvgMaterials() const
Main class to run a specular simulation.
SessionItem * populateInstrumentModel(InstrumentModel *p_instrument_model, const ISimulation &simulation, const QString &instrument_name="")
SessionItem * populateDocumentModel(DocumentModel *p_documentModel, const ISimulation &simulation)
SessionItem * populateSampleModelFromSim(SampleModel *sampleModel, MaterialModel *materialModel, const ISimulation &simulation)
SessionItem * populateSampleModel(SampleModel *sampleModel, MaterialModel *materialModel, const MultiLayer &sample, const QString &sample_name="")
QString const & name(EShape k)
void setGISASBeamItem(BeamItem *beam_item, const GISASSimulation &simulation)
void setOffSpecularBeamItem(BeamItem *beam_item, const OffSpecularSimulation &simulation)
void setAxisItem(SessionItem *item, const IAxis &axis, double factor=1.0)
void setDetector(Instrument2DItem *instrument_item, const ISimulation2D &simulation)
void setBackground(InstrumentItem *instrument_item, const ISimulation &simulation)
void setSpecularBeamItem(SpecularBeamItem *beam_item, const SpecularSimulation &simulation)
static constexpr double deg