# `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)

  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)

  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)

  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)

  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)

  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)

  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)

  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)

  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)

  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)

  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]]