mailr10095 - in /1.3/test_suite: shared_data/model_free/bug_14941_local_tm_global_selection/ system_tests/ system_tests/scripts/...


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

Header


Content

Posted by edward on December 14, 2009 - 17:53:
Author: bugman
Date: Mon Dec 14 17:53:08 2009
New Revision: 10095

URL: http://svn.gna.org/viewcvs/relax?rev=10095&view=rev
Log:
Added a catch for bug #14941 (https://gna.org/bugs/index.php?14941) to the 
relax system tests.

This uses truncated data (first 2 residues), also randomised, to reproduce 
the bug.


Added:
    1.3/test_suite/shared_data/model_free/bug_14941_local_tm_global_selection/
    
1.3/test_suite/shared_data/model_free/bug_14941_local_tm_global_selection/local_tm_trunc.bz2
   (with props)
    
1.3/test_suite/shared_data/model_free/bug_14941_local_tm_global_selection/sphere_trunc.bz2
   (with props)
    1.3/test_suite/system_tests/scripts/model_free/
    
1.3/test_suite/system_tests/scripts/model_free/bug_14941_local_tm_global_selection.py
Modified:
    1.3/test_suite/system_tests/model_free.py
    1.3/test_suite/unit_tests/_maths_fns/test_rotation_matrix.py

Added: 
1.3/test_suite/shared_data/model_free/bug_14941_local_tm_global_selection/local_tm_trunc.bz2
URL: 
http://svn.gna.org/viewcvs/relax/1.3/test_suite/shared_data/model_free/bug_14941_local_tm_global_selection/local_tm_trunc.bz2?rev=10095&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
1.3/test_suite/shared_data/model_free/bug_14941_local_tm_global_selection/local_tm_trunc.bz2
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: 
1.3/test_suite/shared_data/model_free/bug_14941_local_tm_global_selection/sphere_trunc.bz2
URL: 
http://svn.gna.org/viewcvs/relax/1.3/test_suite/shared_data/model_free/bug_14941_local_tm_global_selection/sphere_trunc.bz2?rev=10095&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
1.3/test_suite/shared_data/model_free/bug_14941_local_tm_global_selection/sphere_trunc.bz2
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: 1.3/test_suite/system_tests/model_free.py
URL: 
http://svn.gna.org/viewcvs/relax/1.3/test_suite/system_tests/model_free.py?rev=10095&r1=10094&r2=10095&view=diff
==============================================================================
--- 1.3/test_suite/system_tests/model_free.py (original)
+++ 1.3/test_suite/system_tests/model_free.py Mon Dec 14 17:53:08 2009
@@ -164,6 +164,13 @@
 
         # Execute the script.
         self.relax.interpreter.run(script_file=sys.path[-1] + 
sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'bug_14872_unicode_selection.py')
+
+
+    def test_bug_14941_local_tm_global_selection(self):
+        """Test catching bug #14941, the local tm global model selection 
problem as submitted by Mikaela Stewart (mikaela dot stewart att gmail dot 
com)."""
+
+        # Execute the script.
+        self.relax.interpreter.run(script_file=sys.path[-1] + 
sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'model_free'+sep+'bug_14941_local_tm_global_selection.py')
 
 
     def test_bugs_12582_12591_12607(self):

Added: 
1.3/test_suite/system_tests/scripts/model_free/bug_14941_local_tm_global_selection.py
URL: 
http://svn.gna.org/viewcvs/relax/1.3/test_suite/system_tests/scripts/model_free/bug_14941_local_tm_global_selection.py?rev=10095&view=auto
==============================================================================
--- 
1.3/test_suite/system_tests/scripts/model_free/bug_14941_local_tm_global_selection.py
 (added)
+++ 
1.3/test_suite/system_tests/scripts/model_free/bug_14941_local_tm_global_selection.py
 Mon Dec 14 17:53:08 2009
@@ -1,0 +1,31 @@
+"""This system test catches the local tm global model selection bug 
submitted by Mikaela Stewart (mikaela dot stewart att gmail dot com).
+
+The bug is:
+    - Bug #14941 (https://gna.org/bugs/?14941).
+"""
+
+# Python module imports.
+from os import sep
+import sys
+
+
+# Path of the files.
+path = sys.path[-1] + 
sep+'test_suite'+sep+'shared_data'+sep+'model_free'+sep+'bug_14941_local_tm_global_selection'
+
+# Local tm data.
+pipe.create(pipe_name='local_tm', pipe_type='mf')
+results.read(file='local_tm_trunc', dir=path)
+
+# Sphere data.
+pipe.create(pipe_name='sphere', pipe_type='mf')
+results.read(file='sphere_trunc', dir=path)
+
+# Model selection.
+model_selection(method='AIC', modsel_pipe='final', pipes=['local_tm', 
'sphere'])
+results.write(file='devnull', dir=None, compress_type=1, force=True)
+
+# Monte Carlo simulation setup.
+monte_carlo.setup(number=200)
+monte_carlo.create_data(method='back_calc')
+monte_carlo.initial_values()
+

Modified: 1.3/test_suite/unit_tests/_maths_fns/test_rotation_matrix.py
URL: 
http://svn.gna.org/viewcvs/relax/1.3/test_suite/unit_tests/_maths_fns/test_rotation_matrix.py?rev=10095&r1=10094&r2=10095&view=diff
==============================================================================
--- 1.3/test_suite/unit_tests/_maths_fns/test_rotation_matrix.py (original)
+++ 1.3/test_suite/unit_tests/_maths_fns/test_rotation_matrix.py Mon Dec 14 
17:53:08 2009
@@ -58,6 +58,10 @@
 
         # Print out.
         print("\n\n# Checking the %s() and %s() conversions.\n" % 
(euler_to_R.__name__, R_to_euler.__name__))
+
+        # A small number.
+        epsilon = 1e-15
+
         # End angles.
         if alpha_end == None:
             alpha_end = alpha_start
@@ -71,6 +75,11 @@
         print(("\talpha: %s" % alpha_start))
         print(("\tbeta:  %s" % beta_start))
         print(("\tgamma: %s\n" % gamma_start))
+        print("End angles:")
+        print(("\talpha: %s" % alpha_end))
+        print(("\tbeta:  %s" % beta_end))
+        print(("\tgamma: %s\n" % gamma_end))
+
 
         # Generate the rotation matrix.
         euler_to_R(alpha_start, beta_start, gamma_start, R)
@@ -86,15 +95,38 @@
         print(("\tgamma: %s\n" % gamma_new))
 
         # Wrap the angles.
-        alpha_new = wrap_angles(alpha_new, 0, 2*pi)
-        beta_new = wrap_angles(beta_new, 0, 2*pi)
-        gamma_new = wrap_angles(gamma_new, 0, 2*pi)
+        alpha_new = wrap_angles(alpha_new, 0-epsilon, 2*pi-epsilon)
+        beta_new = wrap_angles(beta_new, 0-epsilon, 2*pi-epsilon)
+        gamma_new = wrap_angles(gamma_new, 0-epsilon, 2*pi-epsilon)
 
         # Print out.
         print("New angles (wrapped):")
         print(("\talpha: %s" % alpha_new))
         print(("\tbeta:  %s" % beta_new))
         print(("\tgamma: %s\n" % gamma_new))
+
+        # Second solution required!
+        if abs(beta_end - beta_new) > 1e-7:
+            # Collapse the multiple beta solutions.
+            if beta_new < pi:
+                alpha_new = alpha_new + pi
+                beta_new = pi - beta_new
+                gamma_new = gamma_new + pi
+            else:
+                alpha_new = alpha_new + pi
+                beta_new = 3*pi - beta_new
+                gamma_new = gamma_new + pi
+
+            # Wrap the angles.
+            alpha_new = wrap_angles(alpha_new, 0-epsilon, 2*pi-epsilon)
+            beta_new = wrap_angles(beta_new, 0-epsilon, 2*pi-epsilon)
+            gamma_new = wrap_angles(gamma_new, 0-epsilon, 2*pi-epsilon)
+
+            # Print out.
+            print("New angles (second solution):")
+            print(("\talpha: %s" % alpha_new))
+            print(("\tbeta:  %s" % beta_new))
+            print(("\tgamma: %s\n" % gamma_new))
 
         # Checks.
         self.assertAlmostEqual(alpha_end, alpha_new)
@@ -570,13 +602,15 @@
         self.check_return_conversion(euler_zxy_to_R, R_to_euler_zxy, 0.0, 
0.0, 0.0)
         self.check_return_conversion(euler_zxy_to_R, R_to_euler_zxy, 1.0, 
0.0, 0.0)
         self.check_return_conversion(euler_zxy_to_R, R_to_euler_zxy, 0.0, 
1.0, 0.0)
-        self.check_return_conversion(euler_zxy_to_R, R_to_euler_zxy, 0.0, 
0.0, 1.0, alpha_end=1.0, gamma_end=0.0)
+        self.check_return_conversion(euler_zxy_to_R, R_to_euler_zxy, 0.0, 
0.0, 1.0)
         self.check_return_conversion(euler_zxy_to_R, R_to_euler_zxy, 1.0, 
1.0, 0.0)
         self.check_return_conversion(euler_zxy_to_R, R_to_euler_zxy, 0.0, 
1.0, 1.0)
-        self.check_return_conversion(euler_zxy_to_R, R_to_euler_zxy, 1.0, 
0.0, 1.0, alpha_end=2.0, gamma_end=0.0)
+        self.check_return_conversion(euler_zxy_to_R, R_to_euler_zxy, 1.0, 
0.0, 1.0)
         self.check_return_conversion(euler_zxy_to_R, R_to_euler_zxy, 1.0, 
1.0, 1.0)
-        self.check_return_conversion(euler_zxy_to_R, R_to_euler_zxy, 1.0, 
pi/2, 0.5, alpha_end=0.5, gamma_end=0.0)
+        self.check_return_conversion(euler_zxy_to_R, R_to_euler_zxy, 1.0, 
pi/2, 0.5)
         self.check_return_conversion(euler_zxy_to_R, R_to_euler_zxy, 1.0, 
pi, 0.5)
+        self.check_return_conversion(euler_zxy_to_R, R_to_euler_zxy, 1.0, 
-pi/2, 0.5, beta_end=-pi/2+2*pi)
+        self.check_return_conversion(euler_zxy_to_R, R_to_euler_zxy, 1.0, 
1.5*pi, 0.5, beta_end=pi/2)
 
 
     def test_R_to_euler_zxz(self):
@@ -600,6 +634,7 @@
         """Test the rotation matrix to zyx Euler angle conversion."""
 
         # Check random numbers, then the problematic angles.
+        self.check_return_conversion(euler_zyx_to_R, R_to_euler_zyx, 5.0, 
2.0, 1.0)
         self.check_return_conversion(euler_zyx_to_R, R_to_euler_zyx, 
uniform(0, 2*pi), uniform(0, pi), uniform(0, 2*pi))
         self.check_return_conversion(euler_zyx_to_R, R_to_euler_zyx, 0.0, 
0.0, 0.0)
         self.check_return_conversion(euler_zyx_to_R, R_to_euler_zyx, 1.0, 
0.0, 0.0)
@@ -610,7 +645,7 @@
         self.check_return_conversion(euler_zyx_to_R, R_to_euler_zyx, 1.0, 
0.0, 1.0)
         self.check_return_conversion(euler_zyx_to_R, R_to_euler_zyx, 1.0, 
1.0, 1.0)
         self.check_return_conversion(euler_zyx_to_R, R_to_euler_zyx, 1.0, 
pi/2, 0.5)
-        self.check_return_conversion(euler_zyx_to_R, R_to_euler_zyx, 1.0, 
pi, 0.5)
+        self.check_return_conversion(euler_zyx_to_R, R_to_euler_zyx, 1.0, 
pi, 0.5, alpha_end=1.0+pi, beta_end=0.0, gamma_end=0.5+pi)
 
 
     def test_R_to_euler_zyz(self):




Related Messages


Powered by MHonArc, Updated Mon Dec 14 18:00:02 2009