Author: bugman Date: Wed Nov 2 10:22:14 2011 New Revision: 14950 URL: http://svn.gna.org/viewcvs/relax?rev=14950&view=rev Log: Created the Frame_order.test_cam_rotor2 system test. This checks the frame order rotor model whereby the rotation axis is perpendicular to the pivot-CoM vector. Added: 1.3/test_suite/system_tests/scripts/frame_order/cam/rotor2.py - copied, changed from r14947, 1.3/test_suite/system_tests/scripts/frame_order/cam/free_rotor2.py Modified: 1.3/test_suite/system_tests/frame_order.py Modified: 1.3/test_suite/system_tests/frame_order.py URL: http://svn.gna.org/viewcvs/relax/1.3/test_suite/system_tests/frame_order.py?rev=14950&r1=14949&r2=14950&view=diff ============================================================================== --- 1.3/test_suite/system_tests/frame_order.py (original) +++ 1.3/test_suite/system_tests/frame_order.py Wed Nov 2 10:22:14 2011 @@ -35,6 +35,7 @@ from data import Relax_data_store; ds = Relax_data_store() import dep_check from maths_fns.coord_transform import spherical_to_cartesian +from maths_fns.rotation_matrix import euler_to_R_zyz from physical_constants import N15_CSA, NH_BOND_LENGTH from relax_io import DummyFileObject, open_read_file from status import Status; status = Status() @@ -250,6 +251,49 @@ self.assertAlmostEqual(ave_pos.x[i], orig_pos.x[i], 1) self.assertAlmostEqual(ave_pos.y[i], orig_pos.y[i], 1) self.assertAlmostEqual(ave_pos.z[i], orig_pos.z[i], 1) + + + def test_cam_rotor2(self): + """Test the second rotor frame order model of CaM.""" + + # Execute the script. + self.interpreter.run(script_file=status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'frame_order'+sep+'cam'+sep+'rotor2.py') + + # Switch to the correct data pipe. + self.interpreter.pipe.switch('frame order') + + # The base data. + pivot = array([ 37.254, 0.5, 16.7465]) + com = array([ 26.83678091, -12.37906417, 28.34154128]) + pivot_com_axis = com - pivot + rot_axis = array([ 0.40416535, 0.49967956, 0.76614014]) + + # The average position checks. + real_pos = array([[-0.31334613, -0.88922808, -0.33329811], + [ 0.93737972, -0.23341205, -0.2585306 ], + [ 0.15209688, -0.39343645, 0.90668313]], float64) + ave_pos = zeros((3, 3), float64) + euler_to_R_zyz(cdp.ave_pos_alpha, cdp.ave_pos_beta, cdp.ave_pos_gamma, ave_pos) + print("\nReal domain position:\n%s" % repr(real_pos)) + print("Fitted domain position:\n%s" % repr(ave_pos)) + for i in range(3): + for j in range(3): + self.assertAlmostEqual(ave_pos[i, j], real_pos[i, j], 1) + + # The axis system. + axis_sys = zeros((3, 3), float64) + euler_to_R_zyz(cdp.eigen_alpha, cdp.eigen_beta, cdp.eigen_gamma, axis_sys) + print("\nReal rotation axis: %s" % repr(rot_axis)) + print("Fitted rotation axis: %s" % repr(axis_sys[:,2])) + + # Check the angle between the real and fitted rotation axes. + angle = acos(dot(axis_sys[:,2], rot_axis)) + if angle > pi/2: + angle = acos(dot(axis_sys[:,2], -rot_axis)) + self.assertAlmostEqual(angle, 0.0, 2) + + # Check the cone angle of 60 deg. + self.assertAlmostEqual(cdp.cone_sigma_max * 2.0, 60.0 / 360.0 * 2.0 * pi, 2) def test_model_free_rotor(self): Copied: 1.3/test_suite/system_tests/scripts/frame_order/cam/rotor2.py (from r14947, 1.3/test_suite/system_tests/scripts/frame_order/cam/free_rotor2.py) URL: http://svn.gna.org/viewcvs/relax/1.3/test_suite/system_tests/scripts/frame_order/cam/rotor2.py?p2=1.3/test_suite/system_tests/scripts/frame_order/cam/rotor2.py&p1=1.3/test_suite/system_tests/scripts/frame_order/cam/free_rotor2.py&r1=14947&r2=14950&rev=14950&view=diff ============================================================================== --- 1.3/test_suite/system_tests/scripts/frame_order/cam/free_rotor2.py (original) +++ 1.3/test_suite/system_tests/scripts/frame_order/cam/rotor2.py Wed Nov 2 10:22:14 2011 @@ -1,4 +1,4 @@ -# Script for optimising the free rotor frame order test model of CaM. +# Script for optimising the second rotor frame order test model of CaM. # Python module imports. from numpy import array, float64, transpose, zeros @@ -40,7 +40,7 @@ # The file paths. PATH_N_DOM = DATA_PATH - PATH_C_DOM = PATH_N_DOM+sep+'free_rotor2'+sep + PATH_C_DOM = PATH_N_DOM+sep+'rotor2'+sep # Create the data pipe. pipe.create(pipe_name='frame order', pipe_type='frame order') @@ -58,16 +58,19 @@ align_tensor.reduction(full_tensor=full[i], red_tensor=red[i]) # Select the model. - frame_order.select_model('free rotor') + frame_order.select_model('rotor') # Set the reference domain. frame_order.ref_domain('N') - # Set the parameters to that after a 21 increment grid search (for a massive speed up). - value.set(val=2.2143, param='ave_pos_beta') - value.set(val=0.897, param='ave_pos_gamma') - value.set(val=1.570, param='axis_theta') - value.set(val=1.1968, param='axis_phi') + # Set the parameters to that after a 11 increment grid search (for a massive speed up). + value.set(val=1.7136, param='ave_pos_alpha') + value.set(val=0.0, param='ave_pos_beta') + value.set(val=0.0, param='ave_pos_gamma') + value.set(val=1.7136, param='eigen_alpha') + value.set(val=0.0, param='eigen_beta') + value.set(val=1.7136, param='eigen_gamma') + value.set(val=1.3138, param='cone_sigma_max') # Optimise. minimise('simplex', constraints=False)