BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
LatticeUtils.cpp
Go to the documentation of this file.
1 // ************************************************************************** //
2 //
3 // BornAgain: simulate and fit scattering at grazing incidence
4 //
5 //! @file Sample/Lattice/LatticeUtils.cpp
6 //! @brief Implements factory functions for different types of lattices and orientations.
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 
17 
18 Lattice LatticeUtils::createFCCLattice(double lattice_constant,
19  const ILatticeOrientation& orientation)
20 {
21  Lattice prim_cubic = Lattice::createCubicLattice(1.0);
22  std::unique_ptr<ILatticeOrientation> P_orientation(orientation.clone());
23  P_orientation->usePrimitiveLattice(prim_cubic);
24  auto rotation = P_orientation->transformationMatrix();
25  Lattice fcc = Lattice::createFCCLattice(lattice_constant);
26  return fcc.createTransformedLattice(rotation);
27 }
28 
29 Lattice LatticeUtils::createHCPLattice(double a, double c, const ILatticeOrientation& orientation)
30 {
31  Lattice prim_hexagonal = Lattice::createHexagonalLattice(1.0, c / a);
32  std::unique_ptr<ILatticeOrientation> P_orientation(orientation.clone());
33  P_orientation->usePrimitiveLattice(prim_hexagonal);
34  auto rotation = P_orientation->transformationMatrix();
36  return hcp.createTransformedLattice(rotation);
37 }
38 
39 Lattice LatticeUtils::createBCTLattice(double a, double c, const ILatticeOrientation& orientation)
40 {
41  Lattice prim_tetragonal = Lattice::createTetragonalLattice(1.0, c / a);
42  std::unique_ptr<ILatticeOrientation> P_orientation(orientation.clone());
43  P_orientation->usePrimitiveLattice(prim_tetragonal);
44  auto rotation = P_orientation->transformationMatrix();
46  return hcp.createTransformedLattice(rotation);
47 }
Defines interface ILatticeOrientation and subclasses.
Defines factory functions for different types of lattices and orientations.
virtual ILatticeOrientation * clone() const =0
A lattice with three basis vectors.
Definition: Lattice.h:28
static Lattice createHCPLattice(double a, double c)
TODO: Clarify how this is meant: HCP is not a Bravais lattice.
Definition: Lattice.cpp:161
static Lattice createBCTLattice(double a, double c)
Returns a body-centered cubic (cI) lattice with edge length a.
Definition: Lattice.cpp:177
Lattice createTransformedLattice(const Transform3D &transform) const
Creates transformed lattice.
Definition: Lattice.cpp:55
static Lattice createTetragonalLattice(double a, double c)
Returns a primitive tetragonal (tP) lattice with square base edge a and height c.
Definition: Lattice.cpp:169
static Lattice createFCCLattice(double a)
Returns a face-centered cubic (cF) lattice with edge length a.
Definition: Lattice.cpp:144
static Lattice createHexagonalLattice(double a, double c)
Returns a primitive hexagonal (hP) lattice with hexagonal edge a and height c.
Definition: Lattice.cpp:153
static Lattice createCubicLattice(double a)
Returns a primitive cubic (cP) lattice with edge length a.
Definition: Lattice.cpp:136
Lattice createHCPLattice(double a, double c, const ILatticeOrientation &orientation)
Lattice createFCCLattice(double lattice_constant, const ILatticeOrientation &orientation)
Lattice createBCTLattice(double a, double c, const ILatticeOrientation &orientation)