"platforms/opencl/tests/TestOpenCLCustomCPPForce.cpp" did not exist on "644cc275ab5a549a82cce4d49680da729c2051e6"
TestAmberInpcrdFile.py 4.01 KB
Newer Older
1
2
import unittest
from validateConstraints import *
3
4
5
6
from openmm.app import *
from openmm import *
from openmm.unit import *
import openmm.app.element as elem
7
try:
8
    from scipy.io import NetCDFFile
9
    SCIPY_IMPORT_FAILED = False
10
11
12
13
14
15
16
except ImportError:
    try:
        # scipy < 1.8.0
        from scipy.io import netcdf
        SCIPY_IMPORT_FAILED = False
    except:
        SCIPY_IMPORT_FAILED = True
17

18
19
20
21
def compareByElement(array1, array2, cmp):
    for x, y in zip(array1, array2):
        cmp(x, y)

22

23
24
class TestAmberInpcrdFile(unittest.TestCase):
    """Test the Amber inpcrd file parser"""
25

26
27
    def test_CrdVelBox(self):
        """ Test parsing ASCII restarts with crds, vels, and box """
28
        cmp = self.assertAlmostEqual
29
        inpcrd = AmberInpcrdFile('systems/crds_vels_box.rst7')
30
31
32
33
34
35
36
        self.assertEqual(len(inpcrd.positions), 2101)
        compareByElement(inpcrd.positions[-1].value_in_unit(angstroms),
                         [3.5958082, 8.4176792, -8.2954064], cmp)
        compareByElement(inpcrd.velocities[-1].value_in_unit(angstroms/picoseconds),
                         [0.3091332*20.455, 0.7355925*20.455, -0.1206961*20.455], cmp)
        compareByElement(inpcrd.boxVectors[0].value_in_unit(angstroms),
                         [30.2642725, 0.0, 0.0], cmp)
37

38
    @unittest.skipIf(SCIPY_IMPORT_FAILED, "Scipy is not installed")
39
40
    def test_NetCDF(self):
        """ Test NetCDF restart file parsing """
41
        cmp = self.assertAlmostEqual
42
43
44
45
46
47
48
49
50
51
52

        inpcrd = AmberInpcrdFile('systems/amber.ncrst')
        self.assertEqual(len(inpcrd.positions), 2101)
        compareByElement(inpcrd.positions[0].value_in_unit(angstroms),
                         [6.82122492718229, 6.6276250662042, -8.51668999892245],
                         cmp)
        compareByElement(inpcrd.velocities[-1].value_in_unit(angstroms/picosecond),
                         [0.349702202733541*20.455, 0.391525333168534*20.455,
                          0.417941679767662*20.455], cmp)
        self.assertAlmostEqual(inpcrd.boxVectors[0][0].value_in_unit(angstroms),
                               30.2642725, places=6)
53
54
55
56

    def test_CrdBox(self):
        """ Test parsing ASCII restarts with only crds and box """
        inpcrd = AmberInpcrdFile('systems/crds_box.rst7')
57
        self.assertEqual(len(inpcrd.positions), 18660)
58
59
60
61
62
63
64
65
66
67
68
69
70
        self.assertTrue(inpcrd.velocities is None)
        self.assertTrue(inpcrd.boxVectors is not None)

    def test_CrdVel(self):
        inpcrd = AmberInpcrdFile('systems/crds_vels.rst7')
        self.assertTrue(inpcrd.boxVectors is None)
        self.assertTrue(inpcrd.velocities is not None)

    def test_CrdOnly(self):
        inpcrd = AmberInpcrdFile('systems/crdsonly.rst7')
        self.assertTrue(inpcrd.boxVectors is None)
        self.assertTrue(inpcrd.velocities is None)

71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
    def test_CrdBoxTruncoct(self):
        # Check that the box vectors come out correct.
        inpcrd = AmberInpcrdFile('systems/tz2.truncoct.rst7')
        ac = Vec3(42.4388485, 0.0, 0.0) * angstroms
        bc = Vec3(-14.146281691908937, 40.011730483685835, 0.0) * angstroms
        cc = Vec3(-14.146281691908937, -20.0058628205162, 34.651176446201672) * angstroms
        a, b, c = inpcrd.getBoxVectors()
        diffa = ac - a
        diffb = bc - b
        diffc = cc - c
        self.assertAlmostEqual(norm(diffa)/angstroms, 0)
        self.assertAlmostEqual(norm(diffb)/angstroms, 0)
        self.assertAlmostEqual(norm(diffc)/angstroms, 0)
        # Make sure angles and lengths come out about right
        la = norm(a).in_units_of(angstroms)
        lb = norm(b).in_units_of(angstroms)
        lc = norm(c).in_units_of(angstroms)
        self.assertAlmostEqual(la/angstroms, 42.4388485, 6)
        self.assertAlmostEqual(lb/angstroms, 42.4388485, 6)
        self.assertAlmostEqual(lc/angstroms, 42.4388485, 6)
        self.assertAlmostEqual(dot(a,b)/la/lb, cos(109.4712190*degrees), 6)
        self.assertAlmostEqual(dot(a,c)/la/lc, cos(109.4712190*degrees), 6)
        self.assertAlmostEqual(dot(b,c)/lc/lb, cos(109.4712190*degrees), 6)

95
96
if __name__ == '__main__':
    unittest.main()