BornAgain  1.19.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 reflection and scattering
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_SAMPLE_PARTICLE_CRYSTAL_H
16 #define BORNAGAIN_SAMPLE_PARTICLE_CRYSTAL_H
17 
20 
21 class IFormFactor;
22 class IRotation;
23 struct HomogeneousRegion;
24 
25 //! A crystal structure, defined by a Bravais lattice, a basis, and a position variance.
26 //!
27 //! The basis is either a Particle or a ParticleComposition.
28 //!
29 //! Computations are delegated to class FormFactorCrystal.
30 //!
31 //! Used in MesoCrystal, where it is given an outer shape.
32 //!
33 //! @ingroup samples
34 
35 class Crystal : public ISampleNode {
36 public:
37  Crystal(const IParticle& basis, const Lattice3D& lattice, double position_variance = 0);
39 
40  Crystal* clone() const final;
41 
42  void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
43 
44  IFormFactor* createTotalFormFactor(const IFormFactor& meso_crystal_form_factor,
45  const IRotation* p_rotation,
46  const kvector_t& translation) const;
47 
48  std::vector<HomogeneousRegion> homogeneousRegions() const;
49 
50  Lattice3D transformedLattice(const IRotation* p_rotation = nullptr) const;
51 
52  std::vector<const INode*> getChildren() const final;
53 
54 private:
55  Crystal(IParticle* p_basis, const Lattice3D& lattice, double position_variance = 0);
56 
58  std::unique_ptr<IParticle> m_basis;
59  const double m_position_variance;
60 };
61 
62 #endif // BORNAGAIN_SAMPLE_PARTICLE_CRYSTAL_H
Defines interface class ISampleNode.
Defines class Lattice.
A crystal structure, defined by a Bravais lattice, a basis, and a position variance.
Definition: Crystal.h:35
Lattice3D m_lattice
Definition: Crystal.h:57
Crystal(const IParticle &basis, const Lattice3D &lattice, double position_variance=0)
Definition: Crystal.cpp:23
void accept(INodeVisitor *visitor) const final
Calls the INodeVisitor's visit method.
Definition: Crystal.h:42
std::vector< HomogeneousRegion > homogeneousRegions() const
Definition: Crystal.cpp:63
std::vector< const INode * > getChildren() const final
Returns a vector of children.
Definition: Crystal.cpp:88
IFormFactor * createTotalFormFactor(const IFormFactor &meso_crystal_form_factor, const IRotation *p_rotation, const kvector_t &translation) const
Definition: Crystal.cpp:49
Lattice3D transformedLattice(const IRotation *p_rotation=nullptr) const
Definition: Crystal.cpp:81
std::unique_ptr< IParticle > m_basis
Definition: Crystal.h:58
const double m_position_variance
Definition: Crystal.h:59
Crystal * clone() const final
Returns a clone of this ISampleNode object.
Definition: Crystal.cpp:44
Abstract base class for all form factors.
Definition: IFormFactor.h:36
Visitor interface to visit ISampleNode objects.
Definition: INodeVisitor.h:146
Abstract base class for Particle, ParticleComposition, ParticleCoreShell, MesoCrystal.
Definition: IParticle.h:33
Abstract base class for rotations.
Definition: Rotations.h:28
Abstract base class for sample components and properties related to scattering.
Definition: ISampleNode.h:28
A Bravais lattice, characterized by three basis vectors, and optionally an ISelectionRule.
Definition: Lattice3D.h:29
Definition: filesystem.h:81
Struct that contains information on a single homogeneous region of a particle inside a single layer.