occ
|
This class represents a unit cell of a crystal lattice. More...
#include <unitcell.h>
Public Member Functions | |
UnitCell () | |
UnitCell (double a, double b, double c, double alpha, double beta, double gamma) | |
UnitCell (const Vec3 &lengths, const Vec3 &angles) | |
UnitCell (const Mat3 &vectors) | |
double | a () const |
the length of the a-axis in Angstroms | |
double | b () const |
the length of the b-axis in Angstroms | |
double | c () const |
the length of the c-axis in Angstroms | |
double | alpha () const |
angle \(\alpha\), i.e. the angle between the b- and c-axes in radians | |
double | beta () const |
angle \(\beta\), i.e. the angle between the a- and c-axes in radians | |
double | gamma () const |
angle \(\gamma\), i.e. the angle between the a- and b-axes in radians | |
double | volume () const |
Volume of the unit cell in cubic Angstroms. | |
Mat3 | metric_tensor () const |
Mat3 | reciprocal_metric_tensor () const |
void | set_a (double a) |
Set the length of the a-axis. | |
void | set_b (double b) |
Set the length of the b-axis. | |
void | set_c (double c) |
Set the length of the c-axis. | |
void | set_alpha (double alpha) |
Set the angle of between the b- and c-axes. | |
void | set_beta (double beta) |
Set the angle of between the a- and c-axes. | |
void | set_gamma (double gamma) |
Set the angle of between the a- and b-axes. | |
bool | is_cubic () const |
Check if cubic i.e. \( a=b=c, \alpha=\beta=\gamma \). | |
bool | is_triclinic () const |
Check if triclinic i.e. | |
bool | is_monoclinic () const |
Check if monoclinic i.e. | |
bool | is_orthorhombic () const |
Check if orthorhombic i.e. | |
bool | is_tetragonal () const |
Check if tetragonal i.e. | |
bool | is_rhombohedral () const |
Check if rhombohedral i.e. | |
bool | is_hexagonal () const |
Check if hexagonal i.e. | |
bool | is_orthogonal () const |
Check if orthogonal i.e. \(\alpha = \beta = \gamma = 90^\circ\). | |
std::string | cell_type () const |
String representing the type of cell e.g. "monoclinic". | |
auto | to_cartesian (const Mat3N &coords) const |
Convert a given matrix of coordinates from fractional to Cartesian. | |
Mat3 | adp_adhoc_direct () const |
Calculate the direct matrix for ADP transformations. | |
Mat3 | adp_adhoc_inverse () const |
Calculate the inverse matrix for ADP transformations. | |
Mat6N | to_fractional_adp (const Mat6N &adp) const |
Convert ADPs from Cartesian to fractional coordinates. | |
Mat6N | to_cartesian_adp (const Mat6N &adp) const |
Convert ADPs from fractional to Cartesian coordinates. | |
auto | to_fractional (const Mat3N &coords) const |
Convert a given matrix of coordinates from Cartesian to fractional. | |
auto | to_reciprocal (const Mat3N &coords) const |
Convert a given matrix of coordinates from Cartesian to fractional. | |
const auto & | direct () const |
The direct matrix of this unit cell (columns are lattice vectors) | |
const auto & | reciprocal () const |
The reciprocal matrix of this unit cell (columns are reciprocal lattice vectors) | |
const auto & | inverse () const |
The inverse matrix of this unit cell (rows are reciprocal lattice vectors) | |
auto | a_vector () const |
the \(\bf{a}\) lattice vector | |
auto | b_vector () const |
the \(\bf{b}\) lattice vector | |
auto | c_vector () const |
the \(\bf{c}\) lattice vector | |
auto | a_star_vector () const |
the \(\bf{a^*}\) vector in reciprocal lattice | |
auto | b_star_vector () const |
the \(\bf{b^*}\) vector in reciprocal lattice | |
auto | c_star_vector () const |
the \(\bf{c^*}\) vector in reciprocal lattice | |
const auto & | lengths () const |
Vector of lengths \((a, b, c)\). | |
const auto & | angles () const |
Vector of lengths \((a, b, c)\). | |
HKL | hkl_limits (double d_min) const |
Return the maximum fractional coordinates \((h,k,l)\) needed to enclose a sphere of size d_min. | |
This class represents a unit cell of a crystal lattice.
A UnitCell describes the lattice vectors of a 3D crystal structure, including the 6 (possibly unique) parameters lengths \((a,b,c)\) and angles \((\alpha, \beta, \gamma)\). It also serves as a utility class for coordinate transforms, and other conversions and checks.
occ::crystal::UnitCell::UnitCell | ( | ) |
occ::crystal::UnitCell::UnitCell | ( | double | a, |
double | b, | ||
double | c, | ||
double | alpha, | ||
double | beta, | ||
double | gamma | ||
) |
occ::crystal::UnitCell::UnitCell | ( | const Mat3 & | vectors | ) |
|
inline |
the length of the a-axis in Angstroms
|
inline |
the \(\bf{a^*}\) vector in reciprocal lattice
|
inline |
the \(\bf{a}\) lattice vector
Mat3 occ::crystal::UnitCell::adp_adhoc_direct | ( | ) | const |
Calculate the direct matrix for ADP transformations.
This method computes the ad hoc direct matrix used specifically for transforming Anisotropic Displacement Parameters (ADPs).
Mat3 occ::crystal::UnitCell::adp_adhoc_inverse | ( | ) | const |
Calculate the inverse matrix for ADP transformations.
This method computes the ad hoc inverse matrix used specifically for transforming Anisotropic Displacement Parameters (ADPs).
|
inline |
angle \(\alpha\), i.e. the angle between the b- and c-axes in radians
|
inline |
Vector of lengths \((a, b, c)\).
|
inline |
the length of the b-axis in Angstroms
|
inline |
the \(\bf{b^*}\) vector in reciprocal lattice
|
inline |
the \(\bf{b}\) lattice vector
|
inline |
angle \(\beta\), i.e. the angle between the a- and c-axes in radians
|
inline |
the length of the c-axis in Angstroms
|
inline |
the \(\bf{c^*}\) vector in reciprocal lattice
|
inline |
the \(\bf{c}\) lattice vector
std::string occ::crystal::UnitCell::cell_type | ( | ) | const |
String representing the type of cell e.g. "monoclinic".
|
inline |
The direct matrix of this unit cell (columns are lattice vectors)
|
inline |
angle \(\gamma\), i.e. the angle between the a- and b-axes in radians
HKL occ::crystal::UnitCell::hkl_limits | ( | double | d_min | ) | const |
Return the maximum fractional coordinates \((h,k,l)\) needed to enclose a sphere of size d_min.
|
inline |
The inverse matrix of this unit cell (rows are reciprocal lattice vectors)
bool occ::crystal::UnitCell::is_cubic | ( | ) | const |
Check if cubic i.e. \( a=b=c, \alpha=\beta=\gamma \).
bool occ::crystal::UnitCell::is_hexagonal | ( | ) | const |
Check if hexagonal i.e.
\( a = b, a \ne c, \alpha = 90^\circ , \gamma = 120^\circ \)
bool occ::crystal::UnitCell::is_monoclinic | ( | ) | const |
Check if monoclinic i.e.
\( a \ne b \ne c, \alpha = \gamma = 90^\circ \ne \beta \)
|
inline |
Check if orthogonal i.e. \(\alpha = \beta = \gamma = 90^\circ\).
bool occ::crystal::UnitCell::is_orthorhombic | ( | ) | const |
Check if orthorhombic i.e.
\( a \ne b \ne c, \alpha = \beta = \gamma = 90^\circ \)
bool occ::crystal::UnitCell::is_rhombohedral | ( | ) | const |
Check if rhombohedral i.e.
\( a = b = c, \alpha = \beta = \gamma \ne 90^\circ \)
bool occ::crystal::UnitCell::is_tetragonal | ( | ) | const |
Check if tetragonal i.e.
\( a = b, a \ne c, \alpha = \beta = \gamma = 90^\circ \)
bool occ::crystal::UnitCell::is_triclinic | ( | ) | const |
Check if triclinic i.e.
\( a \ne b \ne c, \alpha \ne \beta \ne \gamma \)
|
inline |
Vector of lengths \((a, b, c)\).
|
inline |
|
inline |
The reciprocal matrix of this unit cell (columns are reciprocal lattice vectors)
|
inline |
void occ::crystal::UnitCell::set_a | ( | double | a | ) |
Set the length of the a-axis.
a | new length of the a-axis in Angstroms |
void occ::crystal::UnitCell::set_alpha | ( | double | alpha | ) |
Set the angle of between the b- and c-axes.
alpha | new angle between the b- and c-axes in radians |
void occ::crystal::UnitCell::set_b | ( | double | b | ) |
Set the length of the b-axis.
b | new length of the b-axis in Angstroms |
void occ::crystal::UnitCell::set_beta | ( | double | beta | ) |
Set the angle of between the a- and c-axes.
beta | new angle between the a- and c-axes in radians |
void occ::crystal::UnitCell::set_c | ( | double | c | ) |
Set the length of the c-axis.
c | new length of the c-axis in Angstroms |
void occ::crystal::UnitCell::set_gamma | ( | double | gamma | ) |
Set the angle of between the a- and b-axes.
gamma | new angle between the a- and b-axes in radians |
|
inline |
Convert a given matrix of coordinates from fractional to Cartesian.
coords | Mat3N of fractional coordinates |
Convert ADPs from fractional to Cartesian coordinates.
This method transforms a set of Anisotropic Displacement Parameters (ADPs) from fractional (ad-hoc) basis to Cartesian coordinate system.
adp | Mat6N of ADPs in fractional coordinates |
|
inline |
Convert a given matrix of coordinates from Cartesian to fractional.
coords | Mat3N of Cartesian coordinates |
Convert ADPs from Cartesian to fractional coordinates.
This method transforms a set of Anisotropic Displacement Parameters (ADPs) from Cartesian to the fractional (ad-hoc) coordinate system.
adp | Mat6N of ADPs in Cartesian coordinates |
|
inline |
Convert a given matrix of coordinates from Cartesian to fractional.
coords | Mat3N of Cartesian coordinates |
|
inline |
Volume of the unit cell in cubic Angstroms.