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
15
#include "
Sample/Particle/Crystal.h
"
16
#include "
Base/Vector/RotMatrix.h
"
17
#include "
Sample/Lattice/Lattice3D.h
"
18
#include "
Sample/Particle/Particle.h
"
19
#include "
Sample/Particle/ParticleComposition.h
"
20
#include "
Sample/Scattering/Rotations.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
36
Crystal
*
Crystal::clone
()
const
37
{
38
return
new
Crystal
(*
m_basis
, *
m_lattice
,
m_position_variance
);
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
}
Crystal.h
Defines class Crystal.
Lattice3D.h
Defines class Lattice.
ParticleComposition.h
Defines class ParticleComposition.
Particle.h
Defines class Particle.
RotMatrix.h
Declares class RotMatrix.
Rotations.h
Defines IRotation classes.
Crystal
A crystal structure, defined by a Bravais lattice, a basis, and a position variance.
Definition:
Crystal.h:34
Crystal::transformed
Crystal * transformed(const IRotation *rotation, const R3 &translation) const
Definition:
Crystal.cpp:46
Crystal::Crystal
Crystal(const IParticle &basis, const Lattice3D &lattice, double position_variance=0)
Definition:
Crystal.cpp:22
Crystal::nodeChildren
std::vector< const INode * > nodeChildren() const override
Returns all children.
Definition:
Crystal.cpp:41
Crystal::m_lattice
std::unique_ptr< Lattice3D > m_lattice
Definition:
Crystal.h:57
Crystal::clone
Crystal * clone() const override
Returns a clone of this ISampleNode object.
Definition:
Crystal.cpp:36
Crystal::m_basis
std::unique_ptr< IParticle > m_basis
Definition:
Crystal.h:56
Crystal::~Crystal
~Crystal() override
Crystal::m_position_variance
const double m_position_variance
Definition:
Crystal.h:58
IParticle
Abstract base class for Particle, ParticleComposition, ParticleCoreShell, MesoCrystal....
Definition:
IParticle.h:31
IRotation
Abstract base class for rotations.
Definition:
Rotations.h:29
IRotation::rotMatrix
virtual RotMatrix rotMatrix() const =0
Returns transformation.
Lattice3D
A Bravais lattice, characterized by three basis vectors, and optionally an ISelectionRule.
Definition:
Lattice3D.h:30
Sample
Particle
Crystal.cpp
Generated by
1.9.1