Author: bugman Date: Wed Nov 19 18:46:44 2014 New Revision: 26636 URL: http://svn.gna.org/viewcvs/relax?rev=26636&view=rev Log: Created the Align_tensor.test_align_tensor_svd system test. This is to check the angles calculated by the align_tensor.svd user function. As there are no external references, this essentially fixes the singular values and condition numbers 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=26636&r1=26635&r2=26636&view=diff ============================================================================== --- trunk/test_suite/system_tests/align_tensor.py (original) +++ trunk/test_suite/system_tests/align_tensor.py Wed Nov 19 18:46:44 2014 @@ -210,6 +210,63 @@ self.assertAlmostEqual(cdp.align_tensors.angles[3, 3], 0.000000014901161) + def test_align_tensor_svd(self): + """Test the operation of the align_tensor.svd 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() + + # SVD for the irreducible 5D basis set {A-2, A-1, A0, A1, A2}. + self.interpreter.align_tensor.svd(basis_set='irreducible 5D') + self.assertAlmostEqual(cdp.align_tensors.cond_num, 6.131054731740254) + self.assertAlmostEqual(cdp.align_tensors.singular_vals[0], 0.000413550754079) + self.assertAlmostEqual(cdp.align_tensors.singular_vals[1], 0.000346772331066) + self.assertAlmostEqual(cdp.align_tensors.singular_vals[2], 0.000185983409775) + self.assertAlmostEqual(cdp.align_tensors.singular_vals[3], 0.000067451812481) + + # SVD for the unitary 9D basis set {Sxx, Sxy, Sxz, Syx, Syy, Syz, Szx, Szy, Szz}. + self.interpreter.align_tensor.svd(basis_set='unitary 9D') + self.assertAlmostEqual(cdp.align_tensors.cond_num, 6.131054731740256) + self.assertAlmostEqual(cdp.align_tensors.singular_vals[0], 0.000319487975056) + self.assertAlmostEqual(cdp.align_tensors.singular_vals[1], 0.000267898410932) + self.assertAlmostEqual(cdp.align_tensors.singular_vals[2], 0.000143681186401) + self.assertAlmostEqual(cdp.align_tensors.singular_vals[3], 0.000052109790083) + + # SVD for the unitary 5D basis set {Sxx, Syy, Sxy, Sxz, Syz}. + self.interpreter.align_tensor.svd(basis_set='unitary 5D') + self.assertAlmostEqual(cdp.align_tensors.cond_num, 6.503663323975970) + self.assertAlmostEqual(cdp.align_tensors.singular_vals[0], 0.000250394766677) + self.assertAlmostEqual(cdp.align_tensors.singular_vals[1], 0.000177094839440) + self.assertAlmostEqual(cdp.align_tensors.singular_vals[2], 0.000106716235329) + self.assertAlmostEqual(cdp.align_tensors.singular_vals[3], 0.000038500573324) + + # SVD for the geometric 5D basis set {Szz, Sxxyy, Sxy, Sxz, Syz}. + self.interpreter.align_tensor.svd(basis_set='geometric 5D') + self.assertAlmostEqual(cdp.align_tensors.cond_num, 6.982475764795178) + self.assertAlmostEqual(cdp.align_tensors.singular_vals[0], 0.000304033216708) + self.assertAlmostEqual(cdp.align_tensors.singular_vals[1], 0.000201547771250) + self.assertAlmostEqual(cdp.align_tensors.singular_vals[2], 0.000125447137629) + self.assertAlmostEqual(cdp.align_tensors.singular_vals[3], 0.000043542323232) + + def test_copy(self): """Test the copying of alignment tensors (to catch U{bug #20338<https://gna.org/bugs/?20338>}."""