Author: bugman Date: Fri Sep 18 18:19:26 2009 New Revision: 9531 URL: http://svn.gna.org/viewcvs/relax?rev=9531&view=rev Log: Created a module for alignment tensor related system tests. Only the single test test_to_and_from_xml() has been created so far. This checks the dumping and reloading of alignment tensors into an XML file. Added: 1.3/test_suite/system_tests/align_tensor.py - copied, changed from r9526, 1.3/test_suite/system_tests/diffusion_tensor.py Modified: 1.3/test_suite/system_tests/__init__.py Modified: 1.3/test_suite/system_tests/__init__.py URL: http://svn.gna.org/viewcvs/relax/1.3/test_suite/system_tests/__init__.py?rev=9531&r1=9530&r2=9531&view=diff ============================================================================== --- 1.3/test_suite/system_tests/__init__.py (original) +++ 1.3/test_suite/system_tests/__init__.py Fri Sep 18 18:19:26 2009 @@ -31,6 +31,7 @@ from test_suite.relax_test_runner import RelaxTestRunner # relax system/functional test module imports. +from align_tensor import Align_tensor from angles import Angles from consistency_tests import Ct from dasha import Dasha @@ -56,7 +57,8 @@ from unit_vectors import Unit_vectors -__all__ = ['angles', +__all__ = ['align_tensor', + 'angles', 'consistency_tests', 'dasha' 'diffusion_tensor', @@ -99,6 +101,7 @@ # Create an array of test suites (add your new TestCase classes here). suite_array = [] + suite_array.append(TestLoader().loadTestsFromTestCase(Align_tensor)) suite_array.append(TestLoader().loadTestsFromTestCase(Angles)) suite_array.append(TestLoader().loadTestsFromTestCase(Ct)) suite_array.append(TestLoader().loadTestsFromTestCase(Dasha)) Copied: 1.3/test_suite/system_tests/align_tensor.py (from r9526, 1.3/test_suite/system_tests/diffusion_tensor.py) URL: http://svn.gna.org/viewcvs/relax/1.3/test_suite/system_tests/align_tensor.py?p2=1.3/test_suite/system_tests/align_tensor.py&p1=1.3/test_suite/system_tests/diffusion_tensor.py&r1=9526&r2=9531&rev=9531&view=diff ============================================================================== --- 1.3/test_suite/system_tests/diffusion_tensor.py (original) +++ 1.3/test_suite/system_tests/align_tensor.py Fri Sep 18 18:19:26 2009 @@ -21,123 +21,69 @@ ############################################################################### # Python module imports. -from math import pi -from os import remove, sep +from os import remove +from tempfile import mktemp from unittest import TestCase -import sys # relax module imports. from data import Relax_data_store; ds = Relax_data_store() -from data.diff_tensor import DiffTensorSimList -from generic_fns.pipes import get_pipe -from tempfile import mktemp +from relax_io import delete -class Diffusion_tensor(TestCase): - """Class for testing various aspects specific to the diffusion tensor.""" +class Align_tensor(TestCase): + """Class for testing various aspects specific to the alignment tensors.""" def setUp(self): - """Function for initialising a spherical, spheroidal, and ellipsoidal diffusion tensor.""" + """Function for initialising a few alignment tensors.""" - # Create three data pipes for spherical, spheroidal, and ellipsoidal diffusion. - self.relax.interpreter._Pipe.create('sphere', 'mf') - self.relax.interpreter._Pipe.create('spheroid', 'mf') - self.relax.interpreter._Pipe.create('ellipsoid', 'mf') + # Create a data pipe. + self.relax.interpreter._Pipe.create('test', 'frame order') - # Sphere tensor initialization. - self.relax.interpreter._Pipe.switch('sphere') - self.relax.interpreter._Structure.read_pdb(file='Ap4Aase_res1-12.pdb', dir=sys.path[-1] + sep+'test_suite'+sep+'shared_data'+sep+'structures', read_model=1) - self.relax.interpreter._Sequence.read(file='Ap4Aase.seq', dir=sys.path[-1] + sep+'test_suite'+sep+'shared_data'+sep) - self.relax.interpreter._Diffusion_tensor.init(10e-9, fixed=True) - self.tmpfile_sphere = mktemp() + # Temp file name. + self.tmpfile = mktemp() - # Spheroid tensor initialization. - self.relax.interpreter._Pipe.switch('spheroid') - self.relax.interpreter._Structure.read_pdb(file='Ap4Aase_res1-12.pdb', dir=sys.path[-1] + sep+'test_suite'+sep+'shared_data'+sep+'structures', read_model=1) - self.relax.interpreter._Sequence.read(file='Ap4Aase.seq', dir=sys.path[-1] + sep+'test_suite'+sep+'shared_data'+sep) - self.relax.interpreter._Diffusion_tensor.init((5e-09, -10000000., 1.6, 2.7), angle_units='rad', spheroid_type='oblate', fixed=True) - self.tmpfile_spheroid = mktemp() + # Tensor name lists. + full_list = ['0 full', '1 full', '2 full', '3 full', '4 full'] + red_list = ['0 red', '1 red', '2 red', '3 red', '4 red'] - # Ellipsoid tensor initialization. - self.relax.interpreter._Pipe.switch('ellipsoid') - self.relax.interpreter._Structure.read_pdb(file='Ap4Aase_res1-12.pdb', dir=sys.path[-1] + sep+'test_suite'+sep+'shared_data'+sep+'structures', read_model=1) - self.relax.interpreter._Sequence.read(file='Ap4Aase.seq', dir=sys.path[-1] + sep+'test_suite'+sep+'shared_data'+sep) - self.relax.interpreter._Diffusion_tensor.init((9e-8, 5e6, 0.3, 60+360, 290, 100), fixed=False) - self.tmpfile_ellipsoid = mktemp() + # Error. + error = 1.47411211147e-05 + # Tensor lists. + self.tensors_full = [ + (0.00014221982216882766, -0.00014454300156652134, -0.00070779621164871397, -0.00060161949408277324, 0.00020200800707295083), + (-0.00014307694949297205, -0.00039671919293883539, -0.00024724524395487659, 0.00031948292975139144, 0.00018868359624777637), + (-0.00022967898444150887, -0.00027171643813494106, -0.00021961563147411279, 0.00010337393266477703, 0.00029030226175831515), + (0.00043690692358615301, -0.00034379559287467062, -0.00019359695171683388, 0.00030194133983804048, -6.314162250164486e-05), + (-0.00026249527958822807, 0.00073561736796410628, 6.3975419225898133e-05, 6.2788017118057252e-05, 0.00020119758245770023) + ] + self.tensors_red = [ + (-0.0004037026160192775, 0.00023172423501111316, -0.00020915186581478394, -0.00028817367472760139, -8.7172337025481604e-05), + (0.0003767999506688964, -0.00021492227011444111, 0.00019620694392616774, 0.00027163215478635274, 8.147201253457049e-05), + (0.00025970120925482461, -0.00014782823602910519, 0.00013565269563569894, 0.00018741173517420359, 5.6252903270026344e-05), + (0.00014574884684542708, -8.3162940224598374e-05, 7.4927100277784987e-05, 0.00010508245294401461, 3.1156238348722986e-05), + (-0.00011267453337899962, 6.412308037476237e-05, -5.7897942333203444e-05, -8.1865863377039068e-05, -2.5273427585025123e-05) + ] - # Some fake MC simulations (for the sphere). - self.relax.interpreter._Pipe.switch('sphere') - cdp.diff_tensor.tm_err = 10e-11 - cdp.diff_tensor.tm_sim = DiffTensorSimList('tm', cdp.diff_tensor, elements=5) - tm_sim = [8.98e-8, 8.99e-8, 9.00e-7, 9.01e-8, 9.02e-8] + # Set up the tensors. for i in range(5): - cdp.diff_tensor.tm_sim[i] = tm_sim[i] + # Load the tensor. + self.relax.interpreter._Align_tensor.init(tensor=full_list[i], params=self.tensors_full[i], param_types=0) + self.relax.interpreter._Align_tensor.init(tensor=red_list[i], params=self.tensors_red[i], param_types=0) + + # Errors. + self.relax.interpreter._Align_tensor.init(tensor=full_list[i], params=(error, error, error, error, error), param_types=0, errors=True) + self.relax.interpreter._Align_tensor.init(tensor=red_list[i], params=(error, error, error, error, error), param_types=0, errors=True) + + # Domain. + self.relax.interpreter._Align_tensor.set_domain(tensor=full_list[i], domain='full') + self.relax.interpreter._Align_tensor.set_domain(tensor=red_list[i], domain='red') + + # Tensor reductions. + self.relax.interpreter._Align_tensor.reduction(full_tensor=full_list[i], red_tensor=red_list[i]) # Reset some values. - cdp.diff_tensor.tm_sim[0] = 9.00e-8 - - - # Some fake MC simulations (for the spheroid). - self.relax.interpreter._Pipe.switch('spheroid') - - # Initialise the data structures. - cdp.diff_tensor.tm_sim = DiffTensorSimList('tm', cdp.diff_tensor, elements=5) - cdp.diff_tensor.Da_sim = DiffTensorSimList('Da', cdp.diff_tensor, elements=5) - cdp.diff_tensor.theta_sim = DiffTensorSimList('theta', cdp.diff_tensor, elements=5) - cdp.diff_tensor.phi_sim = DiffTensorSimList('phi', cdp.diff_tensor, elements=5) - - # Set some errors. - cdp.diff_tensor.Da_err = 1000000 - cdp.diff_tensor.theta_err = 0.01 - cdp.diff_tensor.tm_err = 1e-11 - cdp.diff_tensor.phi_err = 0.01 - - # The sim data. - Da_sim = [-12000000., -11000000., -10000000., -9000000., -8000000.] - theta_sim = [1.70, 1.65, 1.6, 1.55, 1.50] - tm_sim = [5.4e-09, 4.8e-09, 5e-09, 5.4e-09, 5.8e-09] - phi_sim = [2.5, 2.6, 2.7, 2.8, 100] - for i in range(5): - cdp.diff_tensor.Da_sim[i] = Da_sim[i] - cdp.diff_tensor.theta_sim[i] = theta_sim[i] - cdp.diff_tensor.tm_sim[i] = tm_sim[i] - cdp.diff_tensor.phi_sim[i] = phi_sim[i] - - # Reset some values. - cdp.diff_tensor.tm_sim[0] = 4.4e-9 - cdp.diff_tensor.phi_sim[4] = 2.9 - - - # Some fake MC simulations (for the ellipsoid). - self.relax.interpreter._Pipe.switch('ellipsoid') - - # Initialise the data structures. - cdp.diff_tensor.tm_sim = DiffTensorSimList('tm', cdp.diff_tensor, elements=5) - cdp.diff_tensor.Da_sim = DiffTensorSimList('Da', cdp.diff_tensor, elements=5) - cdp.diff_tensor.Dr_sim = DiffTensorSimList('Dr', cdp.diff_tensor, elements=5) - cdp.diff_tensor.alpha_sim = DiffTensorSimList('alpha', cdp.diff_tensor, elements=5) - cdp.diff_tensor.beta_sim = DiffTensorSimList('beta', cdp.diff_tensor, elements=5) - cdp.diff_tensor.gamma_sim = DiffTensorSimList('gamma', cdp.diff_tensor, elements=5) - - # The sim data. - Dr_sim = [0.28, 0.29, 0.3, 0.31, 0.32] - tm_sim = [8.97e-8, 8.99e-8, 9.00e-8, 9.01e-8, 9.02e-8] - Da_sim = [5.02e6, 5.01e6, 5.00e6, 4.99e6, 4.98e6] - alpha_sim = [80.0/360*2*pi, 70.0/360*2*pi, 60.0/360*2*pi, 50.0/360*2*pi, 40.0/360*2*pi] - beta_sim = [295.0/360*2*pi, 292.5/360*2*pi, 290.0/360*2*pi, 289.5/360*2*pi, 288.0/360*2*pi] - gamma_sim = [102.0/360*2*pi, 101.0/360*2*pi, 0, 99.0/360*2*pi, 98.0/360*2*pi] - for i in range(5): - cdp.diff_tensor.Dr_sim[i] = Dr_sim[i] - cdp.diff_tensor.tm_sim[i] = tm_sim[i] - cdp.diff_tensor.Da_sim[i] = Da_sim[i] - cdp.diff_tensor.alpha_sim[i] = alpha_sim[i] - cdp.diff_tensor.beta_sim[i] = beta_sim[i] - cdp.diff_tensor.gamma_sim[i] = gamma_sim[i] - - # Reset some values. - cdp.diff_tensor.tm_sim[0] = 8.98e-8 - cdp.diff_tensor.gamma_sim[2] = 100.0/360*2*pi + cdp.align_tensors[2].Axx = 1 def tearDown(self): @@ -147,157 +93,34 @@ ds.__reset__() # Delete the temporary files. - try: - remove(self.tmpfile_sphere) - remove(self.tmpfile_spheroid) - remove(self.tmpfile_ellipsoid) - except OSError: - pass + delete(self.tmpfile, fail=False) - def test_copy(self): - """The user function diffusion_tensor.copy().""" + def test_to_and_from_xml(self): + """Test the conversion to and from XML.""" - # Create three additional data pipes for copying the spherical, spheroidal, and ellipsoidal diffusion data. - self.relax.interpreter._Pipe.create('sphere2', 'mf') - self.relax.interpreter._Pipe.create('spheroid2', 'mf') - self.relax.interpreter._Pipe.create('ellipsoid2', 'mf') + # Save the data pipe. + self.relax.interpreter._Results.write(self.tmpfile, dir=None) - # Copy the data. - self.relax.interpreter._Diffusion_tensor.copy('sphere', 'sphere2') - self.relax.interpreter._Diffusion_tensor.copy('spheroid', 'spheroid2') - self.relax.interpreter._Diffusion_tensor.copy('ellipsoid', 'ellipsoid2') + # Create a new data pipe. + self.relax.interpreter._Pipe.create('new', 'frame order') - # Get the data pipes. - sphere_pipe = get_pipe('sphere') - sphere2_pipe = get_pipe('sphere2') + # Load the data. + self.relax.interpreter._Results.read(self.tmpfile, dir=None) - # Check that this is indeed a copy. - self.assertEqual(sphere2_pipe.diff_tensor.tm_sim[4], 9.02e-8) - self.assertEqual(sphere2_pipe.diff_tensor.Diso_sim[4], 1/(6*9.02e-8)) - sphere_pipe.diff_tensor.tm_sim[4] = 8.88e-8 - self.assertEqual(sphere_pipe.diff_tensor.tm_sim[4], 8.88e-8) - self.assertEqual(sphere_pipe.diff_tensor.Diso_sim[4], 1/(6*8.88e-8)) - self.assertEqual(sphere2_pipe.diff_tensor.tm_sim[4], 9.02e-8) - self.assertEqual(sphere2_pipe.diff_tensor.Diso_sim[4], 1/(6*9.02e-8)) + # Checks. + self.assertEqual(len(cdp.align_tensors), 5) + for i in range(5): + # Full tensors. + self.assertEqual(cdp.align_tensors[i*2].Axx, self.tensors_full[i][0]) + self.assertEqual(cdp.align_tensors[i*2].Ayy, self.tensors_full[i][1]) + self.assertEqual(cdp.align_tensors[i*2].Axy, self.tensors_full[i][2]) + self.assertEqual(cdp.align_tensors[i*2].Axz, self.tensors_full[i][3]) + self.assertEqual(cdp.align_tensors[i*2].Ayz, self.tensors_full[i][4]) - - def test_delete(self): - """The user function diffusion_tensor.delete().""" - - # Delete the data. - self.relax.interpreter._Pipe.switch('sphere') - self.relax.interpreter._Diffusion_tensor.delete() - self.relax.interpreter._Pipe.switch('spheroid') - self.relax.interpreter._Diffusion_tensor.delete() - self.relax.interpreter._Pipe.switch('ellipsoid') - self.relax.interpreter._Diffusion_tensor.delete() - - - def test_display(self): - """The user function diffusion_tensor.display().""" - - # Display the data. - self.relax.interpreter._Pipe.switch('sphere') - self.relax.interpreter._Diffusion_tensor.display() - self.relax.interpreter._Pipe.switch('spheroid') - self.relax.interpreter._Diffusion_tensor.display() - self.relax.interpreter._Pipe.switch('ellipsoid') - self.relax.interpreter._Diffusion_tensor.display() - - - def test_create_diff_tensor_pdb_sphere(self): - """Test the user function structure.create_diff_tensor_pdb() for the sphere.""" - - # First copy the data (a more vigorous copy test!). - self.relax.interpreter._Pipe.copy('sphere', 'sphere2') - self.relax.interpreter._Pipe.switch('sphere2') - self.relax.interpreter._Diffusion_tensor.delete() - self.relax.interpreter._Diffusion_tensor.copy('sphere', 'sphere2') - - # Create the diffusion tensor objects. - self.relax.interpreter._Structure.create_diff_tensor_pdb(file=self.tmpfile_sphere) - - # Open the temp file. - file = open(self.tmpfile_sphere) - new_data = file.readlines() - file.close() - - # Open the real file. - file = open(sys.path[-1] + sep+'test_suite'+sep+'shared_data'+sep+'structures'+sep+'diff_tensors'+sep+'sphere.pdb') - real_data = file.readlines() - file.close() - - # Check the data. - self.assertEqual(len(real_data), len(new_data)) - for i in range(len(real_data)): - # Print the PDB line, for debugging. - print((real_data[i][0:-1])) - - # Check the line. - self.assertEqual(real_data[i], new_data[i]) - - - def test_create_diff_tensor_pdb_spheroid(self): - """Test the user function structure.create_diff_tensor_pdb() for the spheroid.""" - - # First copy the data (a more vigorous copy test!). - self.relax.interpreter._Pipe.copy('spheroid', 'spheroid2') - self.relax.interpreter._Pipe.switch('spheroid2') - self.relax.interpreter._Diffusion_tensor.delete() - self.relax.interpreter._Diffusion_tensor.copy('spheroid', 'spheroid2') - - # Create the diffusion tensor objects. - self.relax.interpreter._Structure.create_diff_tensor_pdb(file=self.tmpfile_spheroid) - - # Open the temp file. - file = open(self.tmpfile_spheroid) - new_data = file.readlines() - file.close() - - # Open the real file. - file = open(sys.path[-1] + sep+'test_suite'+sep+'shared_data'+sep+'structures'+sep+'diff_tensors'+sep+'spheroid.pdb') - real_data = file.readlines() - file.close() - - # Check the data. - self.assertEqual(len(real_data), len(new_data)) - for i in range(len(real_data)): - # Print the PDB line, for debugging. - print((real_data[i][0:-1])) - - # Check the line. - self.assertEqual(real_data[i], new_data[i]) - - - def test_create_diff_tensor_pdb_ellipsoid(self): - """Test the user function structure.create_diff_tensor_pdb() for the ellipsoid.""" - - # First copy the data (a more vigorous copy test!). - self.relax.interpreter._Pipe.copy('ellipsoid', 'ellipsoid2') - self.relax.interpreter._Pipe.switch('ellipsoid2') - self.relax.interpreter._Diffusion_tensor.delete() - self.relax.interpreter._Diffusion_tensor.copy('ellipsoid', 'ellipsoid2') - - # Create the diffusion tensor objects. - self.relax.interpreter._Structure.create_diff_tensor_pdb(file=self.tmpfile_ellipsoid, scale=1e-05) - - # Open the temp file. - file = open(self.tmpfile_ellipsoid) - new_data = file.readlines() - file.close() - - # Open the real file. - file = open(sys.path[-1] + sep+'test_suite'+sep+'shared_data'+sep+'structures'+sep+'diff_tensors'+sep+'ellipsoid.pdb') - real_data = file.readlines() - file.close() - - # Check the data. - self.assertEqual(len(real_data), len(new_data)) - for i in range(len(real_data)): - # Print the PDB line, for debugging. - print((real_data[i][0:-1])) - - # Check the line. - self.assertEqual(real_data[i], new_data[i]) - + # Reduced tensors. + self.assertEqual(cdp.align_tensors[i*2+1].Axx, self.tensors_red[i][0]) + self.assertEqual(cdp.align_tensors[i*2+1].Ayy, self.tensors_red[i][1]) + self.assertEqual(cdp.align_tensors[i*2+1].Axy, self.tensors_red[i][2]) + self.assertEqual(cdp.align_tensors[i*2+1].Axz, self.tensors_red[i][3]) + self.assertEqual(cdp.align_tensors[i*2+1].Ayz, self.tensors_red[i][4])