39 std::unique_ptr<GISASSimulation> createGISASSimulation(std::unique_ptr<MultiLayer> P_multilayer,
43 std::unique_ptr<OffSpecularSimulation>
44 createOffSpecularSimulation(std::unique_ptr<MultiLayer> P_multilayer,
48 std::unique_ptr<SpecularSimulation>
49 createSpecularSimulation(std::unique_ptr<MultiLayer> P_multilayer,
53 std::unique_ptr<DepthProbeSimulation>
54 createDepthProbeSimulation(std::unique_ptr<MultiLayer> P_multilayer,
60 std::unique_ptr<ISimulation>
65 if (sampleItem ==
nullptr || instrumentItem ==
nullptr) {
66 QString message(
"DomainSimulationBuilder::getSimulation() -> Error. Either MultiLayerItem "
67 " or InstrumentItem is not defined.");
74 return createGISASSimulation(std::move(P_multilayer), gisasInstrument, optionsItem);
75 else if (
auto offspecInstrument =
77 return createOffSpecularSimulation(std::move(P_multilayer), offspecInstrument, optionsItem);
79 return createSpecularSimulation(std::move(P_multilayer), specular_instrument, optionsItem);
81 return createDepthProbeSimulation(std::move(P_multilayer), penetrator, optionsItem);
84 "DomainSimulationBuilder::createSimulation() -> Error. Not yet implemented");
95 std::unique_ptr<GISASSimulation> createGISASSimulation(std::unique_ptr<MultiLayer> P_multilayer,
101 ret->setSample(*P_multilayer);
102 ret->setInstrument(*P_instrument);
109 addBackgroundToSimulation(*instrument, *ret);
114 std::unique_ptr<OffSpecularSimulation>
115 createOffSpecularSimulation(std::unique_ptr<MultiLayer> P_multilayer,
121 ret->setSample(*P_multilayer);
122 ret->setInstrument(*P_instrument);
124 auto beamItem = instrument->
beamItem();
126 ret->setBeamParameters(beamItem->wavelength(), *axisItem->createAxis(
Units::deg),
127 beamItem->getAzimuthalAngle());
137 addBackgroundToSimulation(*instrument, *ret);
142 std::unique_ptr<SpecularSimulation>
143 createSpecularSimulation(std::unique_ptr<MultiLayer> P_multilayer,
147 std::unique_ptr<SpecularSimulation> ret = std::make_unique<SpecularSimulation>();
148 ret->setSample(*P_multilayer);
150 auto beam_item = instrument->
beamItem();
152 const auto footprint = beam_item->currentFootprintItem();
155 scan.setFootprintFactor(footprint->createFootprint().get());
159 ret->beam().setIntensity(beam_item->intensity());
166 addBackgroundToSimulation(*instrument, *ret);
171 std::unique_ptr<DepthProbeSimulation>
172 createDepthProbeSimulation(std::unique_ptr<MultiLayer> P_multilayer,
177 ret->setSample(*P_multilayer);
Declares AngularSpecScan class.
Defines various axis items.
Defines BackgroundItem classes.
Defines DepthProbeInstrumentItem class.
Defines class DepthProbeSimulation.
Defines classes DetectorItems.
Defines DomainObjectBuilder namespace.
Defines class DomainSimulationBuilder.
Defines class GISASSimulation.
Defines class GUIHelpers functions.
Defines interface IBackground.
Defines class MultiLayerItem.
Defines class OffSpecularSimulation.
Defines class SimulationOptionsItem.
Declares the class SpecularBeamInclinationItem.
Defines class SpecularSimulation.
Defines class TransformToDomain.
Defines some unit conversion factors and other constants in namespace Units.
Scan type with inclination angles as coordinate values and a unique wavelength.
virtual std::unique_ptr< IBackground > createBackground() const =0
std::unique_ptr< DepthProbeSimulation > createSimulation() const
Main class to run a Grazing-Incidence Small-Angle Scattering simulation.
Abstract base class of OffSpecularSimulation, GISASSimulation and SpecularSimulation.
void setBackground(const IBackground &bg)
virtual BeamItem * beamItem() const
BackgroundItem * backgroundItem() const
static const QString P_ALPHA_AXIS
Main class to run an off-specular simulation.
T * item(const QString &tag) const
The SimulationOptionsItem class holds simulation status (run policy, number of threads,...
BasicAxisItem * currentInclinationAxisItem()
SpecularBeamItem * beamItem() const override
std::unique_ptr< MultiLayer > buildMultiLayer(const SessionItem &multilayer_item)
std::unique_ptr< Instrument > buildInstrument(const InstrumentItem &instrumentItem)
std::unique_ptr< ISimulation > createSimulation(const MultiLayerItem *sampleItem, const InstrumentItem *instrumentItem, const SimulationOptionsItem *optionsItem=nullptr)
Creates domain simulation from sample and instrument items.
void addBeamDivergencesToScan(const SessionItem &beam_item, AngularSpecScan &simulation)
void addDistributionParametersToSimulation(const SessionItem &beam_item, GISASSimulation &simulation)
adds DistributionParameters to the ISimulation
void setSimulationOptions(ISimulation *simulation, const SessionItem &item)
static constexpr double deg