TestPickle.py 1.73 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
import unittest
from validateConstraints import *
from simtk.openmm.app import *
from simtk.openmm import *
from simtk.unit import *
import simtk.openmm.app.element as elem
import simtk.openmm.app.forcefield as forcefield
import copy
import pickle

11
class TestPickle(unittest.TestCase):
kyleabeauchamp's avatar
kyleabeauchamp committed
12
    """Pickling / deepcopy of OpenMM state and integrator objects."""
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

    def setUp(self):
        """Set up the tests by loading the input pdb files and force field
        xml files.

        """
        # alanine dipeptide with explicit water
        self.pdb1 = PDBFile('systems/alanine-dipeptide-explicit.pdb')
        self.forcefield1 = ForceField('amber99sb.xml', 'tip3p.xml')
        self.topology1 = self.pdb1.topology
        self.topology1.setUnitCellDimensions(Vec3(2, 2, 2))

        # alalnine dipeptide with implicit water
        self.pdb2 = PDBFile('systems/alanine-dipeptide-implicit.pdb')
        self.forcefield2 = ForceField('amber99sb.xml', 'amber99_obc.xml')


    def test_deepcopy(self):
        """Test that serialization/deserialization works (via deepcopy)."""

        system = self.forcefield1.createSystem(self.pdb1.topology)
        integrator = VerletIntegrator(2*femtosecond)
        context = Context(system, integrator)
        context.setPositions(self.pdb1.positions)
        state = context.getState(getPositions=True, getForces=True, getEnergy=True)

        system2 = copy.deepcopy(system)
        #integrator2 = copy.deepcopy(integrator)
        state2 = copy.deepcopy(state)
        
        str_state = pickle.dumps(state)
        #str_integrator = pickle.dumps(integrator)
        
        state3 = pickle.loads(str_state)
        context.setState(state3)


        del context, integrator

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