Exemplo n.º 1
0
class TestOpanXYZGoodDirectData(SuperOpanXYZ):
    # Confirming sanity of an OpanXYZ generated directly from data.
    # There are checks here of some of the generated resuls when using
    #  'x_iter' methods with 'None'.

    def setUp(self):
        # Load the object

        # Imports
        from opan.xyz import OpanXYZ

        # Create the object
        self.xyz = OpanXYZ(atom_syms=self.good_direct_atoms,
                           coords=self.good_direct_geom)

        # Long messages
        self.longMessage = True

    def test_XYZ_GoodDirectDataNumAtoms(self):
        self.assertEqual(self.xyz.num_atoms, len(self.good_direct_atoms))

    def test_XYZ_GoodDirectDataNumGeoms(self):
        self.assertEqual(self.xyz.num_geoms, 1)

    def test_XYZ_GoodDirectDataNumCoords(self):
        self.assertEqual(self.xyz.geoms[0].shape[0], self.xyz.num_atoms * 3)

    def test_XYZ_GoodDirectDataCoords(self):
        for i in range(self.good_direct_geom[0].shape[0]):
            self.assertAlmostEqual(self.xyz.geoms[0][i],
                                   self.good_direct_geom[0][i],
                                   delta=1e-8,
                                   msg="Coordinates element (" + str(i) + ')')

    def test_XYZ_GoodDirectDataIterO1Dist(self):
        for tup in zip(self.good_direct_O1Dist, self.xyz.dist_iter(0, 1, None),
                       range(self.good_direct_O1Dist.shape[0])):
            self.assertAlmostEqual(
                tup[0],
                tup[1],
                delta=1e-5,
                msg="Distance between O1 and atom #" + str(tup[2]) + " (" +
                self.xyz.atom_syms[tup[2]].capitalize() + ")")

    def test_XYZ_GoodDirectDataIterCuO1Angle(self):
        for tup in zip(self.good_direct_CuO1Angle,
                       self.xyz.angle_iter(0, 0, 1, None),
                       range(self.good_direct_CuO1Angle.shape[0])):
            self.assertAlmostEqual(
                tup[0],
                tup[1],
                delta=5e-3,
                msg="Angle Cu-O-X with atom #" + str(tup[2]) + " (" +
                self.xyz.atom_syms[tup[2]].capitalize() + ")")

    def test_XYZ_GoodDirectDataIterDihed(self):
        for tup in zip(self.good_direct_Dihed,
                       self.xyz.dihed_iter(0, None, 1, 0, 2),
                       range(self.good_direct_Dihed.shape[0])):
            self.assertAlmostEqual(
                tup[0],
                tup[1],
                delta=5e-3,
                msg="Dihedral with atom #" + str(tup[2]) + " (" +
                self.xyz.atom_syms[tup[2]].capitalize() + ")")
Exemplo n.º 2
0
class TestOpanXYZGoodDirectData(SuperOpanXYZ):
    # Confirming sanity of an OpanXYZ generated directly from data.
    # There are checks here of some of the generated resuls when using
    #  'x_iter' methods with 'None'.

    def setUp(self):
        # Load the object

        # Imports
        from opan.xyz import OpanXYZ

        # Create the object
        self.xyz = OpanXYZ(atom_syms=self.good_direct_atoms,
                                            coords=self.good_direct_geom)

        # Long messages
        self.longMessage = True

    def test_XYZ_GoodDirectDataNumAtoms(self):
        self.assertEqual(self.xyz.num_atoms, len(self.good_direct_atoms))

    def test_XYZ_GoodDirectDataNumGeoms(self):
        self.assertEqual(self.xyz.num_geoms, 1)

    def test_XYZ_GoodDirectDataNumCoords(self):
        self.assertEqual(self.xyz.geoms[0].shape[0], self.xyz.num_atoms * 3)

    def test_XYZ_GoodDirectDataCoords(self):
        for i in range(self.good_direct_geom[0].shape[0]):
            self.assertAlmostEqual(self.xyz.geoms[0][i],
                    self.good_direct_geom[0][i],
                    delta=1e-8,
                    msg="Coordinates element (" + str(i) + ')')

    def test_XYZ_GoodDirectDataIterO1Dist(self):
        for tup in zip(
                    self.good_direct_O1Dist,
                    self.xyz.dist_iter(0,1,None),
                    range(self.good_direct_O1Dist.shape[0])
                        ):
            self.assertAlmostEqual(tup[0], tup[1], delta=1e-5,
                    msg="Distance between O1 and atom #" + str(tup[2]) +
                            " (" + self.xyz.atom_syms[tup[2]].capitalize() +
                            ")")

    def test_XYZ_GoodDirectDataIterCuO1Angle(self):
        for tup in zip(
                    self.good_direct_CuO1Angle,
                    self.xyz.angle_iter(0,0,1,None),
                    range(self.good_direct_CuO1Angle.shape[0])
                        ):
            self.assertAlmostEqual(tup[0], tup[1], delta=5e-3,
                    msg="Angle Cu-O-X with atom #" + str(tup[2]) +
                            " (" + self.xyz.atom_syms[tup[2]].capitalize() +
                            ")")

    def test_XYZ_GoodDirectDataIterDihed(self):
        for tup in zip(
                    self.good_direct_Dihed,
                    self.xyz.dihed_iter(0,None, 1,0,2),
                    range(self.good_direct_Dihed.shape[0])
                        ):
            self.assertAlmostEqual(tup[0], tup[1], delta=5e-3,
                    msg="Dihedral with atom #" + str(tup[2]) +
                            " (" + self.xyz.atom_syms[tup[2]].capitalize() +
                            ")")
Exemplo n.º 3
0
class TestOpanXYZGoodFileData(SuperOpanXYZ):
    # Ensuring importing a known OpenBabel xyz file with good data reports
    #  the correct geometric parameters, etc.

    @classmethod
    def setUpClass(cls):
        from opan.test.utils import setUpTestDir

        # Set up the directory and add the good file
        setUpTestDir(cls.testdir)

        # Write the file
        with open(cls.file_name, 'w') as f:
            f.write(cls.file_text_good)

    @classmethod
    def tearDownClass(cls):
        import os
        from opan.test.utils import tearDownTestDir

        # Delete the xyz file
        os.remove(cls.file_name)

        # Remove the test directory
        tearDownTestDir(cls.testdir)

    def setUp(self):
        # Load the object

        # Imports
        from opan.xyz import OpanXYZ

        # Create the object
        self.xyz = OpanXYZ(path=self.file_name)

        # Long messages
        self.longMessage = True

    def test_XYZ_GoodFileDataNumAtoms(self):
        self.assertEqual(self.xyz.num_atoms, self.num_atoms)

    def test_XYZ_GoodFileDataNumGeoms(self):
        self.assertEqual(self.xyz.num_geoms, self.num_geoms)

    def test_XYZ_GoodFileDataAtomSyms(self):
        for i in range(len(self.xyz.atom_syms)):
            self.assertEqual(self.xyz.atom_syms[i],
                             self.atom_syms[i],
                             msg="Coordinates element (" + str(i) + ')')

    def test_XYZ_GoodFileDataCoords(self):
        for g in range(len(self.geoms)):
            for i in range(self.geoms[g].shape[0]):
                self.assertAlmostEqual(self.xyz.geoms[g][i],
                                       self.geoms[g][i],
                                       delta=1e-6,
                                       msg="Geometry #" + str(g) +
                                       ", coordinate element #" + str(i))

    def test_XYZ_GoodFileDataDistances(self):
        for t in zip(self.dist_Cu_O, self.xyz.dist_iter(None, 0, 1),
                     range(self.dist_Cu_O.shape[0])):
            self.assertAlmostEqual(t[0],
                                   t[1],
                                   delta=1e-5,
                                   msg="Cu-O distance mismatch at geom #" +
                                   str(t[2]) + ": " + str(t[0:2]))
        for t in zip(self.dist_O_H1, self.xyz.dist_iter(None, 1, 2),
                     range(self.dist_O_H1.shape[0])):
            self.assertAlmostEqual(t[0],
                                   t[1],
                                   delta=1e-5,
                                   msg="O-H1 distance mismatch at geom #" +
                                   str(t[2]) + ": " + str(t[0:2]))

    def test_XYZ_GoodFileDataAngles(self):
        for t in zip(self.angle_Cu_O_H1, self.xyz.angle_iter(None, 0, 1, 2),
                     range(self.angle_Cu_O_H1.shape[0])):
            self.assertAlmostEqual(t[0],
                                   t[1],
                                   delta=1e-2,
                                   msg="Cu-O-H1 angle mismatch at geom #" +
                                   str(t[2]) + ": " + str(t[0:2]))

    def test_XYZ_GoodFileDataDihedrals(self):
        for t in zip(self.dihed_H2_O_Cu_H1,
                     self.xyz.dihed_iter(None, 3, 1, 0, 2),
                     range(self.dihed_H2_O_Cu_H1.shape[0])):
            self.assertAlmostEqual(
                t[0],
                t[1],
                delta=1e-2,
                msg="H2-Cu-O-H1 dihedral mismatch at geom #" + str(t[2]) +
                ": " + str(t[0:2]))

    def test_XYZ_GoodFileDataIterGeom(self):

        import numpy as np

        idxs = [1, 4, 8]
        for t in zip(
                np.array(self.geoms)[idxs], self.xyz.geom_iter(idxs),
                range(len(idxs))):
            for i in range(t[0].shape[0]):
                self.assertAlmostEqual(t[0][i], t[1][i], delta=1e-6,
                        msg="Geometry #" + str(t[2]) + \
                                ", coordinate element #" + str(i))

    def test_XYZ_GoodFileDataDisplacements(self):

        for t in zip(self.displ_Cu_O, self.xyz.displ_iter(None, 0, 1),
                     range(len(self.displ_Cu_O))):
            for i in range(self.displ_Cu_O[0].shape[0]):
                self.assertAlmostEqual(
                    t[0][i],
                    t[1][i],
                    delta=1e-6,
                    msg="Displacement #{0}, dimension #{1}".format(t[2], i))

    def test_XYZ_GoodFileDataZeroDisplacement(self):

        # Have to use assertTrue b/c numpy confuses assertEqual &c.
        self.assertTrue(all(self.xyz.displ_single(0, 0, 0) == [0.0, 0.0, 0.0]))
Exemplo n.º 4
0
class TestOpanXYZGoodFileData(SuperOpanXYZ):
    # Ensuring importing a known OpenBabel xyz file with good data reports
    #  the correct geometric parameters, etc.

    @classmethod
    def setUpClass(cls):
        from opan.test.utils import setUpTestDir

        # Set up the directory and add the good file
        setUpTestDir(cls.testdir)

        # Write the file
        with open(cls.file_name, 'w') as f:
            f.write(cls.file_text_good)

    @classmethod
    def tearDownClass(cls):
        import os
        from opan.test.utils import tearDownTestDir

        # Delete the xyz file
        os.remove(cls.file_name)

        # Remove the test directory
        tearDownTestDir(cls.testdir)

    def setUp(self):
        # Load the object

        # Imports
        from opan.xyz import OpanXYZ

        # Create the object
        self.xyz = OpanXYZ(path=self.file_name)

        # Long messages
        self.longMessage = True

    def test_XYZ_GoodFileDataNumAtoms(self):
        self.assertEqual(self.xyz.num_atoms, self.num_atoms)

    def test_XYZ_GoodFileDataNumGeoms(self):
        self.assertEqual(self.xyz.num_geoms, self.num_geoms)

    def test_XYZ_GoodFileDataAtomSyms(self):
        for i in range(len(self.xyz.atom_syms)):
            self.assertEqual(self.xyz.atom_syms[i],
                    self.atom_syms[i],
                    msg="Coordinates element (" + str(i) + ')')

    def test_XYZ_GoodFileDataCoords(self):
        for g in range(len(self.geoms)):
            for i in range(self.geoms[g].shape[0]):
                self.assertAlmostEqual(self.xyz.geoms[g][i],
                        self.geoms[g][i],
                        delta=1e-6,
                        msg="Geometry #" + str(g) +
                                ", coordinate element #" + str(i))

    def test_XYZ_GoodFileDataDistances(self):
        for t in zip(self.dist_Cu_O, self.xyz.dist_iter(None, 0, 1),
                                        range(self.dist_Cu_O.shape[0])):
            self.assertAlmostEqual(t[0], t[1], delta=1e-5,
                        msg="Cu-O distance mismatch at geom #" + str(t[2]) +
                        ": " + str(t[0:2]))
        for t in zip(self.dist_O_H1, self.xyz.dist_iter(None, 1, 2),
                                        range(self.dist_O_H1.shape[0])):
            self.assertAlmostEqual(t[0], t[1], delta=1e-5,
                        msg="O-H1 distance mismatch at geom #" + str(t[2]) +
                        ": " + str(t[0:2]))

    def test_XYZ_GoodFileDataAngles(self):
        for t in zip(self.angle_Cu_O_H1, self.xyz.angle_iter(None, 0, 1, 2),
                                        range(self.angle_Cu_O_H1.shape[0])):
            self.assertAlmostEqual(t[0], t[1], delta=1e-2,
                        msg="Cu-O-H1 angle mismatch at geom #" + str(t[2]) +
                        ": " + str(t[0:2]))

    def test_XYZ_GoodFileDataDihedrals(self):
        for t in zip(self.dihed_H2_O_Cu_H1,
                                    self.xyz.dihed_iter(None, 3, 1, 0, 2),
                                    range(self.dihed_H2_O_Cu_H1.shape[0])):
            self.assertAlmostEqual(t[0], t[1], delta=1e-2,
                        msg="H2-Cu-O-H1 dihedral mismatch at geom #" +
                        str(t[2]) + ": " + str(t[0:2]))

    def test_XYZ_GoodFileDataIterGeom(self):

        import numpy as np

        idxs = [1,4,8]
        for t in zip(np.array(self.geoms)[idxs],
                        self.xyz.geom_iter(idxs),
                        range(len(idxs))
                    ):
            for i in range(t[0].shape[0]):
                self.assertAlmostEqual(t[0][i], t[1][i], delta=1e-6,
                        msg="Geometry #" + str(t[2]) + \
                                ", coordinate element #" + str(i))

    def test_XYZ_GoodFileDataDisplacements(self):

        for t in zip(self.displ_Cu_O,
                        self.xyz.displ_iter(None, 0, 1),
                        range(len(self.displ_Cu_O))
                    ):
            for i in range(self.displ_Cu_O[0].shape[0]):
                self.assertAlmostEqual(t[0][i], t[1][i], delta=1e-6,
                        msg="Displacement #{0}, dimension #{1}".format(t[2], i))

    def test_XYZ_GoodFileDataZeroDisplacement(self):

        # Have to use assertTrue b/c numpy confuses assertEqual &c.
        self.assertTrue(all(self.xyz.displ_single(0,0,0) == [0.0, 0.0, 0.0]))