def testJACPMESwitch(self): """ Tests the DHFR Gromacs system nrg and force (PME w/ switch) """ # Load the top and gro files top = load_file(os.path.join(get_fn('10.DHFR-PME-Switch'), 'topol.top')) gro = load_file(os.path.join(get_fn('10.DHFR-PME-Switch'), 'conf.gro')) top.box = gro.box[:] # Create the system and context, then calculate the energy decomposition system = top.createSystem(nonbondedMethod=app.PME, constraints=app.HBonds, nonbondedCutoff=0.9*u.nanometers, ewaldErrorTolerance=1.0e-5) context = mm.Context(system, mm.VerletIntegrator(0.001), mm.Platform.getPlatformByName('CPU')) context.setPositions(gro.positions) energies = energy_decomposition(top, context, nrg=u.kilojoules_per_mole) # Compare with Lee-Ping's answers. Make sure we zero-out forces for # virtual sites, since OMM doesn't do this and Gromacs does. self.assertAlmostEqual(energies['bond'], 1628.54739, places=3) self.assertAlmostEqual(energies['angle'], 3604.58751, places=3) self.assertAlmostEqual(energies['dihedral'], 6490.00844, delta=0.002) self.assertRelativeEqual(energies['nonbonded'], 23616.457584, places=3) gmxfrc = get_forces_from_xvg( os.path.join(get_fn('10.DHFR-PME-Switch'), 'force.xvg')) ommfrc = context.getState(getForces=True).getForces().value_in_unit( u.kilojoules_per_mole/u.nanometer) zero_ep_frc(ommfrc, top) max_diff = get_max_diff(gmxfrc, ommfrc) self.assertLess(max_diff, 5)
def testWriteCharmm27Top(self): """ Tests writing a Gromacs topology file with CHARMM 27 FF """ top = load_file(get_fn('1aki.charmm27.top')) GromacsTopologyFile.write(top, get_fn('1aki.charmm27.top', written=True)) top2 = load_file(get_fn('1aki.charmm27.top', written=True)) self._charmm27_checks(top)
def testJAC(self): """ Tests the JAC benchmark Gromacs system nrg and force (no PBC) """ # Load the top and gro files top = load_file(os.path.join(get_fn('07.DHFR-Liquid-NoPBC'), 'topol.top')) gro = load_file(os.path.join(get_fn('07.DHFR-Liquid-NoPBC'), 'conf.gro')) # Create the system and context, then calculate the energy decomposition system = top.createSystem() context = mm.Context(system, mm.VerletIntegrator(0.001), mm.Platform.getPlatformByName('CPU')) context.setPositions(gro.positions) energies = energy_decomposition(top, context, nrg=u.kilojoules_per_mole) # Compare with Lee-Ping's answers. Make sure we zero-out forces for # virtual sites, since OMM doesn't do this and Gromacs does. self.assertAlmostEqual(energies['bond'], 35.142565, places=3) self.assertAlmostEqual(energies['angle'], 3735.514669, places=3) self.assertAlmostEqual(energies['dihedral'], 7277.741635, delta=0.002) self.assertRelativeEqual(energies['nonbonded'], -288718.981405, places=4) gmxfrc = get_forces_from_xvg( os.path.join(get_fn('07.DHFR-Liquid-NoPBC'), 'force.xvg')) ommfrc = context.getState(getForces=True).getForces().value_in_unit( u.kilojoules_per_mole/u.nanometer) zero_ep_frc(ommfrc, top) max_diff = get_max_diff(gmxfrc, ommfrc) self.assertLess(max_diff, 0.5)
def testDuplicateSystemNames(self): """ Tests that Gromacs topologies never have duplicate moleculetypes """ parm = load_file(get_fn('phenol.prmtop')) parm = parm * 20 + load_file(get_fn('biphenyl.prmtop')) * 20 top = GromacsTopologyFile.from_structure(parm) top.write(get_fn('phenol_biphenyl.top', written=True)) top2 = GromacsTopologyFile(get_fn('phenol_biphenyl.top', written=True)) self.assertEqual(len(top.residues), 40)
def testWriteAmber99SBILDN(self): """ Tests writing a Gromacs topology with multiple molecules """ top = load_file(get_fn('1aki.ff99sbildn.top')) GromacsTopologyFile.write(top, get_fn('1aki.ff99sbildn.top', written=True), combine=None) top2 = load_file(get_fn('1aki.ff99sbildn.top', written=True)) self._check_ff99sbildn(top2) self._check_equal_structures(top, top2)
def main(): """ The main function """ global excepthook, debug # Launch the root window root = tk.Tk() root.resizable(True, True) # Replace the default excepthook with mine sys.excepthook = excepthook # See if we were provided a topology file on the command-line parser = OptionParser(usage='%prog [<prmtop>]') parser.add_option('-d', '--debug', dest='debug', default=False, action='store_true', help='Show detailed tracebacks ' + 'when an error is detected.') opt, args = parser.parse_args() debug = opt.debug # If the user provided a CL argument, that is the prmtop_name. Otherwise, # open up a file choosing dialog box to get the input from the user if len(args) == 0: prmtop_name = file_chooser('Topology') elif len(args) == 1: prmtop_name = args[0] else: sys.stderr.write('Unknown command-line options. Ignoring\n') prmtop_name = file_chooser('Topology') # If we chose no prmtop file, if not prmtop_name: raise ParmError('No prmtop chosen!') # Load the amber prmtop and check for errors amber_prmtop = ParmList() parm = load_file(prmtop_name) amber_prmtop.add_parm(parm) # Make this overwritable -- the all of the file save boxes will ask the user # for verification before saving over an existing file. There's no need for # the AmberParm security layer. Action.overwrite = True fname = split(prmtop_name)[1] root.title('xParmED: Editing/viewing [%s] Choose an operation' % fname) # Now build the action list on root app = ParmedApp(root, amber_prmtop) app.pack(fill=tk.BOTH, expand=1) root.mainloop() print('Thank you for using xParmEd!\n%s' % Logo())
def testTiny(self): """ Test tiny Gromacs system nrg and frc (no PBC) """ # Load the top and gro files top = load_file(os.path.join(get_fn('01.1water'), 'topol.top')) gro = load_file(os.path.join(get_fn('01.1water'), 'conf.gro')) # create the system and context, then calculate the energy decomposition system = top.createSystem(constraints=app.HBonds, rigidWater=True) context = mm.Context(system, mm.VerletIntegrator(0.001), mm.Platform.getPlatformByName('CPU')) context.setPositions(gro.positions) energies = energy_decomposition(top, context, nrg=u.kilojoules_per_mole) # Make sure they match Lee-Ping's answers (both energies and forces) self.assertAlmostEqual(energies['bond'], 1.63805, places=4) self.assertAlmostEqual(energies['angle'], 0.014803, places=4) gmxfrc = get_forces_from_xvg(os.path.join(get_fn('01.1water'), 'force.xvg')) ommfrc = context.getState(getForces=True).getForces().value_in_unit( u.kilojoules_per_mole/u.nanometer) max_diff = get_max_diff(gmxfrc, ommfrc) self.assertLess(max_diff, 0.01)
def randomize_mol2_residue_names(mol2_filenames): """Find unique residue names for a list of MOL2 files. Then re-write the MOL2 files using ParmEd with the unique identifiers. """ import chemistry names = get_unique_names(len(mol2_filenames)) for k, filename in enumerate(mol2_filenames): struct = chemistry.load_file(filename) struct.name = names[k] mol2file = chemistry.formats.Mol2File mol2file.write(struct, filename)
def main(): """ The main function """ global excepthook, debug # Launch the root window root = tk.Tk() root.resizable(True, True) # Replace the default excepthook with mine sys.excepthook = excepthook # See if we were provided a topology file on the command-line parser = OptionParser(usage = '%prog [<prmtop>]') parser.add_option('-d', '--debug', dest='debug', default=False, action='store_true', help='Show detailed tracebacks ' + 'when an error is detected.') opt, args = parser.parse_args() debug = opt.debug # If the user provided a CL argument, that is the prmtop_name. Otherwise, # open up a file choosing dialog box to get the input from the user if len(args) == 0: prmtop_name = file_chooser('Topology') elif len(args) == 1: prmtop_name = args[0] else: sys.stderr.write('Unknown command-line options. Ignoring\n') prmtop_name = file_chooser('Topology') # If we chose no prmtop file, if not prmtop_name: raise ParmError('No prmtop chosen!') # Load the amber prmtop and check for errors amber_prmtop = ParmList() parm = load_file(prmtop_name) amber_prmtop.add_parm(parm) # Make this overwritable -- the all of the file save boxes will ask the user # for verification before saving over an existing file. There's no need for # the AmberParm security layer. Action.overwrite = True fname = split(prmtop_name)[1] root.title('xParmED: Editing/viewing [%s] Choose an operation' % fname) # Now build the action list on root app = ParmedApp(root, amber_prmtop) app.pack(fill=tk.BOTH, expand=1) root.mainloop() print('Thank you for using xParmEd!\n%s' % Logo())
def testVerySmall(self): """ Test very small Gromacs system nrg and frc (no PBC) """ # Load the top and gro files top = load_file(os.path.join(get_fn('02.6water'), 'topol.top')) gro = load_file(os.path.join(get_fn('02.6water'), 'conf.gro')) # create the system and context, then calculate the energy decomposition system = top.createSystem(constraints=app.HBonds, rigidWater=True, flexibleConstraints=True) context = mm.Context(system, mm.VerletIntegrator(0.001), mm.Platform.getPlatformByName('CPU')) context.setPositions(gro.positions) energies = energy_decomposition(top, context, nrg=u.kilojoules_per_mole) # Compare with Lee-Ping's answers. Make sure we zero-out forces for # virtual sites, since OMM doesn't do this and Gromacs does. self.assertAlmostEqual(energies['bond'], 0, places=4) self.assertAlmostEqual(energies['nonbonded'], -108.277803, places=3) gmxfrc = get_forces_from_xvg(os.path.join(get_fn('02.6water'), 'force.xvg')) ommfrc = context.getState(getForces=True).getForces().value_in_unit( u.kilojoules_per_mole/u.nanometer) zero_ep_frc(ommfrc, top) max_diff = get_max_diff(gmxfrc, ommfrc) self.assertLess(max_diff, 0.05)
def testSmallDoublePeptide(self): """ Test interacting peptides Gromacs system nrg and frc (no PBC) """ # Load the top and gro files top = load_file(os.path.join(get_fn('03.AlaGlu'), 'topol.top')) gro = load_file(os.path.join(get_fn('03.AlaGlu'), 'conf.gro')) # create the system and context, then calculate the energy decomposition system = top.createSystem() context = mm.Context(system, mm.VerletIntegrator(0.001), mm.Platform.getPlatformByName('CPU')) context.setPositions(gro.positions) energies = energy_decomposition(top, context, nrg=u.kilojoules_per_mole) # Compare with Lee-Ping's answers. Make sure we zero-out forces for # virtual sites, since OMM doesn't do this and Gromacs does. self.assertAlmostEqual(energies['bond'], 1.5307999, places=4) self.assertAlmostEqual(energies['angle'], 6.5804488, places=4) self.assertAlmostEqual(energies['dihedral'], 80.379714, places=4) self.assertAlmostEqual(energies['nonbonded'], -275.142487, places=3) gmxfrc = get_forces_from_xvg(os.path.join(get_fn('03.AlaGlu'), 'force.xvg')) ommfrc = context.getState(getForces=True).getForces().value_in_unit( u.kilojoules_per_mole/u.nanometer) zero_ep_frc(ommfrc, top) max_diff = get_max_diff(gmxfrc, ommfrc) self.assertLess(max_diff, 0.05)
def testDistanceBasedMaskPDB(self): """ Test distance-based mask selections on a PDB file """ parm = load_file(get_fn('4lzt.pdb')) # All atoms within 5 A of residue 8 mask1 = mask.AmberMask(parm, ':8<@5') sel = mask1.Selection() self.assertGreater(sum(sel), 0) for i, atom in enumerate(parm.atoms): for j, a2 in enumerate(parm.residues[7]): dx = atom.xx - a2.xx dy = atom.xy - a2.xy dz = atom.xz - a2.xz if dx*dx + dy*dy + dz*dz < 25: self.assertTrue(sel[i]) break else: self.assertFalse(sel[i])
def testAmoebaParmPandas(self): """ Tests creating a pandas DataFrame from an AmoebaParm """ parm = load_file(get_fn('nma.parm7')) df = parm.to_dataframe() self.assertEqual(df.shape[0], parm.ptr('natom')) multipoles = [ 'multipole_111', 'multipole_211', 'multipole_212', 'multipole_222', 'multipole_411', 'multipole_412', 'multipole_422', 'multipole_413', 'multipole_423', 'multipole_433' ] for i, r1 in df.iterrows(): self.assertEqual(r1.charge, parm.atoms[i].charge) self.assertEqual(r1['name'], parm.atoms[i].name) self.assertEqual(r1.radii, parm.atoms[i].radii) self.assertEqual(r1.screen, parm.atoms[i].screen) self.assertEqual(r1.type, parm.atoms[i].type) self.assertEqual(r1.occupancy, parm.atoms[i].occupancy) self.assertEqual(r1.bfactor, parm.atoms[i].bfactor) self.assertEqual(r1.altloc, parm.atoms[i].altloc) self.assertEqual(r1.rmin, parm.atoms[i].rmin) self.assertEqual(r1.epsilon, parm.atoms[i].epsilon) self.assertEqual(r1.rmin_14, parm.atoms[i].rmin_14) self.assertEqual(r1.epsilon_14, parm.atoms[i].epsilon_14) self.assertEqual(r1.resname, parm.atoms[i].residue.name) self.assertEqual(r1.resid, parm.atoms[i].residue.idx) self.assertEqual(r1.resnum, parm.atoms[i].residue.number) self.assertEqual(r1.chain, parm.atoms[i].residue.chain) self.assertEqual(r1.join, parm.atoms[i].join) self.assertEqual(r1.nb_idx, parm.atoms[i].nb_idx) self.assertEqual(r1.type_idx, parm.atoms[i].type_idx) self.assertEqual(r1.class_idx, parm.atoms[i].class_idx) self.assertTrue( np.all(r1[multipoles] == np.array(parm.atoms[i].multipoles))) self.assertEqual(r1.polarizability, parm.atoms[i].polarizability) self.assertEqual(r1.vdw_parent, parm.atoms[i].vdw_parent.idx) self.assertNotIn('xx', df) self.assertNotIn('xy', df) self.assertNotIn('xz', df) self.assertNotIn('vx', df) self.assertNotIn('vy', df) self.assertNotIn('vz', df) self.assertNotIn('segid', df)
def testAmoebaParmPandas(self): """ Tests creating a pandas DataFrame from an AmoebaParm """ parm = load_file(get_fn('nma.parm7')) df = parm.to_dataframe() self.assertEqual(df.shape[0], parm.ptr('natom')) multipoles = ['multipole_111', 'multipole_211', 'multipole_212', 'multipole_222', 'multipole_411', 'multipole_412', 'multipole_422', 'multipole_413', 'multipole_423', 'multipole_433'] for i, r1 in df.iterrows(): self.assertEqual(r1.charge, parm.atoms[i].charge) self.assertEqual(r1['name'], parm.atoms[i].name) self.assertEqual(r1.radii, parm.atoms[i].radii) self.assertEqual(r1.screen, parm.atoms[i].screen) self.assertEqual(r1.type, parm.atoms[i].type) self.assertEqual(r1.occupancy, parm.atoms[i].occupancy) self.assertEqual(r1.bfactor, parm.atoms[i].bfactor) self.assertEqual(r1.altloc, parm.atoms[i].altloc) self.assertEqual(r1.rmin, parm.atoms[i].rmin) self.assertEqual(r1.epsilon, parm.atoms[i].epsilon) self.assertEqual(r1.rmin_14, parm.atoms[i].rmin_14) self.assertEqual(r1.epsilon_14, parm.atoms[i].epsilon_14) self.assertEqual(r1.resname, parm.atoms[i].residue.name) self.assertEqual(r1.resid, parm.atoms[i].residue.idx) self.assertEqual(r1.resnum, parm.atoms[i].residue.number) self.assertEqual(r1.chain, parm.atoms[i].residue.chain) self.assertEqual(r1.join, parm.atoms[i].join) self.assertEqual(r1.nb_idx, parm.atoms[i].nb_idx) self.assertEqual(r1.type_idx, parm.atoms[i].type_idx) self.assertEqual(r1.class_idx, parm.atoms[i].class_idx) self.assertTrue(np.all(r1[multipoles] == np.array(parm.atoms[i].multipoles))) self.assertEqual(r1.polarizability, parm.atoms[i].polarizability) self.assertEqual(r1.vdw_parent, parm.atoms[i].vdw_parent.idx) self.assertNotIn('xx', df) self.assertNotIn('xy', df) self.assertNotIn('xz', df) self.assertNotIn('vx', df) self.assertNotIn('vy', df) self.assertNotIn('vz', df) self.assertNotIn('segid', df)
def testWriteGroFile(self): """ Tests writing GRO file """ gro = GromacsGroFile.parse(get_fn('1aki.ff99sbildn.gro')) GromacsGroFile.write(gro, get_fn('1aki.ff99sbildn.gro', written=True)) gro = load_file(get_fn('1aki.ff99sbildn.gro', written=True)) self.assertIsInstance(gro, Structure) self.assertEqual(len(gro.atoms), 1960) self.assertEqual(len(gro.residues), 129) self.assertAlmostEqual(gro.atoms[0].xx, 44.6) self.assertAlmostEqual(gro.atoms[0].xy, 49.86) self.assertAlmostEqual(gro.atoms[0].xz, 18.10) self.assertAlmostEqual(gro.atoms[1959].xx, 50.97) self.assertAlmostEqual(gro.atoms[1959].xy, 39.80) self.assertAlmostEqual(gro.atoms[1959].xz, 38.64) self.assertAlmostEqual(gro.box[0], 74.1008) self.assertAlmostEqual(gro.box[1], 74.10080712) self.assertAlmostEqual(gro.box[2], 74.10074585) self.assertAlmostEqual(gro.box[3], 70.52882666) self.assertAlmostEqual(gro.box[4], 109.47126278) self.assertAlmostEqual(gro.box[5], 70.52875398)
def add_parm(self, parm): """ Add a parm to the list """ # Make sure this parm is not part of the list already if isinstance(parm, string_types): if parm in self._parm_names: raise DuplicateParm('%s already in ParmList' % parm) try: parm = load_file(parm) except FormatNotFound: raise ParmError('Could not determine file type of %s' % parm) if not isinstance(parm, Structure): raise ParmError('Added parm must be Structure or a subclass') elif not isinstance(parm, Structure): raise ParmError('Added parm must be Structure or a subclass') if str(parm) in self._parm_names: raise DuplicateParm('%s already in ParmList' % parm) # Otherwise, add in the new parm's name self._parm_names.append(str(parm)) self._parm_instances.append(parm) # A newly added topology file is the currently active parm self.current_index = len(self._parm_instances) - 1 self.parm = parm
def testAmberParmPandas(self): """ Tests creating a pandas DataFrame from an AmberParm """ parm = load_file(get_fn('tip4p.parm7')) parm.load_rst7(get_fn('tip4p.rst7')) df = parm.to_dataframe() self.assertEqual(df.shape[0], len(parm.atoms)) for i, r1 in df.iterrows(): self.assertEqual(r1.charge, parm.atoms[i].charge) self.assertEqual(r1['name'], parm.atoms[i].name) self.assertEqual(r1.radii, parm.atoms[i].radii) self.assertEqual(r1.screen, parm.atoms[i].screen) self.assertEqual(r1.type, parm.atoms[i].type) self.assertEqual(r1.occupancy, parm.atoms[i].occupancy) self.assertEqual(r1.bfactor, parm.atoms[i].bfactor) self.assertEqual(r1.altloc, parm.atoms[i].altloc) self.assertEqual(r1.rmin, parm.atoms[i].rmin) self.assertEqual(r1.epsilon, parm.atoms[i].epsilon) self.assertEqual(r1.rmin_14, parm.atoms[i].rmin_14) self.assertEqual(r1.epsilon_14, parm.atoms[i].epsilon_14) self.assertEqual(r1.resname, parm.atoms[i].residue.name) self.assertEqual(r1.resid, parm.atoms[i].residue.idx) self.assertEqual(r1.resnum, parm.atoms[i].residue.number) self.assertEqual(r1.chain, parm.atoms[i].residue.chain) self.assertEqual(r1.join, parm.atoms[i].join) self.assertEqual(r1.nb_idx, parm.atoms[i].nb_idx) self.assertEqual(r1.xx, parm.atoms[i].xx) self.assertEqual(r1.xy, parm.atoms[i].xy) self.assertEqual(r1.xz, parm.atoms[i].xz) self.assertEqual(r1.vx, parm.atoms[i].vx) self.assertEqual(r1.vy, parm.atoms[i].vy) self.assertEqual(r1.vz, parm.atoms[i].vz) self.assertNotIn('type_idx', df) self.assertNotIn('class_idx', df) for key in df.keys(): self.assertFalse(key.startswith('multipole')) self.assertNotIn('polarizability', df) self.assertNotIn('vdw_parent', df) self.assertNotIn('segid', df)
def add_parm(self, parm): """ Add a parm to the list """ # Make sure this parm is not part of the list already if isinstance(parm, basestring): if parm in self._parm_names: raise DuplicateParm('%s already in ParmList' % parm) try: parm = load_file(parm) except FormatNotFound: raise ParmError('Could not determine file type of %s' % parm) if not isinstance(parm, Structure): raise ParmError('Added parm must be Structure or a subclass') elif not isinstance(parm, Structure): raise ParmError('Added parm must be Structure or a subclass') if str(parm) in self._parm_names: raise DuplicateParm('%s already in ParmList' % parm) # Otherwise, add in the new parm's name self._parm_names.append(str(parm)) self._parm_instances.append(parm) # A newly added topology file is the currently active parm self.current_index = len(self._parm_instances) - 1 self.parm = parm
def testCharmmPSFPandas(self): """ Tests creating a pandas DataFrame from a CharmmPsfFile """ parm = load_file(get_fn('ala_ala_ala.psf')) df = parm.to_dataframe() self.assertEqual(df.shape[0], len(parm.atoms)) for i, r1 in df.iterrows(): self.assertEqual(r1.charge, parm.atoms[i].charge) self.assertEqual(r1['name'], parm.atoms[i].name) self.assertEqual(r1.radii, parm.atoms[i].radii) self.assertEqual(r1.screen, parm.atoms[i].screen) self.assertEqual(r1.type, parm.atoms[i].type) self.assertEqual(r1.occupancy, parm.atoms[i].occupancy) self.assertEqual(r1.bfactor, parm.atoms[i].bfactor) self.assertEqual(r1.altloc, parm.atoms[i].altloc) self.assertEqual(r1.rmin, parm.atoms[i].rmin) self.assertEqual(r1.epsilon, parm.atoms[i].epsilon) self.assertEqual(r1.rmin_14, parm.atoms[i].rmin_14) self.assertEqual(r1.epsilon_14, parm.atoms[i].epsilon_14) self.assertEqual(r1.resname, parm.atoms[i].residue.name) self.assertEqual(r1.resid, parm.atoms[i].residue.idx) self.assertEqual(r1.resnum, parm.atoms[i].residue.number) self.assertEqual(r1.chain, parm.atoms[i].residue.chain) self.assertEqual(r1.join, parm.atoms[i].join) self.assertEqual(r1.nb_idx, parm.atoms[i].nb_idx) self.assertEqual(r1.segid, parm.atoms[i].segid) self.assertNotIn('xx', df) self.assertNotIn('xy', df) self.assertNotIn('xz', df) self.assertNotIn('vx', df) self.assertNotIn('vy', df) self.assertNotIn('vz', df) self.assertNotIn('type_idx', df) self.assertNotIn('class_idx', df) for key in df.keys(): self.assertFalse(key.startswith('multipole')) self.assertNotIn('polarizability', df) self.assertNotIn('vdw_parent', df)
def testPDBPandas(self): """ Test 4lzt.pdb conversion to DataFrame (w/ anisou and positions) """ pdb = load_file(get_fn('4lzt.pdb')) df = pdb.to_dataframe() self.assertIn('U11', df) self.assertIn('U22', df) self.assertIn('U33', df) self.assertIn('U12', df) self.assertIn('U13', df) self.assertIn('U23', df) # Make sure that when one of the anisotropic B-factors is not set, the # NaN gets properly put in its place pdb.atoms[0].anisou = None df2 = pdb.to_dataframe() self.assertIn('U11', df) self.assertIn('U22', df) self.assertIn('U33', df) self.assertIn('U12', df) self.assertIn('U13', df) self.assertIn('U23', df) # Now make sure they are all equal except for the first atom, and that # the data matches the PDB information anisou = ['U11', 'U22', 'U33', 'U12', 'U13', 'U23'] for (i, r1), (j, r2) in zip(df.iterrows(), df2.iterrows()): if i == 0: # Easy NaN check self.assertNotEqual(r2.U11, r2.U11) self.assertNotEqual(r2.U22, r2.U22) self.assertNotEqual(r2.U33, r2.U33) self.assertNotEqual(r2.U12, r2.U12) self.assertNotEqual(r2.U13, r2.U13) self.assertNotEqual(r2.U23, r2.U23) # Check against df1 self.assertNotEqual(r1.U11, r2.U11) self.assertNotEqual(r1.U22, r2.U22) self.assertNotEqual(r1.U33, r2.U33) self.assertNotEqual(r1.U12, r2.U12) self.assertNotEqual(r1.U13, r2.U13) self.assertNotEqual(r1.U23, r2.U23) else: self.assertEqual(r1.U11, r2.U11) self.assertEqual(r1.U22, r2.U22) self.assertEqual(r1.U33, r2.U33) self.assertEqual(r1.U12, r2.U12) self.assertEqual(r1.U13, r2.U13) self.assertEqual(r1.U23, r2.U23) self.assertTrue(np.all(np.abs(r1[anisou] - pdb.atoms[i].anisou) < 1e-4)) self.assertEqual(r1.charge, 0) self.assertEqual(r1.charge, pdb.atoms[i].charge) self.assertEqual(r1['name'], pdb.atoms[i].name) self.assertEqual(r1.radii, pdb.atoms[i].radii) self.assertEqual(r1.screen, pdb.atoms[i].screen) self.assertEqual(r1.type, pdb.atoms[i].type) self.assertEqual(r1.occupancy, pdb.atoms[i].occupancy) self.assertEqual(r1.bfactor, pdb.atoms[i].bfactor) self.assertEqual(r1.altloc, pdb.atoms[i].altloc) self.assertEqual(r1.rmin, pdb.atoms[i].rmin) self.assertEqual(r1.epsilon, pdb.atoms[i].epsilon) self.assertEqual(r1.rmin_14, pdb.atoms[i].rmin_14) self.assertEqual(r1.epsilon_14, pdb.atoms[i].epsilon_14) self.assertEqual(r1.resname, pdb.atoms[i].residue.name) self.assertEqual(r1.resid, pdb.atoms[i].residue.idx) self.assertEqual(r1.resnum, pdb.atoms[i].residue.number) self.assertEqual(r1.chain, pdb.atoms[i].residue.chain) self.assertEqual(r1.join, pdb.atoms[i].join) self.assertEqual(r1.nb_idx, pdb.atoms[i].nb_idx) self.assertEqual(r1.xx, pdb.atoms[i].xx) self.assertEqual(r1.xy, pdb.atoms[i].xy) self.assertEqual(r1.xz, pdb.atoms[i].xz) self.assertNotIn('vx', df) self.assertNotIn('vy', df) self.assertNotIn('vz', df) self.assertNotIn('type_idx', df) self.assertNotIn('class_idx', df) for key in df.keys(): self.assertFalse(key.startswith('multipole')) self.assertNotIn('polarizability', df) self.assertNotIn('vdw_parent', df) self.assertNotIn('segid', df)
from __future__ import division, print_function import sys # OpenMM Imports import simtk.openmm as mm import simtk.openmm.app as app # ParmEd Imports from chemistry import load_file from chemistry.openmm.reporters import NetCDFReporter from chemistry import unit as u # Load the Gromacs files print('Loading Gromacs files...') top = load_file('dhfr_gas.top') gro = load_file('dhfr_gas.gro') # Create the OpenMM system print('Creating OpenMM System') system = top.createSystem(nonbondedMethod=app.NoCutoff, constraints=app.HBonds, implicitSolvent=app.GBn2, implicitSolventSaltConc=0.1*u.moles/u.liter, ) # Create the integrator to do Langevin dynamics integrator = mm.LangevinIntegrator( 300*u.kelvin, # Temperature of heat bath 1.0/u.picoseconds, # Friction coefficient 2.0*u.femtoseconds, # Time step )
from __future__ import division, print_function import sys # OpenMM Imports import simtk.openmm as mm import simtk.openmm.app as app # ParmEd Imports from chemistry import load_file from chemistry.openmm.reporters import NetCDFReporter from chemistry import unit as u # Load the Gromacs files print('Loading Gromacs files...') top = load_file('dhfr_pme.top') gro = load_file('dhfr_pme.gro') # Transfer the unit cell information from the GRO file to the top object top.box = gro.box[:] # Create the OpenMM system print('Creating OpenMM System') system = top.createSystem(nonbondedMethod=app.PME, nonbondedCutoff=8.0*u.angstroms, constraints=app.HBonds, ) # Create the integrator to do Langevin dynamics integrator = mm.LangevinIntegrator( 300*u.kelvin, # Temperature of heat bath
import glob, os, chemistry import networkx import mdtraj as md filenames = glob.glob("/home/kyleb/lb_benchmark_openmoltools/tleap/*.prmtop") #filenames = glob.glob("/home/kyleb/lb_benchmark_openmoltools/tleap/57-55-6_1000_313.2*.prmtop") filenames = glob.glob( "/home/kyleb/lb_benchmark_openmoltools/tleap/121182*.prmtop") #filenames = glob.glob("/home/kyleb/lb_benchmark_openmoltools/tleap/126492-54-4_1000_315*.prmtop") for filename in filenames: base = os.path.splitext(os.path.split(filename)[-1])[0] prmtop_filename = "/home/kyleb/lb_benchmark_openmoltools/tleap/" + base + ".prmtop" inpcrd_filename = "/home/kyleb/lb_benchmark_openmoltools/tleap/" + base + ".inpcrd" print(prmtop_filename, inpcrd_filename) prmtop0 = chemistry.load_file(prmtop_filename) t0 = md.load(inpcrd_filename, top=prmtop_filename) t0 = t0.atom_slice(t0.top.select("resSeq 0")) prmtop_filename = "/home/kyleb/liquid_benchmark_3_14//tleap/" + base + ".prmtop" inpcrd_filename = "/home/kyleb/liquid_benchmark_3_14//tleap/" + base + ".inpcrd" prmtop1 = chemistry.load_file(prmtop_filename) t1 = md.load(inpcrd_filename, top=prmtop_filename) t1 = t1.atom_slice(t1.top.select("resSeq 0")) top0 = prmtop0.to_dataframe() top0 = top0[top0.resid == 0] top1 = prmtop1.to_dataframe() top1 = top1[top1.resid == 0] b0 = t0.top.to_dataframe()[1] b1 = t1.top.to_dataframe()[1] g0 = networkx.from_edgelist(b0) g1 = networkx.from_edgelist(b1)
def testPDBPandas(self): """ Test 4lzt.pdb conversion to DataFrame (w/ anisou and positions) """ pdb = load_file(get_fn('4lzt.pdb')) df = pdb.to_dataframe() self.assertIn('U11', df) self.assertIn('U22', df) self.assertIn('U33', df) self.assertIn('U12', df) self.assertIn('U13', df) self.assertIn('U23', df) # Make sure that when one of the anisotropic B-factors is not set, the # NaN gets properly put in its place pdb.atoms[0].anisou = None df2 = pdb.to_dataframe() self.assertIn('U11', df) self.assertIn('U22', df) self.assertIn('U33', df) self.assertIn('U12', df) self.assertIn('U13', df) self.assertIn('U23', df) # Now make sure they are all equal except for the first atom, and that # the data matches the PDB information anisou = ['U11', 'U22', 'U33', 'U12', 'U13', 'U23'] for (i, r1), (j, r2) in zip(df.iterrows(), df2.iterrows()): if i == 0: # Easy NaN check self.assertNotEqual(r2.U11, r2.U11) self.assertNotEqual(r2.U22, r2.U22) self.assertNotEqual(r2.U33, r2.U33) self.assertNotEqual(r2.U12, r2.U12) self.assertNotEqual(r2.U13, r2.U13) self.assertNotEqual(r2.U23, r2.U23) # Check against df1 self.assertNotEqual(r1.U11, r2.U11) self.assertNotEqual(r1.U22, r2.U22) self.assertNotEqual(r1.U33, r2.U33) self.assertNotEqual(r1.U12, r2.U12) self.assertNotEqual(r1.U13, r2.U13) self.assertNotEqual(r1.U23, r2.U23) else: self.assertEqual(r1.U11, r2.U11) self.assertEqual(r1.U22, r2.U22) self.assertEqual(r1.U33, r2.U33) self.assertEqual(r1.U12, r2.U12) self.assertEqual(r1.U13, r2.U13) self.assertEqual(r1.U23, r2.U23) self.assertTrue( np.all(np.abs(r1[anisou] - pdb.atoms[i].anisou) < 1e-4)) self.assertEqual(r1.charge, 0) self.assertEqual(r1.charge, pdb.atoms[i].charge) self.assertEqual(r1['name'], pdb.atoms[i].name) self.assertEqual(r1.radii, pdb.atoms[i].radii) self.assertEqual(r1.screen, pdb.atoms[i].screen) self.assertEqual(r1.type, pdb.atoms[i].type) self.assertEqual(r1.occupancy, pdb.atoms[i].occupancy) self.assertEqual(r1.bfactor, pdb.atoms[i].bfactor) self.assertEqual(r1.altloc, pdb.atoms[i].altloc) self.assertEqual(r1.rmin, pdb.atoms[i].rmin) self.assertEqual(r1.epsilon, pdb.atoms[i].epsilon) self.assertEqual(r1.rmin_14, pdb.atoms[i].rmin_14) self.assertEqual(r1.epsilon_14, pdb.atoms[i].epsilon_14) self.assertEqual(r1.resname, pdb.atoms[i].residue.name) self.assertEqual(r1.resid, pdb.atoms[i].residue.idx) self.assertEqual(r1.resnum, pdb.atoms[i].residue.number) self.assertEqual(r1.chain, pdb.atoms[i].residue.chain) self.assertEqual(r1.join, pdb.atoms[i].join) self.assertEqual(r1.nb_idx, pdb.atoms[i].nb_idx) self.assertEqual(r1.xx, pdb.atoms[i].xx) self.assertEqual(r1.xy, pdb.atoms[i].xy) self.assertEqual(r1.xz, pdb.atoms[i].xz) self.assertNotIn('vx', df) self.assertNotIn('vy', df) self.assertNotIn('vz', df) self.assertNotIn('type_idx', df) self.assertNotIn('class_idx', df) for key in df.keys(): self.assertFalse(key.startswith('multipole')) self.assertNotIn('polarizability', df) self.assertNotIn('vdw_parent', df) self.assertNotIn('segid', df)
""" Tests the fancy indexing and slicing capabilities of Structure """ import chemistry as chem import random import unittest import utils parm = chem.load_file(utils.get_fn('trx.prmtop')) pdb1 = chem.load_file(utils.get_fn('4lzt.pdb')) pdb2 = chem.load_file(utils.get_fn('1kip.cif')) class TestStructureSlicing(unittest.TestCase): """ Tests the fancy slicing/indexing of Structure """ def testIntIndex(self): """ Tests simple Structure indexing (integer) """ for i, atom in enumerate(parm.atoms): self.assertIs(atom, parm[i]) for i, atom in enumerate(pdb1.atoms): self.assertIs(atom, pdb1[i]) for i, atom in enumerate(pdb2.atoms): self.assertIs(atom, pdb2[i]) def testSimpleSlice(self): """ Tests simple atom slicing """ sl11 = parm[:10] sl21 = pdb1[:10] sl31 = pdb2[:10] sl12 = parm[10:20]
cas, n_molecules, temperature = filename_munger(prmtop_filename) print(cas, temperature) dcd_filename = DATA_PATH + "/production/%s_%s_%s_production.dcd" % (cas, n_molecules, temperature) csv_filename = DATA_PATH + "/production/%s_%s_%s_production.csv" % (cas, n_molecules, temperature) try: traj = md.load(dcd_filename, top=prmtop_filename) except IOError: continue if traj.unitcell_lengths is None: continue rho = pd.read_csv(csv_filename)["Density (g/mL)"].values * 1000. # g / mL -> kg /m3 initial_traj_length = len(traj) initial_density_length = len(rho) [t0, g, Neff] = pymbar.timeseries.detectEquilibration(rho) mu = rho[t0:].mean() sigma = rho[t0:].std() * Neff ** -0.5 prmtop = chemistry.load_file(prmtop_filename) charges = prmtop.to_dataframe().charge.values temperature = float(temperature) traj = traj[t0 * len(traj) / len(rho):] dielectric = md.geometry.static_dielectric(traj, charges, temperature) dielectric_sigma_fixedblock = dipole_errorbars.bootstrap_old(traj, charges, temperature, fixed_block_length)[1] block_length = dipole_errorbars.find_block_size(traj, charges, temperature) dielectric_sigma = dipole_errorbars.bootstrap(traj, charges, temperature, block_length, num_bootstrap) formula = cirpy.resolve(cas, "formula") data.append(dict(cas=cas, temperature=temperature, n_trimmed=t0, inefficiency=g, initial_traj_length=initial_traj_length, initial_density_length=initial_density_length, density=mu, density_sigma=sigma, Neff=Neff, n_frames=traj.n_frames, dielectric=dielectric, dielectric_sigma=dielectric_sigma, dielectric_sigma_fixedblock=dielectric_sigma_fixedblock, block_length=block_length, formula=formula)) print(data[-1]) data = pd.DataFrame(data) data.to_csv("./tables/predictions.csv")
""" Tests the fancy indexing and slicing capabilities of Structure """ import chemistry as chem from chemistry.utils.six.moves import range, zip import random import unittest import utils parm = chem.load_file(utils.get_fn('trx.prmtop')) pdb1 = chem.load_file(utils.get_fn('4lzt.pdb')) pdb2 = chem.load_file(utils.get_fn('1kip.cif')) class TestStructureSlicing(unittest.TestCase): """ Tests the fancy slicing/indexing of Structure """ def testIntIndex(self): """ Tests simple Structure indexing (integer) """ for i, atom in enumerate(parm.atoms): self.assertIs(atom, parm[i]) for i, atom in enumerate(pdb1.atoms): self.assertIs(atom, pdb1[i]) for i, atom in enumerate(pdb2.atoms): self.assertIs(atom, pdb2[i]) def testSimpleSlice(self): """ Tests simple atom slicing """ sl11 = parm[:10] sl21 = pdb1[:10] sl31 = pdb2[:10] sl12 = parm[10:20]
#!/usr/bin/env python import openmoltools.utils import chemistry in_prmtop = 'toluene_cyclohexane_10_500.prmtop' in_crd = 'toluene_cyclohexane_10_500.inpcrd' #Convert AMBER to GROMACS via acpype openmoltools.utils.convert_via_acpype( 'mixture', in_prmtop, in_crd, out_top = 'toluene_cyclohexane_10_500_acpype.top', out_gro = 'toluene_cyclohexane_10_500_acpype.gro' ) #Convert AMBER to GROMACS via ParmEd structure = chemistry.amber.AmberParm( in_prmtop, in_crd ) #Gromacs topology gromacs_topology = chemistry.gromacs.GromacsTopologyFile.from_structure( structure ) #Write gromacs_topology.write( 'toluene_cyclohexane_10_500_parmed.top' ) chemistry.gromacs.GromacsGroFile.write( gromacs_topology, 'toluene_cyclohexane_10_500_parmed.gro') #Create a second AMBER coordinate file so it will have the same precision as the gro file gromacs_topology2 = chemistry.load_file( 'toluene_cyclohexane_10_500_parmed.top' ) gro = chemistry.gromacs.GromacsGroFile.parse( 'toluene_cyclohexane_10_500_parmed.gro' ) gromacs_topology2.box = gro.box gromacs_topology2.positions = gro.positions amberparm = chemistry.amber.AmberParm.from_structure( gromacs_topology2 ) amberparm.write_parm( 'toluene_cyclohexane_10_500_parmed.prmtop' ) amberparm.write_rst7( 'toluene_cyclohexane_10_500_parmed.crd' )
def testReadAmber99SBILDN(self): """ Tests parsing a Gromacs topology with Amber99SBILDN and water """ top = load_file(get_fn('1aki.ff99sbildn.top')) self._check_ff99sbildn(top)
import glob, os, chemistry import networkx import mdtraj as md filenames = glob.glob("/home/kyleb/lb_benchmark_openmoltools/tleap/*.prmtop") #filenames = glob.glob("/home/kyleb/lb_benchmark_openmoltools/tleap/57-55-6_1000_313.2*.prmtop") filenames = glob.glob("/home/kyleb/lb_benchmark_openmoltools/tleap/121182*.prmtop") #filenames = glob.glob("/home/kyleb/lb_benchmark_openmoltools/tleap/126492-54-4_1000_315*.prmtop") for filename in filenames: base = os.path.splitext(os.path.split(filename)[-1])[0] prmtop_filename = "/home/kyleb/lb_benchmark_openmoltools/tleap/" + base + ".prmtop" inpcrd_filename = "/home/kyleb/lb_benchmark_openmoltools/tleap/" + base + ".inpcrd" print(prmtop_filename, inpcrd_filename) prmtop0 = chemistry.load_file(prmtop_filename) t0 = md.load(inpcrd_filename, top=prmtop_filename) t0 = t0.atom_slice(t0.top.select("resSeq 0")) prmtop_filename = "/home/kyleb/liquid_benchmark_3_14//tleap/" + base + ".prmtop" inpcrd_filename = "/home/kyleb/liquid_benchmark_3_14//tleap/" + base + ".inpcrd" prmtop1 = chemistry.load_file(prmtop_filename) t1 = md.load(inpcrd_filename, top=prmtop_filename) t1 = t1.atom_slice(t1.top.select("resSeq 0")) top0 = prmtop0.to_dataframe() top0 = top0[top0.resid == 0] top1 = prmtop1.to_dataframe() top1 = top1[top1.resid == 0] b0 = t0.top.to_dataframe()[1] b1 = t1.top.to_dataframe()[1] g0 = networkx.from_edgelist(b0) g1 = networkx.from_edgelist(b1) for i in range(len(g0.nodes())):
for k0, k1, components, smiles, cas, temperature, pressure, density, perm in data.itertuples( ): print(k0, k1, components, smiles, cas, temperature, pressure, density) mol2_filename = "./tmpmol2/%s.mol2" % cas frcmod_filename = "./tmpmol2/%s.frcmod" % cas openmoltools.openeye.smiles_to_antechamber(smiles, mol2_filename, frcmod_filename) PATH0 = "/home/kyleb/liquid_benchmark_4_8/" PATH1 = "/home/kyleb/liquid_benchmark_3_14/" PATH2 = "./tmpmol2/" for k0, k1, components, smiles, cas, temperature, pressure, density, perm in data.itertuples( ): print(k0, k1, components, smiles, cas, temperature, pressure, density) mol2_filename = PATH0 + "/monomers/%s.mol2" % cas prmtop0 = chemistry.load_file(mol2_filename) charges0 = np.array([a.charge for a in prmtop0.atoms]) mol2_filename = PATH1 + "/monomers/%s.mol2" % cas prmtop1 = chemistry.load_file(mol2_filename) charges1 = np.array([a.charge for a in prmtop1.atoms]) mol2_filename = PATH2 + "/%s.mol2" % cas prmtop2 = chemistry.load_file(mol2_filename) charges2 = np.array([a.charge for a in prmtop2.atoms]) print(cas) print(np.std((charges0.min(), charges1.min(), charges2.min()))) print(charges0.min(), charges1.min(), charges2.min())