mailr19107 - in /trunk: lib/structure/ pipe_control/structure/ target_functions/


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by edward on March 24, 2013 - 15:53:
Author: bugman
Date: Sun Mar 24 15:53:19 2013
New Revision: 19107

URL: http://svn.gna.org/viewcvs/relax?rev=19107&view=rev
Log:
Shifted the pipe_control.structure.superimpose module to 
lib.structure.superimpose.


Added:
    trunk/lib/structure/superimpose.py
      - copied unchanged from r19105, 
trunk/pipe_control/structure/superimpose.py
Removed:
    trunk/pipe_control/structure/superimpose.py
Modified:
    trunk/lib/structure/__init__.py
    trunk/pipe_control/structure/__init__.py
    trunk/pipe_control/structure/api_base.py
    trunk/pipe_control/structure/main.py
    trunk/target_functions/ens_pivot_finder.py

Modified: trunk/lib/structure/__init__.py
URL: 
http://svn.gna.org/viewcvs/relax/trunk/lib/structure/__init__.py?rev=19107&r1=19106&r2=19107&view=diff
==============================================================================
--- trunk/lib/structure/__init__.py (original)
+++ trunk/lib/structure/__init__.py Sun Mar 24 15:53:19 2013
@@ -23,5 +23,6 @@
 """The relax-lib structure package - a library of functions handling 
structural information."""
 
 __all__ = [
-    'rotor'
+    'rotor',
+    'superimpose'
 ]

Modified: trunk/pipe_control/structure/__init__.py
URL: 
http://svn.gna.org/viewcvs/relax/trunk/pipe_control/structure/__init__.py?rev=19107&r1=19106&r2=19107&view=diff
==============================================================================
--- trunk/pipe_control/structure/__init__.py (original)
+++ trunk/pipe_control/structure/__init__.py Sun Mar 24 15:53:19 2013
@@ -35,14 +35,15 @@
 independent of parser, writer, etc.
 """
 
-__all__ = [ 'api_base',
-            'cones',
-            'geometric',
-            'internal',
-            'main',
-            'mass',
-            'pdb_read',
-            'pdb_write',
-            'scientific',
-            'statistics',
-            'superimpose' ]
+__all__ = [
+    'api_base',
+    'cones',
+    'geometric',
+    'internal',
+    'main',
+    'mass',
+    'pdb_read',
+    'pdb_write',
+    'scientific',
+    'statistics'
+]

Modified: trunk/pipe_control/structure/api_base.py
URL: 
http://svn.gna.org/viewcvs/relax/trunk/pipe_control/structure/api_base.py?rev=19107&r1=19106&r2=19107&view=diff
==============================================================================
--- trunk/pipe_control/structure/api_base.py (original)
+++ trunk/pipe_control/structure/api_base.py Sun Mar 24 15:53:19 2013
@@ -37,7 +37,7 @@
 # relax module import.
 from data_store.relax_xml import fill_object_contents, object_to_xml, 
xml_to_object
 from lib.float import floatAsByteArray, packBytesAsPyFloat
-from pipe_control.structure.superimpose import kabsch
+from lib.structure.superimpose import kabsch
 from lib.errors import RelaxError, RelaxFileError, 
RelaxFromXMLNotEmptyError, RelaxImplementError
 from lib.io import file_root
 from lib.warnings import RelaxWarning

Modified: trunk/pipe_control/structure/main.py
URL: 
http://svn.gna.org/viewcvs/relax/trunk/pipe_control/structure/main.py?rev=19107&r1=19106&r2=19107&view=diff
==============================================================================
--- trunk/pipe_control/structure/main.py (original)
+++ trunk/pipe_control/structure/main.py Sun Mar 24 15:53:19 2013
@@ -38,7 +38,7 @@
 from pipe_control.structure.internal import Internal
 from pipe_control.structure.scientific import Scientific_data
 from pipe_control.structure.statistics import atomic_rmsd
-from pipe_control.structure.superimpose import fit_to_first, fit_to_mean
+from lib.structure.superimpose import fit_to_first, fit_to_mean
 from target_functions.ens_pivot_finder import Pivot_finder
 from lib.errors import RelaxError, RelaxFileError, RelaxNoPdbError, 
RelaxNoSequenceError
 from lib.io import get_file_path, open_write_file, write_data, 
write_spin_data

Removed: trunk/pipe_control/structure/superimpose.py
URL: 
http://svn.gna.org/viewcvs/relax/trunk/pipe_control/structure/superimpose.py?rev=19106&view=auto
==============================================================================
--- trunk/pipe_control/structure/superimpose.py (original)
+++ trunk/pipe_control/structure/superimpose.py (removed)
@@ -1,269 +1,0 @@
-###############################################################################
-#                                                                            
 #
-# Copyright (C) 2011-2013 Edward d'Auvergne                                  
 #
-#                                                                            
 #
-# This file is part of the program relax (http://www.nmr-relax.com).         
 #
-#                                                                            
 #
-# This program is free software: you can redistribute it and/or modify       
 #
-# it under the terms of the GNU General Public License as published by       
 #
-# the Free Software Foundation, either version 3 of the License, or          
 #
-# (at your option) any later version.                                        
 #
-#                                                                            
 #
-# This program is distributed in the hope that it will be useful,            
 #
-# but WITHOUT ANY WARRANTY; without even the implied warranty of             
 #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the              
 #
-# GNU General Public License for more details.                               
 #
-#                                                                            
 #
-# You should have received a copy of the GNU General Public License          
 #
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.      
 #
-#                                                                            
 #
-###############################################################################
-
-# Module docstring.
-"""Module for handling all types of structural superimpositions."""
-
-# Python module imports.
-from copy import deepcopy
-from math import pi
-from numpy import diag, dot, eye, float64, outer, sign, transpose, zeros
-from numpy.linalg import det, norm, svd
-
-# relax module import.
-from pipe_control.structure.statistics import calc_mean_structure
-from lib.geometry.rotations import R_to_axis_angle, R_to_euler_zyz
-
-
-def find_centroid(coords):
-    """Calculate the centroid of the structural coordinates.
-
-    @keyword coord:     The atomic coordinates.
-    @type coord:        numpy rank-2, Nx3 array
-    @return:            The centroid.
-    @rtype:             numpy rank-1, 3D array
-    """
-
-    # The sum.
-    centroid = coords.sum(0) / coords.shape[0]
-
-    # Return.
-    return centroid
-
-
-def fit_to_first(models=None, coord=None, centroid=None):
-    """Superimpose a set of structural models using the fit to first 
algorithm.
-
-    @keyword models:    The list of models to superimpose.
-    @type models:       list of int
-    @keyword coord:     The list of coordinates of all models to 
superimpose.  The first index is the models, the second is the atomic 
positions, and the third is the xyz coordinates.
-    @type coord:        list of numpy rank-2, Nx3 arrays
-    @keyword centroid:  An alternative position of the centroid to allow for 
different superpositions, for example of pivot point motions.
-    @type centroid:     list of float or numpy rank-1, 3D array
-    @return:            The lists of translation vectors, rotation matrices, 
and rotation pivots.
-    @rtype:             list of numpy rank-1 3D arrays, list of numpy rank-2 
3D arrays, list of numpy rank-1 3D arrays
-    """
-
-    # Print out.
-    print("\nSuperimposition of structural models %s using the 'fit to 
first' algorithm." % models)
-
-    # Init (there is no transformation for the first model).
-    T_list = [zeros(3, float64)]
-    R_list = [eye(3, dtype=float64)]
-    pivot_list = [zeros(3, float64)]
-
-    # Loop over the ending models.
-    for i in range(1, len(models)):
-        # Calculate the displacements (Kabsch algorithm).
-        trans_vect, trans_dist, R, axis, angle, pivot = 
kabsch(name_from='model %s'%models[0], name_to='model %s'%models[i], 
coord_from=coord[i], coord_to=coord[0], centroid=centroid)
-
-        # Store the transforms.
-        T_list.append(trans_vect)
-        R_list.append(R)
-        pivot_list.append(pivot)
-
-    # Return the transform data.
-    return T_list, R_list, pivot_list
-
-
-def fit_to_mean(models=None, coord=None, centroid=None, verbosity=1):
-    """Superimpose a set of structural models using the fit to first 
algorithm.
-
-    @keyword models:    The list of models to superimpose.
-    @type models:       list of int
-    @keyword coord:     The list of coordinates of all models to 
superimpose.  The first index is the models, the second is the atomic 
positions, and the third is the xyz coordinates.
-    @type coord:        list of numpy rank-2, Nx3 arrays
-    @keyword centroid:  An alternative position of the centroid to allow for 
different superpositions, for example of pivot point motions.
-    @type centroid:     list of float or numpy rank-1, 3D array
-    @keyword verbosity: The amount of information to print out.  If 0, 
nothing will be printed.
-    @type verbosity:    int
-    @return:            The lists of translation vectors, rotation matrices, 
and rotation pivots.
-    @rtype:             list of numpy rank-1 3D arrays, list of numpy rank-2 
3D arrays, list of numpy rank-1 3D arrays
-    """
-
-    # Print out.
-    if verbosity:
-        print("\nSuperimposition of structural models %s using the 'fit to 
mean' algorithm." % models)
-
-    # Duplicate the coordinates.
-    orig_coord = deepcopy(coord)
-
-    # Initialise the displacement lists.
-    T_list = []
-    R_list = []
-    pivot_list = []
-
-    # Initialise the mean structure.
-    N = len(coord[0])
-    mean = zeros((N, 3), float64)
-
-    # Iterative fitting to mean.
-    converged = False
-    iter = 0
-    while not converged:
-        # Print out.
-        if verbosity:
-            print("\nIteration %i of the algorithm." % iter)
-            print("%-10s%-25s%-25s" % ("Model", "Translation (Angstrom)", 
"Rotation (deg)"))
-
-        # Calculate the mean structure.
-        calc_mean_structure(coord, mean)
-
-        # Fit each model to the mean.
-        converged = True
-        for i in range(len(models)):
-            # Calculate the displacements (Kabsch algorithm).
-            trans_vect, trans_dist, R, axis, angle, pivot = 
kabsch(name_from='model %s'%models[0], name_to='mean', coord_from=coord[i], 
coord_to=mean, centroid=centroid, verbosity=0)
-
-            # Table printout.
-            if verbosity:
-                print("%-10i%25.3g%25.3g" % (i, trans_dist, (angle / 2.0 / 
pi * 360.0)))
-
-            # Shift the coordinates.
-            for j in range(N):
-                # Translate.
-                coord[i][j] += trans_vect
-
-                # The pivot to atom vector.
-                coord[i][j] -= pivot
-
-                # Rotation.
-                coord[i][j] = dot(R, coord[i][j])
-
-                # The new position.
-                coord[i][j] += pivot
-
-            # Convergence test.
-            if trans_dist > 1e-10 or angle > 1e-10:
-                converged = False
-
-        # Increment the iteration number.
-        iter += 1
-
-    # Perform the fit once from the original coordinates to obtain the full 
transforms.
-    for i in range(len(models)):
-        # Calculate the displacements (Kabsch algorithm).
-        trans_vect, trans_dist, R, axis, angle, pivot = 
kabsch(name_from='model %s'%models[i], name_to='the mean structure', 
coord_from=orig_coord[i], coord_to=mean, centroid=centroid, verbosity=0)
-
-        # Store the transforms.
-        T_list.append(trans_vect)
-        R_list.append(R)
-        pivot_list.append(pivot)
-
-    # Return the transform data.
-    return T_list, R_list, pivot_list
-
-
-def kabsch(name_from=None, name_to=None, coord_from=None, coord_to=None, 
centroid=None, verbosity=1):
-    """Calculate the rotational and translational displacements between the 
two given coordinate sets.
-
-    This uses the U{Kabsch 
algorithm<http://en.wikipedia.org/wiki/Kabsch_algorithm>}.
-
-
-    @keyword name_from:     The name of the starting structure, used for the 
printouts.
-    @type name_from:        str
-    @keyword name_to:       The name of the ending structure, used for the 
printouts.
-    @type name_to:          str
-    @keyword coord_from:    The list of atomic coordinates for the starting 
structure.
-    @type coord_from:       numpy rank-2, Nx3 array
-    @keyword coord_to:      The list of atomic coordinates for the ending 
structure.
-    @type coord_to:         numpy rank-2, Nx3 array
-    @keyword centroid:      An alternative position of the centroid, used 
for studying pivoted systems.
-    @type centroid:         list of float or numpy rank-1, 3D array
-    @return:                The translation vector T, translation distance 
d, rotation matrix R, rotation axis r, rotation angle theta, and the 
rotational pivot defined as the centroid of the ending structure.
-    @rtype:                 numpy rank-1 3D array, float, numpy rank-2 3D 
array, numpy rank-1 3D array, float, numpy rank-1 3D array
-    """
-
-    # Calculate the centroids.
-    if centroid != None:
-        centroid_from = centroid
-        centroid_to = centroid
-    else:
-        centroid_from = find_centroid(coord_from)
-        centroid_to = find_centroid(coord_to)
-
-    # The translation.
-    trans_vect = centroid_to - centroid_from
-    trans_dist = norm(trans_vect)
-
-    # Calculate the rotation.
-    R = kabsch_rotation(coord_from=coord_from, coord_to=coord_to, 
centroid_from=centroid_from, centroid_to=centroid_to)
-    axis, angle = R_to_axis_angle(R)
-    a, b, g = R_to_euler_zyz(R)
-
-    # Print out.
-    if verbosity >= 1:
-        print("\n\nCalculating the rotational and translational 
displacements from %s to %s using the Kabsch algorithm.\n" % (name_from, 
name_to))
-        print("Start centroid:          [%20.15f, %20.15f, %20.15f]" % 
(centroid_from[0], centroid_from[1], centroid_from[2]))
-        print("End centroid:            [%20.15f, %20.15f, %20.15f]" % 
(centroid_to[0], centroid_to[1], centroid_to[2]))
-        print("Translation vector:      [%20.15f, %20.15f, %20.15f]" % 
(trans_vect[0], trans_vect[1], trans_vect[2]))
-        print("Translation distance:    %.15f" % trans_dist)
-        print("Rotation matrix:")
-        print("   [[%20.15f, %20.15f, %20.15f]" % (R[0, 0], R[0, 1], R[0, 
2]))
-        print("    [%20.15f, %20.15f, %20.15f]" % (R[1, 0], R[1, 1], R[1, 
2]))
-        print("    [%20.15f, %20.15f, %20.15f]]" % (R[2, 0], R[2, 1], R[2, 
2]))
-        print("Rotation axis:           [%20.15f, %20.15f, %20.15f]" % 
(axis[0], axis[1], axis[2]))
-        print("Rotation euler angles:   [%20.15f, %20.15f, %20.15f]" % (a, 
b, g))
-        print("Rotation angle (deg):    %.15f" % (angle / 2.0 / pi * 360.0))
-
-    # Return the data.
-    return trans_vect, trans_dist, R, axis, angle, centroid_to
-
-
-def kabsch_rotation(coord_from=None, coord_to=None, centroid_from=None, 
centroid_to=None):
-    """Calculate the rotation via SVD.
-
-    @keyword coord_from:    The list of atomic coordinates for the starting 
structure.
-    @type coord_from:       numpy rank-2, Nx3 array
-    @keyword coord_to:      The list of atomic coordinates for the ending 
structure.
-    @type coord_to:         numpy rank-2, Nx3 array
-    @keyword centroid_from: The starting centroid.
-    @type centroid_from:    numpy rank-1, 3D array
-    @keyword centroid_to:   The ending centroid.
-    @type centroid_to:      numpy rank-1, 3D array
-    @return:                The rotation matrix.
-    @rtype:                 numpy rank-2, 3D array
-    """
-
-    # Initialise the covariance matrix A.
-    A = zeros((3, 3), float64)
-
-    # Loop over the atoms.
-    for i in range(coord_from.shape[0]):
-        # The positions shifted to the origin.
-        orig_from = coord_from[i] - centroid_from
-        orig_to = coord_to[i] - centroid_to
-
-        # The outer product.
-        A += outer(orig_from, orig_to)
-
-    # SVD.
-    U, S, V = svd(A)
-
-    # The handedness of the covariance matrix.
-    d = sign(det(A))
-    D = diag([1, 1, d])
-
-    # The rotation.
-    R = dot(transpose(V), dot(D, transpose(U)))
-
-    # Return the rotation.
-    return R

Modified: trunk/target_functions/ens_pivot_finder.py
URL: 
http://svn.gna.org/viewcvs/relax/trunk/target_functions/ens_pivot_finder.py?rev=19107&r1=19106&r2=19107&view=diff
==============================================================================
--- trunk/target_functions/ens_pivot_finder.py (original)
+++ trunk/target_functions/ens_pivot_finder.py Sun Mar 24 15:53:19 2013
@@ -27,7 +27,7 @@
 
 # relax module import.
 from pipe_control.structure.statistics import atomic_rmsd
-from pipe_control.structure.superimpose import fit_to_mean
+from lib.structure.superimpose import fit_to_mean
 
 
 class Pivot_finder:




Related Messages


Powered by MHonArc, Updated Sun Mar 24 16:00:02 2013