24 : m_lattice(lattice), m_position_variance(position_variance)
28 m_basis->registerAbundance(
false);
34 : m_lattice(lattice), m_position_variance(position_variance)
54 std::unique_ptr<IParticle> basis_clone{
m_basis->clone()};
56 basis_clone->rotate(*rot);
57 basis_clone->translate(translation);
58 const std::unique_ptr<IFormFactor> basis_ff(basis_clone->createFormFactor());
59 return new FormFactorCrystal(transformed_lattice, *basis_ff, meso_crystal_form_factor,
65 std::vector<HomogeneousRegion> result;
67 if (unit_cell_volume <= 0)
69 auto particles =
m_basis->decompose();
71 for (
const auto* particle : particles) {
72 auto sliced_particle = particle->createSlicedParticle(limits);
73 result.insert(result.end(), sliced_particle.m_regions.begin(),
74 sliced_particle.m_regions.end());
76 for (
auto& region : result)
77 region.m_volume /= unit_cell_volume;
Defines class ParticleComposition.
Defines IRotation classes.
Defines class SlicedParticle.
A crystal structure, defined by a Bravais lattice, a basis, and a position variance.
Crystal(const IParticle &basis, const Lattice3D &lattice, double position_variance=0)
std::vector< HomogeneousRegion > homogeneousRegions() const
std::vector< const INode * > getChildren() const final
Returns a vector of children.
IFormFactor * createTotalFormFactor(const IFormFactor &meso_crystal_form_factor, const IRotation *p_rotation, const kvector_t &translation) const
Lattice3D transformedLattice(const IRotation *p_rotation=nullptr) const
std::unique_ptr< IParticle > m_basis
const double m_position_variance
Crystal * clone() const final
Returns a clone of this ISampleNode object.
void registerChild(INode *node)
void setName(const std::string &name)
Abstract base class for Particle, ParticleComposition, ParticleCoreShell, MesoCrystal.
IParticle * clone() const override=0
Returns a clone of this ISampleNode object.
Abstract base class for rotations.
virtual Transform3D getTransform3D() const =0
Returns transformation.
A Bravais lattice, characterized by three basis vectors, and optionally an ISelectionRule.
double unitCellVolume() const
Returns the volume of the unit cell.
Lattice3D transformed(const Transform3D &transform) const
Creates transformed lattice.
Class that contains upper and lower limits of the z-coordinate for the slicing of form factors.