Loading...
Searching...
No Matches
CrystalTools Class Reference

The CrystalTools class contains a collection of static functions that perform common crystallographic operations on a Core::Molecule.

`#include <avogadro/core/crystaltools.h>`

## Public Types

enum | Option { None = 0x0 , TransformAtoms = 0x1 , RightHanded = 0x2 }
| The Option enum provides bitwise option flags for the various algorithms. More...
using | Options = int

## Static Public Member Functions

static bool | wrapAtomsToUnitCell (Molecule &molecule)
static bool | rotateToStandardOrientation (Molecule &molecule, Options opts=None)
static bool | setVolume (Molecule &molecule, Real newVolume, Options opts=None)
static bool | niggliReduce (Molecule &molecule, Options opts=None)
static bool | isNiggliReduced (const Molecule &mol)
static bool | buildSupercell (Molecule &molecule, unsigned int a, unsigned int b, unsigned int c)
static bool | setCellMatrix (Molecule &molecule, const Matrix3 &newCellColMatrix, Options opt=None)
static bool | fractionalCoordinates (const UnitCell &unitCell, const Array< Vector3 > &cart, Array< Vector3 > &frac)
static bool | fractionalCoordinates (const Molecule &molecule, Array< Vector3 > &coords)
static bool | setFractionalCoordinates (Molecule &molecule, const Array< Vector3 > &coords)

## Member Enumeration Documentation

## Option

enum Option

Enumerator
None | No options specified.
TransformAtoms | Transform atoms along with the unit cell.
RightHanded | Enforce right-handed system

## Member Function Documentation

## wrapAtomsToUnitCell()

bool wrapAtomsToUnitCell | ( | Molecule & | molecule | ) |

static

Adjust the atomic positions in molecule so that the fractional (lattice) coordinates of all atoms are in the range [0, 1].

Returns
  True on success, false otherwise.

## rotateToStandardOrientation()

bool rotateToStandardOrientation | ( | Molecule & | molecule,
|  | Options | opts = None )

static

This function will rotate the input molecule so that the unit cell's 'a' vector is aligned to the x-axis, and the 'b' axis is in the xy-plane. It does not use trig functions or the cell parameters, since such implementations are fragile and cannot handle negative cell angles. The derivation of this algorithm can be found at http://xtalopt.openmolecules.net/misc/rotateToStdOrientation.pdf.

Parameters

  opts | If TransformAtoms is specified, the atoms in molecule are rotated along with the unit cell.

Returns
  True on success, false otherwise.

## setVolume()

bool setVolume | ( | Molecule & | molecule,
|  | Real | newVolume,
|  | Options | opts = None )

static

Isotropically scale the volume of the unit cell in molecule to newVolume (in cubic angstrom).

Parameters

  opts | If TransformAtoms is specified, the atoms in molecule are adjusted so that their fractional (lattice) coordinates are preserved.

Returns
  True on success, false on failure.

## niggliReduce()

bool niggliReduce | ( | Molecule & | molecule,
|  | Options | opts = None )

static

Perform a Niggli reduction on molecule's unit cell. This produces a canonical unit cell representation that strives to be as cubic as possible.

Note
  Implements the niggli reduction algorithm detailed in: Grosse-Kunstleve RW, Sauter NK, Adams PD. Numerically stable algorithms for the computation of reduced unit cells. Acta Crystallographica Section A Foundations of Crystallography. 2003;60(1):1-6.

Parameters

  opts | If TransformAtoms is specified, the atom positions are modified to ensure that the same extended atomic structure from the input is represented by the output.

Returns
  True on success, false on failure.

## isNiggliReduced()

bool isNiggliReduced | ( | const Molecule & | mol | ) |

static

Return true if the unit cell in molecule is already Niggli-reduced. This method checks the conditions listed in the paper Gruber B.. Acta Cryst. A. 1973;29(4):433-440.

## buildSupercell()

bool buildSupercell | ( | Molecule & | molecule,
|  | unsigned int | a,
|  | unsigned int | b,
|  | unsigned int | c )

static

Build a supercell by expanding upon the unit cell of molecule. It will only return false if the molecule does not have a unit cell or if a, b, or c is set to zero.

Parameters

  a | The number of units along lattice vector a for the supercell
  b | The number of units along lattice vector b for the supercell
  c | The number of units along lattice vector c for the supercell

Returns
  True on success, false on failure.

## setCellMatrix()

bool setCellMatrix | ( | Molecule & | molecule,
|  | const Matrix3 & | newCellColMatrix,
|  | Options | opt = None )

static

Set the unit cell in molecule to represent the real-space column-vector unit cell description in newCellColMatrix. A unit cell is created if needed.

Parameters

  opt | If TransformAtoms is specified, the atoms in molecule are adjusted so that their fractional (lattice) coordinates are preserved. This option is ignored if the input molecule has no unit cell.

Returns
  True on success, false otherwise.

## fractionalCoordinates() [1/2]

bool fractionalCoordinates | ( | const UnitCell & | unitCell,
|  | const Array< Vector3 > & | cart,
|  | Array< Vector3 > & | frac )

static

Populate the frac vector with the fractional representation of the cartesian coordinates in cart, using unitCell to perform the coordinate transformation.

Returns
  True on success, false otherwise.

## fractionalCoordinates() [2/2]

bool fractionalCoordinates | ( | const Molecule & | molecule,
|  | Array< Vector3 > & | coords )

static

Populate the coords vector with the fractional coordinates of the atoms in molecule, using the unit cell of molecule to perform the coordinate transformation. Coordinates are ordered the same as the Molecule::atomPositions3d() result.

Returns
  True on success, false otherwise.

## setFractionalCoordinates()

bool setFractionalCoordinates | ( | Molecule & | molecule,
|  | const Array< Vector3 > & | coords )

static

Set the atomic positions of molecule to the fractional coordinates in coords, using the unit cell of molecule to perform the coordinate transformation.

The documentation for this class was generated from the following file:

- crystaltools.h