35 QVector<SessionItem*> children = multilayer_item.
children();
36 for (
int i = 0; i < children.size(); ++i) {
37 if (children[i]->modelType() ==
"Layer") {
44 P_multilayer->addLayerWithTopRoughness(*P_layer, *P_roughness);
46 P_multilayer->addLayer(*P_layer);
57 QVector<SessionItem*> children = item.
children();
58 for (
int i = 0; i < children.size(); ++i) {
59 if (children[i]->modelType() ==
"ParticleLayout") {
62 P_layer->addLayout(*P_layout);
72 QVector<SessionItem*> children = item.
getItems();
73 for (
int i = 0; i < children.size(); ++i) {
76 P_layout->addParticle(*P_particle);
79 if (children[i]->modelType() ==
"ParticleDistribution") {
80 auto prop = children[i]
85 auto grandchildren = children[i]->getItems();
86 if (grandchildren.empty()) {
89 if (grandchildren.size() > 1) {
91 " -> Error! Too many particles defined"
92 " in ParticleDistribution");
96 P_layout->addParticle(*P_particle);
101 P_layout->addParticle(*P_part_distr);
106 " -> Error! Not implemented");
110 for (
int i = 0; i < interferences.size(); i++) {
112 if (P_interference) {
113 P_layout->setInterferenceFunction(*P_interference);
119 std::unique_ptr<IInterferenceFunction>
124 return iffItem->createInterferenceFunction();
127 std::unique_ptr<Instrument>
133 std::unique_ptr<IUnitConverter>
137 return specular_instrument->createUnitConverter();
139 return depth_instrument->createUnitConverter();
142 instrument->initDetector();
150 const auto detector2d =
dynamic_cast<const IDetector2D*
>(instrument->getDetector());
151 return std::make_unique<OffSpecularConverter>(*detector2d, instrument->beam(),
156 "Error in DomainObjectBuilder::createUnitConverter: unknown instrument type.");
#define ASSERT(condition)
Defines various axis items.
Defines class ComboProperty.
Defines DepthProbeInstrumentItem class.
Defines DomainObjectBuilder namespace.
Defines class GUIHelpers functions.
Defines interface IDetector2D.
Defines InterferenceFunctionItems's classes.
Defines class ParticleDistributionItem.
Defines class ParticleLayoutItem.
Defines interface UnitConverterSimple and its subclasses.
Declares the class SpecularBeamInclinationItem.
Defines class TransformToDomain.
Defines UnitConverter1D class and derived classes.
Declares utilities for unit converters.
Defines some unit conversion factors and other constants in namespace Units.
virtual std::unique_ptr< IAxis > createAxis(double scale) const
Custom property to define list of string values with multiple selections.
Abstract 2D detector interface.
virtual std::unique_ptr< Instrument > createInstrument() const =0
static const QString P_ROUGHNESS
static const QString P_ALPHA_AXIS
static const QString NO_SELECTION
static const QString P_DISTRIBUTED_PARAMETER
static const QString T_INTERFERENCE
QVector< SessionItem * > getItems(const QString &tag="") const
Returns vector of all items of given tag.
T * item(const QString &tag) const
QVector< SessionItem * > children() const
Returns vector of all children.
std::unique_ptr< MultiLayer > buildMultiLayer(const SessionItem &multilayer_item)
std::unique_ptr< Layer > buildLayer(const SessionItem &item)
std::unique_ptr< ParticleLayout > buildParticleLayout(const SessionItem &item)
std::unique_ptr< IUnitConverter > createUnitConverter(const InstrumentItem *instrumentItem)
Creates a unit converter corresponding to the given instrument item.
std::unique_ptr< IInterferenceFunction > buildInterferenceFunction(const SessionItem &item)
std::unique_ptr< Instrument > buildInstrument(const InstrumentItem &instrumentItem)
std::unique_ptr< ParticleLayout > createParticleLayout(const SessionItem &item)
std::unique_ptr< ParticleDistribution > createParticleDistribution(const SessionItem &item)
std::unique_ptr< IParticle > createIParticle(const SessionItem &item)
std::unique_ptr< MultiLayer > createMultiLayer(const SessionItem &item)
std::unique_ptr< Layer > createLayer(const SessionItem &item)
std::unique_ptr< LayerRoughness > createLayerRoughness(const SessionItem &item)
std::unique_ptr< IUnitConverter > createConverterForGISAS(const Instrument &instrument)
Helper factory function to use in GISASSimulation.
static constexpr double deg