Ejemplo n.º 1
0
def test_gmx_tip4p():
    mol = Topology.open(cwd + '/../topology/files/TIP3P.zmat').molecules[0]
    ff = ForceField.open(cwd + '/../forcefield/files/TIP4P.zfp')
    mol.generate_virtual_sites(ff)
    mol.assign_charge_from_ff(ff)

    top = Topology([mol], numbers=[100], cell=UnitCell([3, 3, 3]))
    top.set_positions(Topology.open(cwd + '/files/100-TIP4P.pdb').positions)

    system = System(top, ff)
    tmpgro = os.path.join(tmpdir, 'conf-vsite.gro')
    tmptop = os.path.join(tmpdir, 'topol-vsite.top')
    tmpmdp = os.path.join(tmpdir, 'grompp-vsite.mdp')
    system.export_gromacs(gro_out=tmpgro, top_out=tmptop, mdp_out=tmpmdp)
    assert filecmp.cmp(tmpgro, cwd + '/files/baselines/conf-vsite.gro')
    assert filecmp.cmp(tmptop, cwd + '/files/baselines/topol-vsite.top')
    assert filecmp.cmp(tmpmdp, cwd + '/files/baselines/grompp-vsite.mdp')
Ejemplo n.º 2
0
def test_tip4p():
    mol = Topology.open(cwd + '/../topology/files/TIP3P.zmat').molecules[0]
    ff = ForceField.open(cwd + '/../forcefield/files/TIP4P.zfp')
    mol.generate_virtual_sites(ff)
    mol.assign_charge_from_ff(ff)

    top = Topology([mol], numbers=[100], cell=UnitCell([3, 3, 3]))
    top.set_positions(Topology.open(cwd + '/files/100-TIP4P.pdb').positions)

    system = System(top, ff)

    context = mm.Context(system.to_omm_system(), *get_omm_integrator_platform())
    context.setPositions(top.positions)

    print_energy_terms(context)

    pe = context.getState(getEnergy=True).getPotentialEnergy().value_in_unit(kJ_mol)
    assert pytest.approx(pe, rel=0.001) == 383.796  # results of GROMACS
Ejemplo n.º 3
0
if args.packmol:
    top.update_molecules(list(mol_count.keys()))
    top.scale_with_packmol(list(mol_count.values()))
    sys.exit(0)

logger.info('Exporting ...')

top.update_molecules(list(mol_count.keys()), list(mol_count.values()))

if args.trj is None:
    logger.warning('Trajectory file not provided. '
                   'Will use positions and cell from the topology')
else:
    _positions_set = False
    if len(frame.positions) == top.n_atom:
        top.set_positions(frame.positions)
        _positions_set = True
    elif ff.is_polarizable or ff.has_virtual_site:
        atoms_real = [atom for atom in top.atoms if not atom.is_drude and atom.virtual_site is None]
        if len(frame.positions) == len(atoms_real):
            for i, atom in enumerate(atoms_real):
                atom.position = frame.positions[i][:]
            np.random.seed(1)
            for parent, drude in top.get_drude_pairs():
                drude.position = parent.position + (np.random.random(3) - 0.5) / 100
            for parent, vsite in top.get_virtual_site_pairs():
                vsite.position = vsite.virtual_site.calc_position()
            _positions_set = True

    if not _positions_set:
        logger.error(