TestCheckpointReporter.py 1.51 KB
Newer Older
1
import os
Robert McGibbon's avatar
Robert McGibbon committed
2
3
4
5
6
7
8
9
10
import unittest
import tempfile
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
    def test_1(self):
21
        file = tempfile.NamedTemporaryFile(delete=False)
Robert McGibbon's avatar
Robert McGibbon committed
22
23
        self.simulation.reporters.append(app.CheckpointReporter(file, 1))
        self.simulation.step(1)
24
25

        # get the current positions
26
27
        positions = self.simulation.context.getState(getPositions=True).getPositions()

28
        # now set the positions into junk...
29
30
        self.simulation.context.setPositions([mm.Vec3(0, 0, 0)] * len(positions))

31
        # then reload the right positions from the checkpoint
32
        file.close()
Robert McGibbon's avatar
Robert McGibbon committed
33
34
        with open(file.name, 'rb') as f:
            self.simulation.context.loadCheckpoint(f.read())
35
        os.unlink(file.name)
Robert McGibbon's avatar
Robert McGibbon committed
36

37
38
        newPositions = self.simulation.context.getState(getPositions=True).getPositions()
        self.assertSequenceEqual(positions, newPositions)
39

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