quatfit

Quatfit routines for PDB2PQR

This module is used to find the coordinates of a new atom based on a reference set of coordinates and a definition set of coordinates.

Original Code by David J. Heisterberg, The Ohio Supercomputer Center, 1224 Kinnear Rd., Columbus, OH 43212-1163, (614)292-6036, djh@osc.edu, djh@ohstpy.bitnet, ohstpy::djh

Translated to C from fitest.f program and interfaced with Xmol program by Jan Labanowski, jkl@osc.edu, jkl@ohstpy.bitnet, ohstpy::jkl

Todo

There are many unnecessary parameters in this module due to FORTRAN/C assumptions about how the code should behave.

Code author: David Heisterberg

Code author: Jan Labanowski

Code author: Jens Erik Nielsen

Code author: Todd Dolinsky

pdb2pqr.quatfit.center(numpoints, refcoords)[source]

Center a molecule using equally weighted points.

Parameters:
  • numpoints (int) – number of points
  • refcoords ([[float, float, float]]) – list of reference coordinates, with each set a list of form [x,y,z]
Returns:

(center of the set of points, moved refcoords relative to refcenter)

pdb2pqr.quatfit.find_coordinates(numpoints, refcoords, defcoords, defatomcoords)[source]

Driver for the quaternion file.

Provide the coordinates as inputs and obtain the coordinates for the new atom as output.

Parameters:
  • numpoints (int) – the number of points in each list
  • refcoords ([[float, float, float]]) – the reference coordinates, a list of lists of form [x,y,z]
  • defcoords ([[float, float, float]]) – the definition coordinates, a list of lists of form [x,y,z]
  • defatomcoords ([[float, float, float]]) – the definition coordinates for the atom to be placed in the reference frame
Returns:

the coordinates of the new atom in the reference frame

Return type:

[[float, float, float]]

pdb2pqr.quatfit.jacobi(amat, nrot)[source]

Jacobi diagonalizer with sorted output, only good for 4x4 matrices.

Parameters:
  • amat – Matrix to diagonalize
  • nrot (int) – maximum number of sweeps
Returns:

(eigenvalues, eigenvectors)

pdb2pqr.quatfit.q2mat(quat)[source]

Generate a left rotation matrix from a normalized quaternion

Parameters:quat ([[float, float, float, float]]) – the normalized quaternion
Returns:the rotation matrix
pdb2pqr.quatfit.qchichange(initcoords, refcoords, angle)[source]

Change the chiangle of the reference coordinate.

Change the chiangle of the reference coordinate using the initcoords and the given angle.

Parameters:
  • initcoords ([[float, float, float]]) – coordinates based on the point and basis atoms (one-dimensional list)
  • difchi (float) – the angle to use
  • refcoords ([[float, float, float]]) – the atoms to analyze (list of many coordinates)
Returns:

the new coordinates of the atoms

Return type:

[[float, float, float]]

pdb2pqr.quatfit.qfit(numpoints, refcoords, defcoords)[source]

Method for getting new atom coordinates from sets of reference and definition coordinates.

Todo

Remove hard-coded parameters of function.

Parameters:
  • numpoints (int) – the number of points in each list
  • refcoords ([[float, float, float]]) – list of reference coordinates
  • defcoords ([[float, float, float]]) – list of definition coordinates
Returns:

(reference center, definition center, left rotation matrix)

Return type:

([[float, float, float]], [[float, float, float]], [[float, float, float]])

pdb2pqr.quatfit.qtransform(numpoints, defcoords, refcenter, fitcenter, rotation)[source]

Transform coordinates using the reference.

Transform the set of defcoords using the reference center, the fit center, and a rotation matrix.

Parameters:
  • numpoints (int) – the number of points in each list
  • defcoords ([[float, float, float]]) – set of coordinates to be transformed using the reference center and a rotation matrix
  • refcenter ([[float, float, float]]) – the reference center
  • fitcenter ([float, float, float]) – the definition center
  • rotation ([[float, float, float]]) – the rotation matrix
Returns:

the coordinates of the new point

Return type:

[[float, float, float]]

pdb2pqr.quatfit.qtrfit(numpoints, defcoords, refcoords, nrot)[source]

Find the best-fit quaternion.

Find the quaternion, q, [and left rotation matrix, u] that minimizes

\[| qTXq - Y | ^ 2 [|uX - Y| ^ 2]\]

This is equivalent to maximizing

\[Re(q^T X^T q Y)\]

The left rotation matrix, u, is obtained from q by

\[u = qT1q\]
Parameters:
  • numpoints (int) – the number of points in each list
  • defcoords ([[float, float, float]]) – list of definition coordinates, with each set a list of form [x,y,z]
  • refcoords ([[float, float, float]]) – list of fitted coordinates, with each set a list of form [x,y,z]
  • nrot (int) – the maximum number of Jacobi sweeps
Returns:

(the best-fit quaternion, the best-fit left rotation matrix)

pdb2pqr.quatfit.rotmol(numpoints, coor, lrot)[source]

Rotate a molecule

Parameters:
  • numpoints (int) – the number of points in the list
  • coor ([[float, float, float]]) – the input coordinates
  • lrot ([[float, float, float]]) – the left rotation matrix
Returns:

the rotated coordinates

Return type:

[[float, float, float]]

pdb2pqr.quatfit.translate(numpoints, refcoords, center_, mode)[source]

Translate a molecule using equally weighted points.

Parameters:
  • numpoints (int) – number of points
  • refcoords – list of reference coordinates, with each set a list of form [x,y,z]
  • center ([float, float, float]) – center of the system
  • mode – if 1, center will be subtracted from refcoords; if 2, center will be added to refcoords
Type:

list

Returns:

moved refcoords relative to refcenter

Return type:

[[float, float, float]]