def testWriteVmd(self): """ Test writing VMD-style PSF files """ # Test writing VMD-style PSFs cpsf = psf.CharmmPsfFile(get_fn('dhfr_cmap_pbc.psf')) cpsf.write_psf(get_fn('dhfr_cmap_pbc.psf', written=True), vmd=True) cpsf2 = psf.CharmmPsfFile(get_fn('dhfr_cmap_pbc.psf', written=True)) for attr in dir(cpsf): if attr.startswith('_'): continue if attr in ('topology', 'positions', 'box_vectors', 'velocities', 'name'): continue if callable(getattr(cpsf, attr)): continue if hasattr(getattr(cpsf, attr), '__len__'): self.assertEqual(len(getattr(cpsf, attr)), len(getattr(cpsf2, attr))) else: self.assertEqual(getattr(cpsf, attr), getattr(cpsf2, attr)) f = open(get_fn('dhfr_cmap_pbc.psf', written=True), 'r') try: has_key = False for line in f: if '!MOLNT' in line: has_key = True break finally: f.close() self.assertFalse(has_key)
def testInscodePSF(self): """ Test PSF with insertion code as part of residue number """ cpsf = psf.CharmmPsfFile(get_fn('4TVP-dmj_wat-ion.psf')) self.assertEqual(len(cpsf.atoms), 66264) self.assertEqual(len(cpsf.residues), 20169) self.assertEqual(len(cpsf.bonds), 46634) self.assertEqual(len(cpsf.angles), 32739) self.assertEqual(len(cpsf.dihedrals), 19104) self.assertEqual(len(cpsf.impropers), 1257) self.assertEqual(len(cpsf.cmaps), 447) self.assertEqual(cpsf.residues[281].insertion_code, 'A')
def testCharmmGuiBuilder(self): """ Test parsing of CHARMM PSF from CHARMM-GUI """ cpsf = psf.CharmmPsfFile(get_fn('parv.psf')) self.assertEqual(len(cpsf.acceptors), 0) self.assertEqual(len(cpsf.angles), 3004) self.assertEqual(len(cpsf.atoms), 1659) self.assertEqual(len(cpsf.bonds), 1671) self.assertEqual(len(cpsf.cmaps), 107) self.assertEqual(len(cpsf.dihedrals), 4377) self.assertEqual(len(cpsf.donors), 0) self.assertEqual(len(cpsf.flags), 3) self.assertEqual(len(cpsf.groups), 1) self.assertEqual(len(cpsf.impropers), 295) self.assertEqual(len(cpsf.residues), 109) self.assertEqual(len(cpsf.title), 3)
def testCharmmPsf(self): """ Test CHARMM PSF file parsing """ cpsf = psf.CharmmPsfFile(get_fn('ala_ala_ala.psf')) self.assertEqual(len(cpsf.atoms), 33) for i, atom in enumerate(cpsf.atoms): self.assertEqual(atom.idx, i) self.assertEqual(atom.residue.name, 'ALA') self.assertTrue(atom in atom.residue) # tests __contains__ # Check the bond, angle, and torsion partners of the first N atom a = cpsf.atoms[0] for atom in a.bond_partners: self.assertTrue(atom.name in ['HT3', 'HT2', 'CA', 'HT1']) self.assertEqual(atom.residue.idx, 0) self.assertTrue(atom.type in [2, 22]) for atom in a.angle_partners: self.assertTrue(atom.name in ['HA', 'CB', 'C']) self.assertTrue(atom.type in [6, 24, 20]) self.assertEqual(atom.residue.idx, 0) for atom in a.dihedral_partners: self.assertTrue(atom.name in ['HB1', 'HB2', 'HB3', 'O', 'N']) if atom.name == 'N': self.assertEqual(atom.residue.idx, 1) else: self.assertEqual(atom.residue.idx, 0) self.assertTrue(atom.type in [3, 70, 54]) # Check some atom properties self.assertRaises(exceptions.MissingParameter, lambda: str(a.atom_type)) self.assertTrue(all([isinstance(b, to.Bond) for b in a.bonds])) self.assertTrue(all([isinstance(an, to.Angle) for an in a.angles])) self.assertTrue(all([isinstance(d, to.Dihedral) for d in a.dihedrals])) self.assertEqual(len(a.angle_partners), 3) self.assertEqual(len(a.angles), 9) self.assertEqual(len(a.bond_partners), 4) self.assertEqual(len(a.bonds), 4) self.assertEqual(len(a.cmaps), 0) self.assertEqual(len(a.dihedral_partners), 5) self.assertEqual(len(a.dihedrals), 14) self.assertEqual(len(a.impropers), 0) self.assertEqual(len(a.name), 1) self.assertEqual(len(a.props), 3) self.assertEqual(len(a.residue), 12) self.assertEqual(len(a.segid), 3) self.assertEqual(len(a.urey_bradleys), 0) # Check attributes of the psf file self.assertEqual(len(cpsf.acceptors), 4) self.assertEqual(len(cpsf.angles), 57) self.assertEqual(len(cpsf.atoms), 33) self.assertEqual(len(cpsf.bonds), 32) self.assertEqual(len(cpsf.cmaps), 1) self.assertEqual(len(cpsf.dihedrals), 74) self.assertEqual(len(cpsf.donors), 5) self.assertEqual(len(cpsf.flags), 2) self.assertEqual(len(cpsf.groups), 9) self.assertEqual(len(cpsf.impropers), 5) self.assertEqual(len(cpsf.residues), 3) self.assertEqual(len(cpsf.title), 2) # Check the __contains__ methods of valence terms (make sure the correct # number of atoms are in each valence term) atoms = cpsf.atoms bonds = cpsf.bonds for bond in cpsf.bonds: self.assertEqual(sum([int(a in bond) for a in atoms]), 2) # Other valence terms can also contain bonds for i, angle in enumerate(cpsf.angles): self.assertEqual(sum([int(a in angle) for a in atoms]), 3) self.assertEqual(sum([int(b in angle) for b in bonds]), 2) for dih in cpsf.dihedrals: self.assertEqual(sum([int(a in dih) for a in atoms]), 4) self.assertEqual(sum([int(b in dih) for b in bonds]), 3) for imp in cpsf.impropers: self.assertEqual(sum([int(a in imp) for a in atoms]), 4) self.assertEqual(sum([int(b in imp) for b in bonds]), 3) for cmap in cpsf.cmaps: self.assertEqual(sum([int(a in cmap) for a in atoms]), 5) self.assertEqual(sum([int(b in cmap) for b in bonds]), 4)