module Chem::Spatial
Defined in:
chem/spatial.crchem/spatial/coordinates_proxy.cr
chem/spatial/grid.cr
chem/spatial/kdtree.cr
chem/spatial/mat3.cr
chem/spatial/parallelepiped.cr
chem/spatial/qcp.cr
chem/spatial/quat.cr
chem/spatial/size3.cr
chem/spatial/transform.cr
chem/spatial/vec3.cr
Class Method Summary
- .angle(cell : Parallelepiped, a : Vec3, b : Vec3, c : Vec3) : Float64
- .angle(cell : Parallelepiped, a : Atom, b : Atom, c : Atom) : Float64
- .angle(a : Vec3, b : Vec3, c : Vec3) : Float64
- .angle(a : Atom, b : Atom, c : Atom) : Float64
- .angle(a : Vec3, b : Vec3) : Float64
- .dihedral(cell : Parallelepiped, a : Vec3, b : Vec3, c : Vec3, d : Vec3) : Float64
- .dihedral(cell : Parallelepiped, a : Atom, b : Atom, c : Atom, d : Atom) : Float64
- .dihedral(a : Vec3, b : Vec3, c : Vec3, d : Vec3) : Float64
- .dihedral(a : Atom, b : Atom, c : Atom, d : Atom) : Float64
- .dihedral(a : Vec3, b : Vec3, c : Vec3) : Float64
- .distance(cell : Parallelepiped, a : Vec3, b : Vec3) : Float64
- .distance(cell : Parallelepiped, a : Atom, b : Atom) : Float64
- .distance(a : Vec3, b : Vec3) : Float64
-
.distance(q1 : Quat, q2 : Quat) : Float64
Returns the distance between two quaternions.
- .distance(a : Atom, b : Atom) : Float64
- .distance2(cell : Parallelepiped, a : Vec3, b : Vec3) : Float64
- .distance2(cell : Parallelepiped, a : Atom, b : Atom) : Float64
- .distance2(a : Vec3, b : Vec3) : Float64
- .distance2(a : Atom, b : Atom) : Float64
- .improper(cell : Parallelepiped, a : Vec3, b : Vec3, c : Vec3, d : Vec3) : Float64
- .improper(cell : Parallelepiped, a : Atom, b : Atom, c : Atom, d : Atom) : Float64
- .improper(a : Vec3, b : Vec3, c : Vec3, d : Vec3) : Float64
- .improper(a : Atom, b : Atom, c : Atom, d : Atom) : Float64
-
.qcp(pos : Indexable(Vec3), ref_pos : Indexable(Vec3), weights : Indexable(Float64) | Nil = nil) : Tuple(Quat, Float64)
Computes the optimal rotation and minimum root mean square deviation (RMSD) in Å between two sets of coordinates pos and ref_pos using the quaternion-based characteristic polynomial (QCP) method [Theobald2005].
Class Method Detail
Returns the distance between two quaternions.
It uses the formula acos(2 * p·q^2 - 1)
, which returns the angular
distance (0 to π) between the orientations represented by the
two quaternions. Taken from
https://math.stackexchange.com/a/90098.
Computes the optimal rotation and minimum root mean square deviation (RMSD) in Å between two sets of coordinates pos and ref_pos using the quaternion-based characteristic polynomial (QCP) method [Theobald2005].
The QCP method is among the fastest known methods to determine the optimal least-squares rotation matrix between the two coordinate sets. The algorithm defines the problem of superposition as finding the root of a quaternion-based characteristic polynomial of a "key" matrix. Such approach avoids the costly eigen decomposition and matrix inversion operations, which are commonly employed in other methods.
In the QCP method, the RMSD is first evaluated by solving for the
most positive eigenvalue of the 4×4 key matrix using a
Newton-Raphson algorithm that quickly finds the largest root
(eigenvalue) from the characteristic polynomial. The minimum RMSD is
then easily calculated from the largest eigenvalue. If not nil
,
the weights determine the relative weights of each coordinate when
calculating the intermediate inner products. The optimal rotation is
given by the corresponding eigenvector, which can be calculated from
a column of the adjoint matrix [Liu2009].
Reference C implementation found at https://theobald.brandeis.edu/qcp.
WARNING Coordinate sets must be centered at the origin.
NOTE Prefer using the Spatial.rmsd
methods, which takes care of
centering the coordinates and whether or not the coordinate sets
should be superimposed first.
References
- [Theobald2005] Theobald, D. L. Rapid calculation of RMSDs using a quaternion-based characteristic polynomial. Acta Cryst., 2005, A61, 478–480.
- [Liu2009] Liu, P., Agrafiotis, D. K., & Theobald, D. L. Fast determination of the optimal rotational matrix for macromolecular superpositions. J. Comput. Chem., 2010, 31 (7), 1561–1563.