BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
Crystal.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file Sample/Particle/Crystal.cpp
6 //! @brief Implements 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 
16 #include "Base/Vector/RotMatrix.h"
21 
22 Crystal::Crystal(const IParticle& basis, const Lattice3D& lattice, double position_variance)
23  : Crystal(basis.clone(), lattice, position_variance)
24 {
25 }
26 
27 Crystal::Crystal(IParticle* basis, const Lattice3D& lattice, double position_variance)
28  : m_basis(basis)
29  , m_lattice(std::make_unique<Lattice3D>(lattice))
30  , m_position_variance(position_variance)
31 {
32 }
33 
34 Crystal::~Crystal() = default;
35 
37 {
39 }
40 
41 std::vector<const INode*> Crystal::nodeChildren() const
42 {
43  return std::vector<const INode*>() << m_basis << m_lattice;
44 }
45 
46 Crystal* Crystal::transformed(const IRotation* rotation, const R3& translation) const
47 {
48  const Lattice3D new_lattice = rotation ? m_lattice->rotated(rotation->rotMatrix()) : *m_lattice;
49  IParticle* new_basis{m_basis->clone()};
50  if (rotation)
51  new_basis->rotate(*rotation);
52  new_basis->translate(translation);
53  return new Crystal(new_basis, new_lattice, m_position_variance);
54 }
Defines class Crystal.
Defines class Lattice.
Defines class ParticleComposition.
Defines class Particle.
Declares class RotMatrix.
Defines IRotation classes.
A crystal structure, defined by a Bravais lattice, a basis, and a position variance.
Definition: Crystal.h:34
Crystal * transformed(const IRotation *rotation, const R3 &translation) const
Definition: Crystal.cpp:46
Crystal(const IParticle &basis, const Lattice3D &lattice, double position_variance=0)
Definition: Crystal.cpp:22
std::vector< const INode * > nodeChildren() const override
Returns all children.
Definition: Crystal.cpp:41
std::unique_ptr< Lattice3D > m_lattice
Definition: Crystal.h:57
Crystal * clone() const override
Returns a clone of this ISampleNode object.
Definition: Crystal.cpp:36
std::unique_ptr< IParticle > m_basis
Definition: Crystal.h:56
~Crystal() override
const double m_position_variance
Definition: Crystal.h:58
Abstract base class for Particle, ParticleComposition, ParticleCoreShell, MesoCrystal....
Definition: IParticle.h:31
Abstract base class for rotations.
Definition: Rotations.h:29
virtual RotMatrix rotMatrix() const =0
Returns transformation.
A Bravais lattice, characterized by three basis vectors, and optionally an ISelectionRule.
Definition: Lattice3D.h:30