Author: bugman
Date: Fri Nov 21 08:58:39 2014
New Revision: 26676
URL: http://svn.gna.org/viewcvs/relax?rev=26676&view=rev
Log:
Huge bug fix for the frame_order.pdb_model user function - the single axis
direction was incorrect.
In the PDB representation of the frame order motion for the rotor and isotropic
cone models (rotor,
free rotor, isotropic cone, free rotor isotropic cone, and torsionless
isotropic cone), the X and Z
axes were swapped. This is because the eigenframe of the motion was being
incorrectly constructed
via the lib.geometry.rotations.two_vect_to_R() function.
For better control, the
specific_analyses.frame_order.geometric.frame_from_axis() function has been
created. This constructs a full motional eigenframe from the Z-axis. The
problem was detected via
the new Frame_order.test_pdb_model_rotor system test.
Modified:
branches/frame_order_cleanup/specific_analyses/frame_order/geometric.py
Modified:
branches/frame_order_cleanup/specific_analyses/frame_order/geometric.py
URL:
http://svn.gna.org/viewcvs/relax/branches/frame_order_cleanup/specific_analyses/frame_order/geometric.py?rev=26676&r1=26675&r2=26676&view=diff
==============================================================================
--- branches/frame_order_cleanup/specific_analyses/frame_order/geometric.py
(original)
+++ branches/frame_order_cleanup/specific_analyses/frame_order/geometric.py
Fri Nov 21 08:58:39 2014
@@ -25,7 +25,8 @@
# Python module imports.
from copy import deepcopy
from math import pi
-from numpy import array, dot, eye, float64, zeros
+from numpy import array, cross, dot, eye, float64, zeros
+from numpy.linalg import norm
import sys
from warnings import warn
@@ -33,7 +34,7 @@
from lib.errors import RelaxFault
from lib.frame_order.conversions import create_rotor_axis_alpha,
create_rotor_axis_euler, create_rotor_axis_spherical
from lib.frame_order.variables import MODEL_DOUBLE_ROTOR, MODEL_FREE_ROTOR,
MODEL_ISO_CONE, MODEL_ISO_CONE_FREE_ROTOR, MODEL_ISO_CONE_TORSIONLESS,
MODEL_LIST_DOUBLE, MODEL_LIST_FREE_ROTORS, MODEL_LIST_ISO_CONE,
MODEL_LIST_PSEUDO_ELLIPSE, MODEL_PSEUDO_ELLIPSE,
MODEL_PSEUDO_ELLIPSE_FREE_ROTOR, MODEL_PSEUDO_ELLIPSE_TORSIONLESS, MODEL_ROTOR
-from lib.geometry.rotations import euler_to_R_zyz, two_vect_to_R
+from lib.geometry.rotations import euler_to_R_zyz
from lib.io import open_write_file
from lib.order import order_parameters
from lib.structure.cones import Iso_cone, Pseudo_elliptic
@@ -723,6 +724,30 @@
pdb_file.close()
+def frame_from_axis(axis, frame):
+ """Build a full 3D frame from the single axis.
+
+ @param axis: The Z-axis of the system.
+ @type axis: numpy rank-1, 3D array
+ @param frame: The empty frame to populate.
+ @type frame: numpy rank-2, 3D array
+ """
+
+ # Store the Z-axis.
+ frame[:, 2] = axis
+
+ # The temporary eigenframe X-axis.
+ frame[0, 0] = 1.0
+
+ # The Y-axis (orthonormal to Z and X).
+ frame[:, 1] = cross(frame[:, 2], frame[:, 0])
+ frame[:, 1] /= norm(frame[:, 1])
+
+ # The orthonormal X-axis.
+ frame[:, 0] = cross(frame[:, 1], frame[:, 2])
+ frame[:, 0] /= norm(frame[:, 0])
+
+
def generate_axis_system(sim_index=None):
"""Generate and return the full 3D axis system for the current frame order
model.
@@ -751,7 +776,7 @@
axis =
create_rotor_axis_alpha(alpha=cdp.axis_alpha_sim[sim_index], pivot=pivot,
point=com)
# Create a full normalised axis system.
- two_vect_to_R(array([1, 0, 0], float64), axis, frame)
+ frame_from_axis(axis, frame)
# The system for the isotropic cones.
elif cdp.model in MODEL_LIST_ISO_CONE:
@@ -762,7 +787,7 @@
axis =
create_rotor_axis_spherical(theta=cdp.axis_theta_sim[sim_index],
phi=cdp.axis_phi_sim[sim_index])
# Create a full normalised axis system.
- two_vect_to_R(array([1, 0, 0], float64), axis, frame)
+ frame_from_axis(axis, frame)
# The system for the pseudo-ellipses and double rotor.
elif cdp.model in MODEL_LIST_PSEUDO_ELLIPSE + MODEL_LIST_DOUBLE:
_______________________________________________
relax (http://www.nmr-relax.com)
This is the relax-commits mailing list
[email protected]
To unsubscribe from this list, get a password
reminder, or change your subscription options,
visit the list information page at
https://mail.gna.org/listinfo/relax-commits