BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
Crystal.h
Go to the documentation of this file.
1 // ************************************************************************** //
2 //
3 // BornAgain: simulate and fit scattering at grazing incidence
4 //
5 //! @file Sample/Particle/Crystal.h
6 //! @brief Defines class Crystal.
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************** //
14 
15 #ifndef BORNAGAIN_CORE_PARTICLE_CRYSTAL_H
16 #define BORNAGAIN_CORE_PARTICLE_CRYSTAL_H
17 
18 #include "Sample/Lattice/Lattice.h"
20 
21 //! A crystal structure with a ParticleComposition as a basis.
22 //! Used in MesoCrystal, where it is given an outer shape.
23 //! @ingroup samples
24 
26 {
27 public:
28  Crystal(const IParticle& lattice_basis, const Lattice& lattice);
30 
31  Crystal* clone() const override final;
32 
33  void accept(INodeVisitor* visitor) const override final { visitor->visit(this); }
34 
35  IFormFactor* createTotalFormFactor(const IFormFactor& meso_crystal_form_factor,
36  const IRotation* p_rotation,
37  const kvector_t& translation) const override final;
38 
39  std::vector<HomogeneousRegion> homogeneousRegions() const override final;
40 
41  Lattice transformedLattice(const IRotation* p_rotation = nullptr) const;
42 
43  void setPositionVariance(double position_variance) { m_position_variance = position_variance; }
44 
45  std::vector<const INode*> getChildren() const override final;
46 
47 private:
48  Crystal(IParticle* p_lattice_basis, const Lattice& lattice);
49 
51  std::unique_ptr<IParticle> mp_lattice_basis;
53 };
54 
55 #endif // BORNAGAIN_CORE_PARTICLE_CRYSTAL_H
Defines class IClusteredParticles.
Defines class Lattice.
A crystal structure with a ParticleComposition as a basis.
Definition: Crystal.h:26
Crystal * clone() const override final
Returns a clone of this ISample object.
Definition: Crystal.cpp:33
IFormFactor * createTotalFormFactor(const IFormFactor &meso_crystal_form_factor, const IRotation *p_rotation, const kvector_t &translation) const override final
Creates a total form factor for the mesocrystal with a specific shape and content The bulk content of...
Definition: Crystal.cpp:40
std::unique_ptr< IParticle > mp_lattice_basis
Definition: Crystal.h:51
void accept(INodeVisitor *visitor) const override final
Calls the INodeVisitor's visit method.
Definition: Crystal.h:33
Crystal(const IParticle &lattice_basis, const Lattice &lattice)
Definition: Crystal.cpp:21
Lattice m_lattice
Definition: Crystal.h:50
std::vector< const INode * > getChildren() const override final
Returns a vector of children (const).
Definition: Crystal.cpp:80
void setPositionVariance(double position_variance)
Definition: Crystal.h:43
double m_position_variance
Definition: Crystal.h:52
std::vector< HomogeneousRegion > homogeneousRegions() const override final
Creates region information with volumetric densities instead of absolute volume These densities need ...
Definition: Crystal.cpp:54
Lattice transformedLattice(const IRotation *p_rotation=nullptr) const
Definition: Crystal.cpp:72
An ordered assembly of particles.
Pure virtual base class for all form factors.
Definition: IFormFactor.h:40
Visitor interface to visit ISample objects.
Definition: INodeVisitor.h:149
Pure virtual base class for Particle, ParticleComposition, ParticleCoreShell, MesoCrystal.
Definition: IParticle.h:33
Pure virtual interface for rotations.
Definition: Rotations.h:27
A lattice with three basis vectors.
Definition: Lattice.h:28