"csrc/sm90/decode/vscode:/vscode.git/clone" did not exist on "58b43d4a7261cfe4f49dfa931db2a598b95dc4a7"
TestTopology.py 2.6 KB
Newer Older
1
import pickle
2
3
import sys
import unittest
4
5
6
7
from openmm.app import *
from openmm import *
from openmm.unit import *
import openmm.app.element as elem
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
if sys.version_info >= (3, 0):
    from io import StringIO
else:
    from cStringIO import StringIO


class TestTopology(unittest.TestCase):
    """Test the Topology object"""


    def check_pdbfile(self, pdbfilename, natoms, nres, nchains):
        """Check that a PDB file has the specified number of atoms, residues, and chains."""
        pdb = PDBFile(pdbfilename)
        top = pdb.topology
        self.assertEqual(pdb.topology.getNumAtoms(), natoms)
        self.assertEqual(pdb.topology.getNumResidues(), nres)
        self.assertEqual(pdb.topology.getNumChains(), nchains)

    def test_getters(self):
        """Test getters for number of atoms, residues, chains."""
28
        self.check_pdbfile('systems/1T2Y.pdb', 271, 25, 1)
29

30
31
32
33
34
35
36
37
    def test_bondtype_singleton(self):
        """ Tests that the bond types are really singletons """
        self.assertIs(Single, pickle.loads(pickle.dumps(Single)))
        self.assertIs(Double, pickle.loads(pickle.dumps(Double)))
        self.assertIs(Triple, pickle.loads(pickle.dumps(Triple)))
        self.assertIs(Aromatic, pickle.loads(pickle.dumps(Aromatic)))
        self.assertIs(Amide, pickle.loads(pickle.dumps(Amide)))

38
39
40
41
42
43
44
45
46
47
48
49
50
    def test_residue_bonds(self):
        """Test retrieving bonds for a residue produces expected results."""
        # Create a test topology
        # atom connectivity = A1-|-B1-B2-|-C1
        topology = Topology()
        chain = topology.addChain(id='A')
        residue1 = topology.addResidue('AAA', chain)
        residue2 = topology.addResidue('BBB', chain)
        residue3 = topology.addResidue('CCC', chain)
        atom_A1 = topology.addAtom('A1', element.carbon, residue1)
        atom_B1 = topology.addAtom('B1', element.carbon, residue2)
        atom_B2 = topology.addAtom('B2', element.carbon, residue2)
        atom_C1 = topology.addAtom('C1', element.carbon, residue3)
51
52
53
        topology.addBond(atom_A1, atom_B1)
        topology.addBond(atom_B1, atom_B2)
        topology.addBond(atom_B2, atom_C1)
54
        # Check bonds
John Chodera (MSKCC)'s avatar
John Chodera (MSKCC) committed
55
56
57
        all_bonds = [ bond for bond in residue2.bonds() ]
        internal_bonds = [ bond for bond in residue2.internal_bonds() ]
        external_bonds = [ bond for bond in residue2.external_bonds() ]
58
59
60
61
        self.assertEqual(all_bonds, [ (atom_A1, atom_B1), (atom_B1, atom_B2), (atom_B2, atom_C1) ])
        self.assertEqual(internal_bonds, [ (atom_B1, atom_B2) ])
        self.assertEqual(external_bonds, [ (atom_A1, atom_B1), (atom_B2, atom_C1) ])

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