mailr11683 - /1.3/generic_fns/diffusion_tensor.py


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

Header


Content

Posted by edward on November 18, 2010 - 18:25:
Author: bugman
Date: Thu Nov 18 18:25:51 2010
New Revision: 11683

URL: http://svn.gna.org/viewcvs/relax?rev=11683&view=rev
Log:
Fix for the ellipsoid eigenvalue and rotation matrix reordering for when 2 
eigenvalues are the same.

This only affects the (Dxx, Dyy, Dzz, Dxy, Dxz, Dyz) parameter input into 
diffusion_tensor.init().


Modified:
    1.3/generic_fns/diffusion_tensor.py

Modified: 1.3/generic_fns/diffusion_tensor.py
URL: 
http://svn.gna.org/viewcvs/relax/1.3/generic_fns/diffusion_tensor.py?rev=11683&r1=11682&r2=11683&view=diff
==============================================================================
--- 1.3/generic_fns/diffusion_tensor.py (original)
+++ 1.3/generic_fns/diffusion_tensor.py Thu Nov 18 18:25:51 2010
@@ -28,6 +28,7 @@
 from math import cos, pi, sin
 from numpy import cross, float64, transpose, zeros
 from numpy.linalg import eig, norm
+from operator import itemgetter
 from re import search
 
 # relax module imports.
@@ -373,19 +374,26 @@
         Di, R = eig(tensor)
 
         # Reordering structure.
+        tup_struct = []
+        for i in range(3):
+            tup_struct.append((i, Di[i]))
+
+        # The indices.
+        reorder_data = sorted(tup_struct, key=itemgetter(1))
         reorder = zeros(3, int)
-        Di_sort = sorted(Di)
-        Di = Di.tolist()
+        Di_sort = zeros(3, int)
+        for i in range(3):
+            reorder[i], Di_sort[i] = reorder_data[i]
+
+        # Reorder columns.
         R_new = zeros((3, 3), float64)
-
-        # Reorder columns.
         for i in range(3):
-            R_new[:, i] = R[:, Di.index(Di_sort[i])]
+            R_new[:, i] = R[:, reorder[i]]
 
         # Switch from the left handed to right handed universes (if needed).
         if norm(cross(R_new[:, 0], R_new[:, 1]) - R_new[:, 2]) > 1e-7:
             R_new[:, 2] = -R_new[:, 2]
-        
+
         # Reverse the rotation.
         R_new = transpose(R_new)
 




Related Messages


Powered by MHonArc, Updated Thu Nov 18 18:40:02 2010