from numpy.testing import assert_equal, assert_almost_equal
from falass import readwrite, dataformat
import os
import unittest
import sys
if sys.version_info >= (3, 0):
from io import StringIO
else:
from StringIO import StringIO
[docs]class TestFiles(unittest.TestCase):
[docs] def test_files_standard(self):
pdb = readwrite.Files('test.pdb')
assert_equal(pdb.pdbfile, 'test.pdb')
assert_equal(pdb.lgtfile, None)
assert_equal(pdb.datfile, None)
assert_equal(pdb.resolution, 5.)
assert_equal(pdb.ierror, 5.)
assert_equal(pdb.flip, False)
return
[docs] def test_files_variation(self):
pdb = readwrite.Files('test1.pdb', lgtfile='test1.lgt', datfile='test1.dat', resolution=1., ierror=1.,
flip=True)
assert_equal(pdb.pdbfile, 'test1.pdb')
assert_equal(pdb.lgtfile, 'test1.lgt')
assert_equal(pdb.datfile, 'test1.dat')
assert_equal(pdb.resolution, 1.)
assert_equal(pdb.ierror, 1.)
assert_equal(pdb.flip, True)
return
[docs] def test_set_pdbfile(self):
pdb = readwrite.Files('test.pdb')
assert_equal(pdb.pdbfile, 'test.pdb')
pdb.set_file(pdbfile='test1.pdb')
assert_equal(pdb.pdbfile, 'test1.pdb')
return
[docs] def test_set_lgtfile(self):
pdb = readwrite.Files('test.pdb')
assert_equal(pdb.lgtfile, None)
pdb.set_file(lgtfile='test1.lgt')
assert_equal(pdb.lgtfile, 'test1.lgt')
return
[docs] def test_set_datfile(self):
pdb = readwrite.Files('test.pdb')
assert_equal(pdb.datfile, None)
pdb.set_file(datfile='test1.dat')
assert_equal(pdb.datfile, 'test1.dat')
return
[docs] def test_read_pdb(self):
self.path = os.path.dirname(os.path.abspath(__file__))
pdb = readwrite.Files(os.path.join(self.path, 'test.pdb'))
pdb.read_pdb()
assert_equal(pdb.number_of_timesteps, 6)
assert_equal(pdb.times, [0., 10000., 20000., 30000., 40000., 50000.])
assert_equal(len(pdb.atoms), 6)
for i in range(0, len(pdb.atoms)):
assert_equal(len(pdb.atoms[i]), 3)
assert_equal(pdb.atoms[i][0].atom, 'C1')
assert_equal(pdb.atoms[i][1].atom, 'C2')
assert_equal(pdb.atoms[i][2].atom, 'C3')
for i in range(0, 2):
assert_equal(pdb.atoms[i * 3][0].zpos, 01.500)
assert_equal(pdb.atoms[i * 3][1].zpos, 02.500)
assert_equal(pdb.atoms[i * 3][2].zpos, 03.500)
assert_equal(pdb.atoms[i * 3 + 1][0].zpos, 03.500)
assert_equal(pdb.atoms[i * 3 + 1][1].zpos, 01.500)
assert_equal(pdb.atoms[i * 3 + 1][2].zpos, 02.500)
assert_equal(pdb.atoms[i * 3 + 2][0].zpos, 02.500)
assert_equal(pdb.atoms[i * 3 + 2][1].zpos, 03.500)
assert_equal(pdb.atoms[i * 3 + 2][2].zpos, 01.500)
assert_equal(pdb.cell, [[1.000, 1.000, 4.000], [2.000, 1.000, 4.000], [3.000, 1.000, 4.000],
[4.000, 1.000, 4.000], [5.000, 1.000, 4.000], [6.000, 1.000, 4.000]])
return
[docs] def test_read_pdb_flip(self):
self.path = os.path.dirname(os.path.abspath(__file__))
pdb = readwrite.Files(os.path.join(self.path, 'test.pdb'), flip=True)
pdb.read_pdb()
assert_equal(pdb.number_of_timesteps, 6)
assert_equal(pdb.times, [0., 10000., 20000., 30000., 40000., 50000.])
assert_equal(len(pdb.atoms), 6)
for i in range(0, len(pdb.atoms)):
assert_equal(len(pdb.atoms[i]), 3)
assert_equal(pdb.atoms[i][0].atom, 'C1')
assert_equal(pdb.atoms[i][1].atom, 'C2')
assert_equal(pdb.atoms[i][2].atom, 'C3')
for i in range(0, 2):
assert_equal(pdb.atoms[i * 3][0].zpos, 02.500)
assert_equal(pdb.atoms[i * 3][1].zpos, 01.500)
assert_equal(pdb.atoms[i * 3][2].zpos, 00.500)
assert_equal(pdb.atoms[i * 3 + 1][0].zpos, 00.500)
assert_equal(pdb.atoms[i * 3 + 1][1].zpos, 02.500)
assert_equal(pdb.atoms[i * 3 + 1][2].zpos, 01.500)
assert_equal(pdb.atoms[i * 3 + 2][0].zpos, 01.500)
assert_equal(pdb.atoms[i * 3 + 2][1].zpos, 00.500)
assert_equal(pdb.atoms[i * 3 + 2][2].zpos, 02.500)
assert_equal(pdb.cell, [[1.000, 1.000, 4.000], [2.000, 1.000, 4.000], [3.000, 1.000, 4.000],
[4.000, 1.000, 4.000], [5.000, 1.000, 4.000], [6.000, 1.000, 4.000]])
return
[docs] def test_read_lgt(self):
self.path = os.path.dirname(os.path.abspath(__file__))
pdb = readwrite.Files('test.pdb', lgtfile=os.path.join(self.path, 'test.lgt'))
pdb.read_lgt()
assert_equal(pdb.scat_lens[0].atom, 'C1')
assert_almost_equal(pdb.scat_lens[0].real, 1e-5)
assert_almost_equal(pdb.scat_lens[0].imag, 0)
assert_equal(pdb.scat_lens[1].atom, 'C2')
assert_almost_equal(pdb.scat_lens[1].real, 2e-5)
assert_almost_equal(pdb.scat_lens[1].imag, 1e-5)
assert_equal(pdb.scat_lens[2].atom, 'C3')
assert_almost_equal(pdb.scat_lens[2].real, 3e-5)
assert_almost_equal(pdb.scat_lens[2].imag, 2e-5)
return
[docs] def test_read_lgt_not_defined(self):
pdb = readwrite.Files('test.pdb')
with self.assertRaises(ValueError) as context:
pdb.read_lgt()
self.assertTrue("No lgtfile has been defined" in str(context.exception))
return
[docs] def test_read_dat2(self):
self.path = os.path.dirname(os.path.abspath(__file__))
pdb = readwrite.Files('test.pdb', datfile=os.path.join(self.path, 'test2.dat'))
pdb.read_dat()
assert_almost_equal(pdb.expdata[0].q, 0.051793)
assert_almost_equal(pdb.expdata[0].i, 0.00034985)
assert_almost_equal(pdb.expdata[0].di, 0.00034985 * 0.05)
assert_almost_equal(pdb.expdata[0].dq, 0.051793 * 0.05)
assert_almost_equal(pdb.expdata[1].q, 0.13742)
assert_almost_equal(pdb.expdata[1].i, 1.4924e-5)
assert_almost_equal(pdb.expdata[1].di, 1.4924e-5 * 0.05)
assert_almost_equal(pdb.expdata[1].dq, 0.13742 * 0.05)
assert_almost_equal(pdb.expdata[2].q, 0.38285)
assert_almost_equal(pdb.expdata[2].i, 1.215e-6)
assert_almost_equal(pdb.expdata[2].di, 1.215e-6 * 0.05)
assert_almost_equal(pdb.expdata[2].dq, 0.38285 * 0.05)
return
[docs] def test_read_dat3(self):
self.path = os.path.dirname(os.path.abspath(__file__))
pdb = readwrite.Files('test.pdb', datfile=os.path.join(self.path, 'test3.dat'))
pdb.read_dat()
assert_almost_equal(pdb.expdata[0].q, 0.051793)
assert_almost_equal(pdb.expdata[0].i, 0.00034985)
assert_almost_equal(pdb.expdata[0].di, 5.0354e-6)
assert_almost_equal(pdb.expdata[0].dq, 0.051793 * 0.05)
assert_almost_equal(pdb.expdata[1].q, 0.13742)
assert_almost_equal(pdb.expdata[1].i, 1.4924e-5)
assert_almost_equal(pdb.expdata[1].di, 3.7729e-7)
assert_almost_equal(pdb.expdata[1].dq, 0.13742 * 0.05)
assert_almost_equal(pdb.expdata[2].q, 0.38285)
assert_almost_equal(pdb.expdata[2].i, 1.215e-6)
assert_almost_equal(pdb.expdata[2].di, 3.478e-7)
assert_almost_equal(pdb.expdata[2].dq, 0.38285 * 0.05)
return
[docs] def test_read_dat4(self):
self.path = os.path.dirname(os.path.abspath(__file__))
pdb = readwrite.Files('test.pdb', datfile=os.path.join(self.path, 'test4.dat'))
pdb.read_dat()
assert_almost_equal(pdb.expdata[0].q, 0.051793)
assert_almost_equal(pdb.expdata[0].i, 0.00034985)
assert_almost_equal(pdb.expdata[0].di, 5.0354e-6)
assert_almost_equal(pdb.expdata[0].dq, 0.0003)
assert_almost_equal(pdb.expdata[1].q, 0.13742)
assert_almost_equal(pdb.expdata[1].i, 1.4924e-5)
assert_almost_equal(pdb.expdata[1].di, 3.7729e-7)
assert_almost_equal(pdb.expdata[1].dq, 0.0007)
assert_almost_equal(pdb.expdata[2].q, 0.38285)
assert_almost_equal(pdb.expdata[2].i, 1.215e-6)
assert_almost_equal(pdb.expdata[2].di, 3.478e-7)
assert_almost_equal(pdb.expdata[2].dq, 0.0019)
return
[docs] def test_read_dat_not_defined(self):
pdb = readwrite.Files('test.pdb')
assert_equal(pdb.expdata, [])
captured_output = StringIO()
sys.stdout = captured_output
pdb.read_dat()
sys.stdout = sys.__stdout__
assert_equal(captured_output.getvalue(), 'No DAT file has been given, therefore no comparison will be conducted, please use the get_qs '
'function. Alternatively the DAT file can be added using the setFile function.\n')
return
[docs] def test_get_qs(self):
pdb = readwrite.Files('test.pdb')
pdb.get_qs(0.0005, 0.0020, 4)
assert_equal(len(pdb.expdata), 4)
assert_equal(pdb.expdata[0].q, 0.0005)
assert_almost_equal(pdb.expdata[0].dq, 0.0005 * 0.05)
assert_equal(pdb.expdata[1].q, 0.0010)
assert_almost_equal(pdb.expdata[1].dq, 0.0010 * 0.05)
assert_equal(pdb.expdata[2].q, 0.0015)
assert_almost_equal(pdb.expdata[2].dq, 0.0015 * 0.05)
assert_equal(pdb.expdata[3].q, 0.0020)
assert_almost_equal(pdb.expdata[3].dq, 0.0020 * 0.05)
return
if __name__ == "__main__":
unittest.main()
[docs] def test_check_duplicates_true(self):
atom1 = dataformat.ScatLens('C1', 1.0, 0.0)
atom2 = dataformat.ScatLens('C2', 2.0, 1.0)
atom3 = dataformat.ScatLens('C3', 3.0, 2.0)
array = [atom1, atom2, atom3]
check = dataformat.ScatLens('C2', 2.0, 1.0)
bool_ret = readwrite.check_duplicates(array, check.atom)
assert_equal(bool_ret, True)
return
[docs] def test_check_duplicates_false(self):
atom1 = dataformat.ScatLens('C1', 1.0, 0.0)
atom2 = dataformat.ScatLens('C2', 2.0, 1.0)
atom3 = dataformat.ScatLens('C3', 3.0, 2.0)
array = [atom1, atom2, atom3]
check = dataformat.ScatLens('C4', 4.0, 3.0)
bool_ret = readwrite.check_duplicates(array, check.atom)
assert_equal(bool_ret, False)
return
[docs] def test_line_count(self):
path = os.path.dirname(os.path.abspath(__file__))
lines = readwrite.line_count(os.path.join(path, 'test.pdb'))
assert_equal(lines, 60)
return
[docs] def test_flip_zpos(self):
a = readwrite.flip_zpos(10., 2.)
assert_almost_equal(a, 8.)
return
[docs] def test_flip_zpos_neg(self):
a = readwrite.flip_zpos(2., 10.)
assert_almost_equal(a, 8.)
return
[docs] def test_iterate_time(self):
a = 1
line = 'a 10000'
a, b = readwrite.iterate_time(a, line)
assert_equal(a, 2)
assert_almost_equal(b, 10000)
return
[docs] def test_check_update_increase(self):
a = readwrite.check_update(10, 20)
assert_almost_equal(a, 20)
return
[docs] def test_check_update_nochange(self):
a = readwrite.check_update(10, 8)
assert_almost_equal(a, 10)
return