53 QString property_name;
54 if (parent_type ==
"Particle")
56 else if (parent_type ==
"MesoCrystal")
58 if (property_name.isEmpty())
74 const QString& sample_name)
113 layer_index == 0 ? nullptr : multilayer->layerInterface(layer_index - 1);
146 auto particle_distribution_item =
174 if (mesocrystal_item->
modelType() !=
"MesoCrystal") {
176 "-> Error. Parent is not a MesoCrystal");
180 auto vector_b = lattice.getBasisVectorB();
181 auto vector_c = lattice.getBasisVectorC();
194 SessionItem* ff_item = AddFormFactorItem(particle_item,
"AnisoPyramid");
205 SessionItem* ff_item = AddFormFactorItem(particle_item,
"BarGauss");
215 SessionItem* ff_item = AddFormFactorItem(particle_item,
"BarLorentz");
225 SessionItem* ff_item = AddFormFactorItem(particle_item,
"Box");
235 SessionItem* ff_item = AddFormFactorItem(particle_item,
"Cone");
245 SessionItem* ff_item = AddFormFactorItem(particle_item,
"Cone6");
255 SessionItem* ff_item = AddFormFactorItem(particle_item,
"Cuboctahedron");
266 SessionItem* ff_item = AddFormFactorItem(particle_item,
"Cylinder");
275 SessionItem* ff_item = AddFormFactorItem(particle_item,
"Dodecahedron");
283 SessionItem* ff_item = AddFormFactorItem(particle_item,
"Dot");
291 SessionItem* ff_item = AddFormFactorItem(particle_item,
"EllipsoidalCylinder");
301 SessionItem* ff_item = AddFormFactorItem(particle_item,
"FullSphere");
309 SessionItem* ff_item = AddFormFactorItem(particle_item,
"FullSpheroid");
318 SessionItem* ff_item = AddFormFactorItem(particle_item,
"Icosahedron");
326 SessionItem* ff_item = AddFormFactorItem(particle_item,
"HemiEllipsoid");
336 SessionItem* ff_item = AddFormFactorItem(particle_item,
"Prism3");
345 SessionItem* ff_item = AddFormFactorItem(particle_item,
"Prism6");
354 SessionItem* ff_item = AddFormFactorItem(particle_item,
"Pyramid");
364 SessionItem* ff_item = AddFormFactorItem(particle_item,
"CosineRippleBox");
374 SessionItem* ff_item = AddFormFactorItem(particle_item,
"CosineRippleGauss");
384 SessionItem* ff_item = AddFormFactorItem(particle_item,
"CosineRippleLorentz");
394 SessionItem* ff_item = AddFormFactorItem(particle_item,
"SawtoothRippleBox");
405 SessionItem* ff_item = AddFormFactorItem(particle_item,
"SawtoothRippleGauss");
416 SessionItem* ff_item = AddFormFactorItem(particle_item,
"SawtoothRippleLorentz");
427 SessionItem* ff_item = AddFormFactorItem(particle_item,
"Tetrahedron");
437 SessionItem* ff_item = AddFormFactorItem(particle_item,
"TruncatedCube");
446 SessionItem* ff_item = AddFormFactorItem(particle_item,
"TruncatedSphere");
456 SessionItem* ff_item = AddFormFactorItem(particle_item,
"TruncatedSpheroid");
529 auto transformation_item =
542 auto transformation_item =
555 auto transformation_item =
568 auto transformation_item =
594 material_data.imag());
597 material_data.imag());
599 throw GUIHelpers::Error(
"GUIObjectBuilder::createMaterialFromDomain() -> Error. "
600 "Unsupported material");
616 if (parent_type ==
"ParticleCoreShell") {
626 "Particle not found in parent ParticleCoreShell");
639 return particle_item;
#define ASSERT(condition)
Defines class ComboProperty.
std::complex< double > complex_t
Defines class GUIDomainSampleVisitor.
Defines class GUIHelpers functions.
Includes all particle-shape form-factor definitions.
Defines InterferenceFunctionItems's classes.
Defines class MaterialItemUtils.
Defines class MaterialModel.
Defines class MesoCrystalItem.
Defines class MesoCrystal.
Defines class MultiLayerItem.
Defines helper functions for MultiLayer objects.
Defines class MultiLayer.
Defines collection of utility functions for INode.
Defines class ParticleComposition.
Defines class ParticleCoreShellItem.
Defines ParticleCoreShell.
Defines class ParticleDistributionItem.
Defines class ParticleDistribution.
Defines class ParticleItem.
Defines class ParticleLayoutItem.
Defines class ParticleLayout.
Defines class RotationItems.
Defines class SampleModel.
Includes all soft-particle form-factor definitions.
Defines namespace TransformFromDomain.
Defines some unit conversion factors and other constants in namespace Units.
Defines class VectorItem.
static const QString P_ALPHA
static const QString P_WIDTH
static const QString P_LENGTH
static const QString P_HEIGHT
static const QString P_LENGTH
static const QString P_HEIGHT
static const QString P_WIDTH
static const QString P_LENGTH
static const QString P_WIDTH
static const QString P_HEIGHT
static const QString P_LENGTH
static const QString P_HEIGHT
static const QString P_WIDTH
static const QString P_HEIGHT
static const QString P_BASEEDGE
static const QString P_ALPHA
static const QString P_ALPHA
static const QString P_HEIGHT
static const QString P_RADIUS
static const QString P_WIDTH
static const QString P_HEIGHT
static const QString P_LENGTH
static const QString P_LENGTH
static const QString P_WIDTH
static const QString P_HEIGHT
static const QString P_LENGTH
static const QString P_WIDTH
static const QString P_HEIGHT
A crystal structure, defined by a Bravais lattice, a basis, and a position variance.
Lattice3D transformedLattice(const IRotation *p_rotation=nullptr) const
static const QString P_HEIGHT
static const QString P_LENGTH
static const QString P_HEIGHT_RATIO
static const QString P_ALPHA
static const QString P_RADIUS
static const QString P_HEIGHT
static const QString P_EDGE
static const QString P_RADIUS_X
static const QString P_HEIGHT
static const QString P_RADIUS_Y
static const QString P_BETA
static const QString P_ALPHA
static const QString P_GAMMA
The ExternalProperty class defines custom QVariant property to carry the text, color and an identifie...
static const QString P_RADIUS
static const QString P_HEIGHT
static const QString P_RADIUS
SessionItem * populateSampleModel(SampleModel *sampleModel, MaterialModel *materialModel, const MultiLayer &sample, const QString &sample_name="")
virtual void visit(const BasicLattice2D *)
ExternalProperty createMaterialFromDomain(const Material *)
SampleModel * m_sampleModel
~GUIDomainSampleVisitor()
SessionItem * InsertIParticle(const IParticle *p_particle, QString model_type)
QMap< SessionItem *, const ISampleNode * > m_itemToSample
MaterialModel * m_materialModel
void buildPositionInfo(SessionItem *particleItem, const IParticle *sample)
QMap< int, SessionItem * > m_levelToParentItem
static const QString P_RADIUS_Y
static const QString P_RADIUS_X
static const QString P_HEIGHT
void setDepth(int depth)
Sets depth of the visitor in the composite hierarchy.
int depth() const
Returns depth of the visitor in the composite hierarchy.
const std::string & getName() const
Abstract base class for Particle, ParticleComposition, ParticleCoreShell, MesoCrystal.
kvector_t position() const
Returns particle position.
double getAsymmetry() const
static const QString P_EDGE
Interference function of a 1D lattice.
Interference function of a 2D lattice.
Interference function of a 2D paracrystal.
Interference function of a finite 2D lattice.
Percus-Yevick hard disk interference function.
Interference function of radial paracrystal.
kvector_t getBasisVectorA() const
Returns basis vector a.
Interface between two layers, possibly with roughness.
static const QString P_MATERIAL
A layer in a MultiLayer sample.
const Material * material() const final
Returns nullptr, unless overwritten to return a specific material.
static const QString P_MAGNETIZATION
MaterialItem * addSLDMaterial(const QString &name, double sld, double abs_term)
MaterialItem * materialFromName(const QString &name)
MaterialItem * addRefractiveMaterial(const QString &name, double delta, double beta)
A wrapper for underlying material implementation.
kvector_t magnetization() const
Get the magnetization (in A/m)
std::string getName() const
Returns the name of material.
MATERIAL_TYPES typeID() const
Returns the type of underlying material implementation.
complex_t materialData() const
Returns underlying material data.
static const QString P_VECTOR_C
static const QString P_VECTOR_B
static const QString P_VECTOR_A
static const QString P_OUTER_SHAPE
A particle with an internal structure of smaller particles.
static const QString P_CROSS_CORR_LENGTH
static const QString P_EXTERNAL_FIELD
Our sample model: a stack of layers one below the other.
kvector_t externalField() const
Returns the external field applied to the multilayer (units: A/m)
double crossCorrLength() const
Returns cross correlation length of roughnesses between interfaces.
A composition of particles at fixed positions.
static const QString T_CORE
static const QString T_SHELL
A particle with a core/shell geometry.
const Particle * shellParticle() const
const Particle * coreParticle() const
A particle type that is a parametric distribution of IParticle's.
static const QString P_MATERIAL
static const QString P_ABUNDANCE
static const QString T_TRANSFORMATION
static const QString P_POSITION
static const QString P_FORM_FACTOR
static const QString T_INTERFERENCE
static const QString P_TOTAL_DENSITY
static const QString P_WEIGHT
Decorator class that adds particles to ISampleNode objects.
double weight() const
Returns the relative weight of this layout.
double totalParticleSurfaceDensity() const
A particle with a form factor and refractive index.
const Material * material() const final
Returns nullptr, unless overwritten to return a specific material.
static const QString P_HEIGHT
static const QString P_BASEEDGE
static const QString P_HEIGHT
static const QString P_BASEEDGE
static const QString P_HEIGHT
static const QString P_ALPHA
static const QString P_BASEEDGE
A sequence of rotations about the z-x'-z'' axes.
A rotation about the x axis.
A rotation about the y axis.
A rotation about the z axis.
Main model to hold sample items.
static const QString P_HEIGHT
static const QString P_WIDTH
static const QString P_ASYMMETRY
static const QString P_LENGTH
static const QString P_WIDTH
static const QString P_ASYMMETRY
static const QString P_LENGTH
static const QString P_HEIGHT
static const QString P_HEIGHT
static const QString P_LENGTH
static const QString P_WIDTH
static const QString P_ASYMMETRY
void setItemName(const QString &name)
Set item name, add property if necessary.
T * item(const QString &tag) const
void setItemValue(const QString &tag, const QVariant &variant)
Directly set value of item under given tag.
SessionItem * setGroupProperty(const QString &groupTag, const QString &modelType) const
Set the current type of group item.
QString modelType() const
Get model type.
T * insertItem(SessionItem *parent=nullptr, int row=-1, QString tag="")
SessionItem * insertNewItem(QString model_type, SessionItem *parent_item=nullptr, int row=-1, QString tag="")
static const QString P_ALPHA
static const QString P_BASEEDGE
static const QString P_HEIGHT
static const QString P_REMOVED_LENGTH
static const QString P_LENGTH
static const QString P_REMOVED_TOP
static const QString P_RADIUS
static const QString P_HEIGHT
static const QString P_HEIGHT
static const QString P_HFC
static const QString P_RADIUS
static const QString P_REMOVED_TOP
static const QString P_ANGLE
static const QString P_ANGLE
static const QString P_ANGLE
ExternalProperty materialProperty(const SessionItem &materialItem)
Constructs material property corresponding to given material.
size_t IndexOfLayer(const MultiLayer &multilayer, const Layer *p_layer)
Returns the index of the given layer.
std::vector< std::tuple< const INode *, int, const INode * > > progenyPlus(const INode *node, int level=0)
Returns a vector of triples (descendant, depth, parent)
void setFinite2DLatticeItem(SessionItem *item, const InterferenceFunctionFinite2DLattice &sample)
void setRadialParaCrystalItem(SessionItem *item, const InterferenceFunctionRadialParaCrystal &sample)
void setHardDiskItem(SessionItem *item, const InterferenceFunctionHardDisk &sample)
void set2DParaCrystalItem(SessionItem *item, const InterferenceFunction2DParaCrystal &sample)
void setLayerItem(SessionItem *layer_item, const Layer *layer, const LayerInterface *top_interface)
void set2DLatticeItem(SessionItem *item, const InterferenceFunction2DLattice &sample)
void set1DLatticeItem(SessionItem *item, const InterferenceFunction1DLattice &sample)
void setParticleDistributionItem(SessionItem *item, const ParticleDistribution &sample)
Initialization of ParticleDistributionItem.
double rad2deg(double angle)