TestCheckpointReporter.py 1.52 KB
Newer Older
Robert McGibbon's avatar
Robert McGibbon committed
1
2
import unittest
import tempfile
3
import numpy as np
Robert McGibbon's avatar
Robert McGibbon committed
4
5
6
7
8
9
10
from simtk.openmm import app
import simtk.openmm as mm
from simtk import unit


class TestCheckpointReporter(unittest.TestCase):
    def setUp(self):
11
12
        with open('systems/alanine-dipeptide-implicit.pdb') as f:
            pdb = app.PDBFile(f)
Robert McGibbon's avatar
Robert McGibbon committed
13
        forcefield = app.ForceField('amber99sbildn.xml')
14
15
        system = forcefield.createSystem(pdb.topology,
            nonbondedMethod=app.CutoffNonPeriodic, nonbondedCutoff=1.0*unit.nanometers,
Robert McGibbon's avatar
Robert McGibbon committed
16
17
18
            constraints=app.HBonds)
        self.simulation = app.Simulation(pdb.topology, system, mm.VerletIntegrator(0.002*unit.picoseconds))
        self.simulation.context.setPositions(pdb.positions)
19

Robert McGibbon's avatar
Robert McGibbon committed
20
21
22
23
    def test_1(self):
        file = tempfile.NamedTemporaryFile()
        self.simulation.reporters.append(app.CheckpointReporter(file, 1))
        self.simulation.step(1)
24
25
26
27
28
29

        # get the current positions
        positions = self.simulation.context.getState(getPositions=True).getPositions(asNumpy=True)._value
        # now set the positions into junk...
        self.simulation.context.setPositions(np.random.random(positions.shape))
        # then reload the right positions from the checkpoint
Robert McGibbon's avatar
Robert McGibbon committed
30
31
32
        with open(file.name, 'rb') as f:
            self.simulation.context.loadCheckpoint(f.read())
        file.close()
Robert McGibbon's avatar
Robert McGibbon committed
33

34
35
36
        newPositions = self.simulation.context.getState(getPositions=True).getPositions(asNumpy=True)._value
        np.testing.assert_array_equal(positions, newPositions)

Robert McGibbon's avatar
Robert McGibbon committed
37
if __name__ == '__main__':
Robert McGibbon's avatar
Robert McGibbon committed
38
    unittest.main()