Author: bugman Date: Wed Nov 19 18:40:28 2014 New Revision: 26635 URL: http://svn.gna.org/viewcvs/relax?rev=26635&view=rev Log: Created the Align_tensor.test_align_tensor_matrix_angles system test. This is to check the angles calculated by the align_tensor.matrix_angles user function. As there are no external references, this essentially fixes the angles to the currently calculated values to catch any accidental changes in the future. Modified: trunk/test_suite/system_tests/align_tensor.py Modified: trunk/test_suite/system_tests/align_tensor.py URL: http://svn.gna.org/viewcvs/relax/trunk/test_suite/system_tests/align_tensor.py?rev=26635&r1=26634&r2=26635&view=diff ============================================================================== --- trunk/test_suite/system_tests/align_tensor.py (original) +++ trunk/test_suite/system_tests/align_tensor.py Wed Nov 19 18:40:28 2014 @@ -90,6 +90,126 @@ cdp.align_tensors[2].set(param='Axx', value=1) + def test_align_tensor_matrix_angles(self): + """Test the operation of the align_tensor.matrix_angles user function for different basis sets. + + This originates from the script in test_suite/shared_data/align_data/basis_sets/. + """ + + # Random tensors of {Axx, Ayy, Axy, Axz, Ayz} generated using random.uniform(0, 1e-4). + tensor1 = [5.4839183673166663e-05, 3.692459844061351e-05, 1.994164790083226e-05, 4.5945264935308495e-05, 1.0090119622465559e-05] + tensor2 = [1.5832157768761617e-05, -4.9797877146095514e-05, -3.6007226809999e-05, -3.8175058915299295e-05, 5.3131759988544946e-05] + tensor3 = [3.892445496049645e-05, -1.7165585393754253e-05, 7.803231512226243e-05, -3.057296854986567e-05, 9.31348723610886e-05] + tensor4 = [4.6720247808382186e-05, -9.140580842599e-05, -3.415945182796103e-05, -1.7753928806205142e-05, 5.20457038882803e-05] + + # Create a N-state analysis data pipe. + self.interpreter.pipe.create('basis set comparison', 'N-state') + + # Load the tensors. + self.interpreter.align_tensor.init(tensor='t1', align_id='t1', params=tuple(tensor1)) + self.interpreter.align_tensor.init(tensor='t2', align_id='t2', params=tuple(tensor2)) + self.interpreter.align_tensor.init(tensor='t3', align_id='t3', params=tuple(tensor3)) + self.interpreter.align_tensor.init(tensor='t4', align_id='t4', params=tuple(tensor4)) + + # Display. + self.interpreter.align_tensor.display() + + # The standard inter-matrix angles. + self.interpreter.align_tensor.matrix_angles(basis_set='matrix') + self.assertAlmostEqual(cdp.align_tensors.angles[0, 0], 0.000000000000000) + self.assertAlmostEqual(cdp.align_tensors.angles[0, 1], 2.075565413247085) + self.assertAlmostEqual(cdp.align_tensors.angles[0, 2], 1.338099052806276) + self.assertAlmostEqual(cdp.align_tensors.angles[0, 3], 1.931864731843497) + self.assertAlmostEqual(cdp.align_tensors.angles[1, 0], 2.075565413247085) + self.assertAlmostEqual(cdp.align_tensors.angles[1, 1], 0.000000000000000) + self.assertAlmostEqual(cdp.align_tensors.angles[1, 2], 1.238391416802885) + self.assertAlmostEqual(cdp.align_tensors.angles[1, 3], 0.425283739619488) + self.assertAlmostEqual(cdp.align_tensors.angles[2, 0], 1.338099052806276) + self.assertAlmostEqual(cdp.align_tensors.angles[2, 1], 1.238391416802885) + self.assertAlmostEqual(cdp.align_tensors.angles[2, 2], 0.000000000000000) + self.assertAlmostEqual(cdp.align_tensors.angles[2, 3], 1.269973710252322) + self.assertAlmostEqual(cdp.align_tensors.angles[3, 0], 1.931864731843497) + self.assertAlmostEqual(cdp.align_tensors.angles[3, 1], 0.425283739619488) + self.assertAlmostEqual(cdp.align_tensors.angles[3, 2], 1.269973710252322) + self.assertAlmostEqual(cdp.align_tensors.angles[3, 3], 0.000000014901161) + + # The inter-tensor vector angles for the irreducible 5D basis set {A-2, A-1, A0, A1, A2}. + self.interpreter.align_tensor.matrix_angles(basis_set='irreducible 5D') + self.assertAlmostEqual(cdp.align_tensors.angles[0, 0], 0.000000000000000) + self.assertAlmostEqual(cdp.align_tensors.angles[0, 1], 2.075565413247085) + self.assertAlmostEqual(cdp.align_tensors.angles[0, 2], 1.338099052806276) + self.assertAlmostEqual(cdp.align_tensors.angles[0, 3], 1.931864731843497) + self.assertAlmostEqual(cdp.align_tensors.angles[1, 0], 2.075565413247085) + self.assertAlmostEqual(cdp.align_tensors.angles[1, 1], 0.000000000000000) + self.assertAlmostEqual(cdp.align_tensors.angles[1, 2], 1.238391416802885) + self.assertAlmostEqual(cdp.align_tensors.angles[1, 3], 0.425283739619488) + self.assertAlmostEqual(cdp.align_tensors.angles[2, 0], 1.338099052806276) + self.assertAlmostEqual(cdp.align_tensors.angles[2, 1], 1.238391416802885) + self.assertAlmostEqual(cdp.align_tensors.angles[2, 2], 0.000000021073424) + self.assertAlmostEqual(cdp.align_tensors.angles[2, 3], 1.269973710252322) + self.assertAlmostEqual(cdp.align_tensors.angles[3, 0], 1.931864731843497) + self.assertAlmostEqual(cdp.align_tensors.angles[3, 1], 0.425283739619488) + self.assertAlmostEqual(cdp.align_tensors.angles[3, 2], 1.269973710252322) + self.assertAlmostEqual(cdp.align_tensors.angles[3, 3], 0.000000021073424) + + # The inter-tensor vector angles for the unitary 9D basis set {Sxx, Sxy, Sxz, Syx, Syy, Syz, Szx, Szy, Szz}. + self.interpreter.align_tensor.matrix_angles(basis_set='unitary 9D') + self.assertAlmostEqual(cdp.align_tensors.angles[0, 0], 0.000000000000000) + self.assertAlmostEqual(cdp.align_tensors.angles[0, 1], 2.075565413247085) + self.assertAlmostEqual(cdp.align_tensors.angles[0, 2], 1.338099052806276) + self.assertAlmostEqual(cdp.align_tensors.angles[0, 3], 1.931864731843497) + self.assertAlmostEqual(cdp.align_tensors.angles[1, 0], 2.075565413247085) + self.assertAlmostEqual(cdp.align_tensors.angles[1, 1], 0.000000014901161) + self.assertAlmostEqual(cdp.align_tensors.angles[1, 2], 1.238391416802885) + self.assertAlmostEqual(cdp.align_tensors.angles[1, 3], 0.425283739619488) + self.assertAlmostEqual(cdp.align_tensors.angles[2, 0], 1.338099052806276) + self.assertAlmostEqual(cdp.align_tensors.angles[2, 1], 1.238391416802885) + self.assertAlmostEqual(cdp.align_tensors.angles[2, 2], 0.000000000000000) + self.assertAlmostEqual(cdp.align_tensors.angles[2, 3], 1.269973710252322) + self.assertAlmostEqual(cdp.align_tensors.angles[3, 0], 1.931864731843497) + self.assertAlmostEqual(cdp.align_tensors.angles[3, 1], 0.425283739619488) + self.assertAlmostEqual(cdp.align_tensors.angles[3, 2], 1.269973710252322) + self.assertAlmostEqual(cdp.align_tensors.angles[3, 3], 0.000000014901161) + + # The inter-tensor vector angles for the unitary 5D basis set {Sxx, Syy, Sxy, Sxz, Syz}. + self.interpreter.align_tensor.matrix_angles(basis_set='unitary 5D') + self.assertAlmostEqual(cdp.align_tensors.angles[0, 0], 0.000000000000000) + self.assertAlmostEqual(cdp.align_tensors.angles[0, 1], 1.962377927826435) + self.assertAlmostEqual(cdp.align_tensors.angles[0, 2], 1.334149185082829) + self.assertAlmostEqual(cdp.align_tensors.angles[0, 3], 1.747728360218234) + self.assertAlmostEqual(cdp.align_tensors.angles[1, 0], 1.962377927826435) + self.assertAlmostEqual(cdp.align_tensors.angles[1, 1], 0.000000000000000) + self.assertAlmostEqual(cdp.align_tensors.angles[1, 2], 1.163535022090889) + self.assertAlmostEqual(cdp.align_tensors.angles[1, 3], 0.449110033170688) + self.assertAlmostEqual(cdp.align_tensors.angles[2, 0], 1.334149185082829) + self.assertAlmostEqual(cdp.align_tensors.angles[2, 1], 1.163535022090889) + self.assertAlmostEqual(cdp.align_tensors.angles[2, 2], 0.000000000000000) + self.assertAlmostEqual(cdp.align_tensors.angles[2, 3], 1.180324869602255) + self.assertAlmostEqual(cdp.align_tensors.angles[3, 0], 1.747728360218234) + self.assertAlmostEqual(cdp.align_tensors.angles[3, 1], 0.449110033170688) + self.assertAlmostEqual(cdp.align_tensors.angles[3, 2], 1.180324869602255) + self.assertAlmostEqual(cdp.align_tensors.angles[3, 3], 0.000000000000000) + + # The inter-tensor vector angles for the geometric 5D basis set {Szz, Sxxyy, Sxy, Sxz, Syz}. + self.interpreter.align_tensor.matrix_angles(basis_set='geometric 5D') + self.assertAlmostEqual(cdp.align_tensors.angles[0, 0], 0.000000000000000) + self.assertAlmostEqual(cdp.align_tensors.angles[0, 1], 1.924475705542377) + self.assertAlmostEqual(cdp.align_tensors.angles[0, 2], 1.290778333130633) + self.assertAlmostEqual(cdp.align_tensors.angles[0, 3], 1.724794814547786) + self.assertAlmostEqual(cdp.align_tensors.angles[1, 0], 1.924475705542377) + self.assertAlmostEqual(cdp.align_tensors.angles[1, 1], 0.000000021073424) + self.assertAlmostEqual(cdp.align_tensors.angles[1, 2], 1.128650397698967) + self.assertAlmostEqual(cdp.align_tensors.angles[1, 3], 0.418891267835127) + self.assertAlmostEqual(cdp.align_tensors.angles[2, 0], 1.290778333130633) + self.assertAlmostEqual(cdp.align_tensors.angles[2, 1], 1.128650397698967) + self.assertAlmostEqual(cdp.align_tensors.angles[2, 2], 0.000000000000000) + self.assertAlmostEqual(cdp.align_tensors.angles[2, 3], 1.126308408980378) + self.assertAlmostEqual(cdp.align_tensors.angles[3, 0], 1.724794814547786) + self.assertAlmostEqual(cdp.align_tensors.angles[3, 1], 0.418891267835127) + self.assertAlmostEqual(cdp.align_tensors.angles[3, 2], 1.126308408980378) + self.assertAlmostEqual(cdp.align_tensors.angles[3, 3], 0.000000014901161) + + def test_copy(self): """Test the copying of alignment tensors (to catch U{bug #20338<https://gna.org/bugs/?20338>}."""