def test_ff_from_etree_iterable(self):
     ff_etrees = [
         lxml.etree.parse(get_path('opls_charmm_buck.xml')),
         lxml.etree.parse(get_path('trimmed_charmm.xml'))
     ]
     ff = ForceField(ff_etrees)
     assert ff
Exemple #2
0
    def test_spce_xml(self):
        spce = ForceField(get_path('spce.xml'))

        assert len(spce.atom_types) == 2
        assert len(spce.bond_types) == 1
        assert len(spce.angle_types) == 1
        assert len(spce.dihedral_types) == 0

        # Store expected expressions in list
        ref_exprs = [sympy.sympify(expr) for expr in [
            "4*epsilon*((sigma/r)**12 - (sigma/r)**6)",
            "0.5 * k * (r-r_eq)**2",
            "0.5 * k * (theta-theta_eq)**2",
            ]
        ]

        assert allclose(spce.atom_types['opls_116'].charge, -0.8476 * u.elementary_charge)
        assert allclose(spce.atom_types['opls_117'].charge, 0.4238 * u.elementary_charge)

        assert sympy.simplify(spce.atom_types['opls_116'].expression - ref_exprs[0]) == 0
        assert sympy.simplify(spce.atom_types['opls_117'].expression - ref_exprs[0]) == 0
        assert sympy.simplify(spce.bond_types['opls_116~opls_117'].expression - ref_exprs[1]) == 0
        assert sympy.simplify(spce.angle_types['opls_117~opls_116~opls_117'].expression - ref_exprs[2]) == 0

        assert allclose(spce.atom_types['opls_116'].parameters['sigma'], 0.316557 * u.nm)
        assert allclose(spce.atom_types['opls_116'].parameters['epsilon'], 0.650194 * u.Unit('kJ/mol'))
        assert allclose(spce.atom_types['opls_117'].parameters['sigma'], 0.1 * u.nm)
        assert allclose(spce.atom_types['opls_117'].parameters['epsilon'], 0.0 * u.Unit('kJ/mol'))

        assert allclose(spce.bond_types['opls_116~opls_117'].parameters['r_eq'], 0.1 * u.nm)
        assert allclose(spce.bond_types['opls_116~opls_117'].parameters['k'], 345000.0 * u.Unit('kJ/(mol*nm**2)'))

        assert allclose(spce.angle_types['opls_117~opls_116~opls_117'].parameters['theta_eq'], 109.47 * u.degree)
        assert allclose(spce.angle_types['opls_117~opls_116~opls_117'].parameters['k'], 383.0 * u.Unit('kJ/mol/rad**2'))
Exemple #3
0
 def test_ff_periodic_dihedrals_from_alphanumeric_symbols(self):
     ff = ForceField(get_path("opls_charmm_buck.xml"))
     assert "A" in ff.atom_types["buck_O"].parameters
     with pytest.raises(TypeError):
         assert len(
             ff.dihedral_types["opls_140~*~*~opls_140"].parameters["c0"])
     assert len(ff.dihedral_types["NH2~CT1~C~O"].parameters["delta"]) == 1
Exemple #4
0
    def test_tip3p_force_field(self):
        water = ForceField(get_path('tip3p.xml'))
        assert len(water.atom_types) == 2
        assert len(water.bond_types) == 1
        assert len(water.angle_types) == 1
        assert len(water.dihedral_types) == 0

        # Store expected expressions in list
        ref_exprs = [sympy.sympify(expr) for expr in [
            "4*epsilon*((sigma/r)**12 - (sigma/r)**6)",
            "0.5 * k * (r-r_eq)**2",
            "0.5 * k * (theta-theta_eq)**2",
            ]
        ]

        assert water.atom_types['opls_111'].charge.value == -0.834
        assert water.atom_types['opls_112'].charge.value == 0.417

        assert sympy.simplify(water.atom_types['opls_111'].expression - ref_exprs[0]) == 0
        assert sympy.simplify(water.atom_types['opls_112'].expression - ref_exprs[0]) == 0
        assert sympy.simplify(water.bond_types['opls_111~opls_112'].expression - ref_exprs[1]) == 0
        assert sympy.simplify(water.angle_types['opls_112~opls_111~opls_112'].expression - ref_exprs[2]) == 0

        assert allclose(water.atom_types['opls_111'].parameters['sigma'], 0.315061 * u.nm)
        assert allclose(water.atom_types['opls_111'].parameters['epsilon'], 0.636386 * u.Unit('kJ/mol'))
        assert allclose(water.atom_types['opls_112'].parameters['sigma'], 1.0 * u.nm)
        assert allclose(water.atom_types['opls_112'].parameters['epsilon'], 0.0 * u.Unit('kJ/mol'))

        assert allclose(water.bond_types['opls_111~opls_112'].parameters['r_eq'], 0.09572 * u.nm)
        assert allclose(water.bond_types['opls_111~opls_112'].parameters['k'], 502416.0 * u.Unit('kJ/(mol*nm**2)'))

        assert allclose(water.angle_types['opls_112~opls_111~opls_112'].parameters['theta_eq'], 1.824218134 * u.radian)
        assert allclose(water.angle_types['opls_112~opls_111~opls_112'].parameters['k'], 682.02 * u.Unit('kJ/(mol*rad**2)'))
 def test_ff_periodic_dihedrals_from_alphanumeric_symbols(self):
     ff = ForceField(get_path('opls_charmm_buck.xml'))
     assert 'A' in ff.atom_types['buck_O'].parameters
     with pytest.raises(TypeError):
         assert len(
             ff.dihedral_types['opls_140~*~*~opls_140'].parameters['c0'])
     assert len(ff.dihedral_types['NH2~CT1~C~O'].parameters['delta']) == 1
Exemple #6
0
    def test_water_top(self, water_system):
        top = water_system

        ff = gmso.ForceField(get_path('tip3p.xml'))

        for site in top.sites:
            site.atom_type = ff.atom_types[site.name]

        top.update_sites()
        top.update_atom_types()

        for bond in top.bonds:
            bond.bond_type = bond.connection_type = ff.bond_types[
                'opls_111~opls_112']

        top.update_bonds()
        top.update_bond_types()

        for subtop in top.subtops:
            angle = gmso.core.angle.Angle(
                connection_members=[site for site in subtop.sites],
                name="opls_112~opls_111~opls_112",
                connection_type=ff.angle_types["opls_112~opls_111~opls_112"])
            top.add_connection(angle)

        top.update_angles()
        top.update_angle_types()

        write_top(top, 'water.top')
Exemple #7
0
    def test_read_epsilon(self, filename=get_path('data.lammps')):
        read = read_lammpsdata(filename)
        lj = [i.parameters for i in read.atom_types][0]

        assert_allclose_units(lj['epsilon'],
                              u.unyt_array(0.0717, (u.kcal / u.mol)),
                              rtol=1e-5,
                              atol=1e-8)
Exemple #8
0
    def test_read_sigma(self, filename=get_path('data.lammps')):
        read = read_lammpsdata(filename)
        lj = [i.parameters for i in read.atom_types][0]

        assert_allclose_units(lj['sigma'],
                              u.unyt_array(3, u.angstrom),
                              rtol=1e-5,
                              atol=1e-8)
Exemple #9
0
    def test_read_charge(self, filename=get_path('data.lammps')):
        read = read_lammpsdata(filename)
        charge = [i.charge for i in read.atom_types]

        assert_allclose_units(charge,
                              u.unyt_array(0, u.C),
                              rtol=1e-5,
                              atol=1e-8)
Exemple #10
0
    def test_read_mass(self, filename=get_path('data.lammps')):
        read = read_lammpsdata(filename)
        masses = [i.mass for i in read.atom_types]

        assert_allclose_units(masses,
                              u.unyt_array(1.0079, u.g),
                              rtol=1e-5,
                              atol=1e-8)
Exemple #11
0
    def water_system(self):
        water = mb.load(get_path('tip3p.mol2'))
        water.name = 'water'
        water[0].name = 'opls_111'
        water[1].name = water[2].name = 'opls_112'

        packed_system = mb.fill_box(compound=water,
                                    n_compounds=2,
                                    box=mb.Box([2, 2, 2]))

        return from_mbuild(packed_system)
    def test_noble_mie_xml(self):
        ff = ForceField(get_path('noble_mie.xml'))
        templates = PotentialTemplateLibrary()
        ref_expr = templates['MiePotential'].expression

        assert len(ff.atom_types) == 4
        assert len(ff.bond_types) == 0
        assert len(ff.angle_types) == 0
        assert len(ff.dihedral_types) == 0

        for (name, atom_type) in ff.atom_types.items():
            assert sympy.simplify(atom_type.expression - ref_expr) == 0

        assert allclose(ff.atom_types['Ne'].parameters['epsilon'],
                        0.26855713 * u.Unit('kJ/mol'))
        assert allclose(ff.atom_types['Ne'].parameters['sigma'],
                        2.794 * u.Angstrom)
        assert allclose(ff.atom_types['Ne'].parameters['n'],
                        11 * u.dimensionless)
        assert allclose(ff.atom_types['Ne'].parameters['m'],
                        6 * u.dimensionless)
        assert ff.atom_types['Ne'].charge.value == 0

        assert allclose(ff.atom_types['Ar'].parameters['epsilon'],
                        1.01519583 * u.Unit('kJ/mol'))
        assert allclose(ff.atom_types['Ar'].parameters['sigma'],
                        3.405 * u.Angstrom)
        assert allclose(ff.atom_types['Ar'].parameters['n'],
                        13 * u.dimensionless)
        assert allclose(ff.atom_types['Ar'].parameters['m'],
                        6 * u.dimensionless)
        assert ff.atom_types['Ar'].charge.value == 0

        assert allclose(ff.atom_types['Kr'].parameters['epsilon'],
                        1.46417678 * u.Unit('kJ/mol'))
        assert allclose(ff.atom_types['Kr'].parameters['sigma'],
                        3.645 * u.Angstrom)
        assert allclose(ff.atom_types['Kr'].parameters['n'],
                        14 * u.dimensionless)
        assert allclose(ff.atom_types['Kr'].parameters['m'],
                        6 * u.dimensionless)
        assert ff.atom_types['Kr'].charge.value == 0

        assert allclose(ff.atom_types['Xe'].parameters['epsilon'],
                        2.02706587 * u.Unit('kJ/mol'))
        assert allclose(ff.atom_types['Xe'].parameters['sigma'],
                        3.964 * u.Angstrom)
        assert allclose(ff.atom_types['Xe'].parameters['n'],
                        14 * u.dimensionless)
        assert allclose(ff.atom_types['Xe'].parameters['m'],
                        6 * u.dimensionless)
        assert ff.atom_types['Xe'].charge.value == 0
    def test_carbon_force_field(self):
        carbon = ForceField(get_path('carbon.xml'))

        assert len(carbon.atom_types) == 1
        assert len(carbon.bond_types) == 1
        assert len(carbon.angle_types) == 1
        assert len(carbon.dihedral_types) == 1

        # Store expected expressions in list
        ref_exprs = [
            sympy.sympify(expr) for expr in [
                "4*epsilon*((sigma/r)**12 - (sigma/r)**6)",
                "0.5 * k * (r-r_eq)**2",
                "0.5 * k * (theta-theta_eq)**2",
                "k * (1 + cos(n * theta - theta_0))",
            ]
        ]

        assert carbon.atom_types['C'].charge.value == 0

        assert sympy.simplify(carbon.atom_types['C'].expression -
                              ref_exprs[0]) == 0
        assert sympy.simplify(carbon.bond_types['C~C'].expression -
                              ref_exprs[1]) == 0
        assert sympy.simplify(carbon.angle_types['C~C~C'].expression -
                              ref_exprs[2]) == 0
        assert sympy.simplify(carbon.dihedral_types['*~C~C~*'].expression -
                              ref_exprs[3]) == 0

        assert allclose(carbon.atom_types['C'].parameters['sigma'],
                        0.339966950842 * u.nm)
        assert allclose(carbon.atom_types['C'].parameters['epsilon'],
                        0.359824 * u.Unit('kJ/mol'))

        assert allclose(carbon.bond_types['C~C'].parameters['r_eq'],
                        0.1324 * u.nm)
        assert allclose(carbon.bond_types['C~C'].parameters['k'],
                        493460.96 * u.Unit('kJ/(mol*nm**2)'))

        assert allclose(carbon.angle_types['C~C~C'].parameters['theta_eq'],
                        2.12598556185 * u.radian)
        assert allclose(carbon.angle_types['C~C~C'].parameters['k'],
                        584.42112 * u.Unit('kJ/(mol*rad**2)'))

        assert allclose(carbon.dihedral_types['*~C~C~*'].parameters['k'],
                        27.8236 * u.Unit('kJ/mol'))
        assert allclose(carbon.dihedral_types['*~C~C~*'].parameters['n'],
                        2 * u.dimensionless)
        assert allclose(carbon.dihedral_types['*~C~C~*'].parameters['theta_0'],
                        np.pi * u.radian)
    def test_ff_charmm_xml(self):
        charm_ff = ForceField(get_path('trimmed_charmm.xml'))

        assert charm_ff.name == 'topologyCharmm'
        assert "*~CS~SS~*" in charm_ff.dihedral_types

        # Test list of parameters
        assert isinstance(
            charm_ff.dihedral_types["*~CE1~CE1~*"].parameters['k'], list)

        # This ensures that even though the parameters is a list, they can be hashed (by equality checks)
        assert charm_ff.dihedral_types[
            "*~CE1~CE1~*"] == charm_ff.dihedral_types["*~CE1~CE1~*"]
        assert len(charm_ff.dihedral_types["*~CE1~CE1~*"].parameters['k']) == 2

        # Test Correct Parameter Values
        assert charm_ff.dihedral_types["*~CE1~CE1~*"].parameters['k'] == \
               [u.unyt_quantity(0.6276, u.kJ), u.unyt_quantity(35.564, u.kJ)]
Exemple #15
0
        def _typed_topology(n_sites=1):
            xe = mb.Compound(name="Xe")

            packed_system = mb.fill_box(
                compound=xe,
                n_compounds=n_sites,
                box=mb.Box([3, 3, 3]),
            )

            top = from_mbuild(packed_system)

            ff = ForceField(get_path("noble_mie.xml"))

            for site in top.sites:
                site.atom_type = ff.atom_types["Xe"]

            top.update_topology()

            return top
Exemple #16
0
    def typed_water_system(self, water_system):
        top = water_system

        ff = ForceField(get_path('tip3p.xml'))

        element_map = {"O": "opls_111", "H": "opls_112"}

        for atom in top.sites:
            atom.atom_type = ff.atom_types[atom.name]

        for bond in top.bonds:
            bond.connection_type = ff.bond_types["opls_111~opls_112"]

        for subtop in top.subtops:
            angle = Angle(
                connection_members=[site for site in subtop.sites],
                name="opls_112~opls_111~opls_112",
                connection_type=ff.angle_types["opls_112~opls_111~opls_112"])
            top.add_connection(angle)

        top.update_topology()
        return top
Exemple #17
0
    def test_ethylene_forcefield(self):
        ethylene = ForceField(get_path('ethylene.xml'))

        assert len(ethylene.atom_types) == 2
        assert len(ethylene.bond_types) == 2
        assert len(ethylene.angle_types) == 2
        assert len(ethylene.dihedral_types) == 1

        # Store expected expressions in list
        ref_exprs = [sympy.sympify(expr) for expr in [
            "4*epsilon*((sigma/r)**12 - (sigma/r)**6)",
            "0.5 * k * (r-r_eq)**2",
            "0.5 * k * (theta-theta_eq)**2",
            "c_0 + c_1 * cos(psi) + c_2 * cos(psi)**2 + c_3 * cos(psi)**3 + c_4 * cos(psi)**4 + c_5 * cos(psi)**5"
            ]
        ]

        assert allclose(ethylene.atom_types['opls_143'].charge, -0.23 * u.elementary_charge)
        assert allclose(ethylene.atom_types['opls_144'].charge, 0.115 * u.elementary_charge)

        assert sympy.simplify(ethylene.atom_types['opls_143'].expression - ref_exprs[0]) == 0
        assert sympy.simplify(ethylene.atom_types['opls_144'].expression - ref_exprs[0]) == 0
        assert sympy.simplify(ethylene.bond_types['opls_143~opls_144'].expression - ref_exprs[1]) == 0
        assert sympy.simplify(ethylene.angle_types['opls_144~opls_143~opls_144'].expression - ref_exprs[2]) == 0
        assert sympy.simplify(ethylene.dihedral_types['opls_144~opls_143~opls_143~opls_144'].expression - ref_exprs[3]) == 0
        assert allclose(ethylene.atom_types['opls_143'].parameters['sigma'], 0.317984 * u.nm)
        assert allclose(ethylene.atom_types['opls_143'].parameters['epsilon'], 0.355 * u.Unit('kJ/mol'))
        assert allclose(ethylene.atom_types['opls_144'].parameters['sigma'], 0.12552 * u.nm)
        assert allclose(ethylene.atom_types['opls_144'].parameters['epsilon'], 0.242 * u.Unit('kJ/mol'))

        assert allclose(ethylene.bond_types['opls_143~opls_143'].parameters['r_eq'], 0.134 * u.nm)
        assert allclose(ethylene.bond_types['opls_143~opls_144'].parameters['k'], 284512.0 * u.Unit('kJ/(mol*nm**2)'))

        assert allclose(ethylene.angle_types['opls_143~opls_143~opls_144'].parameters['theta_eq'], 2.0943951 * u.rad)
        assert allclose(ethylene.angle_types['opls_144~opls_143~opls_144'].parameters['k'], 292.88 * u.Unit('kJ/mol/rad**2'))
        assert allclose(ethylene.dihedral_types['opls_144~opls_143~opls_143~opls_144'].parameters['c_0'], 58.576 * u.Unit('kJ/mol'))
        assert allclose(ethylene.dihedral_types['opls_144~opls_143~opls_143~opls_144'].parameters['c_2'], -58.576 * u.Unit('kJ/mol'))
        assert allclose(ethylene.dihedral_types['opls_144~opls_143~opls_143~opls_144'].parameters['c_5'], 0.0 * u.Unit('kJ/mol'))
 def test_missing_params(self):
     with pytest.raises(ForceFieldParseError):
         ForceField(get_path('ff-example-missing-parameter.xml'))
 def test_empty_foyer_atomtype(self):
     with pytest.raises(ForceFieldParseError):
         from_foyer_xml(get_path("empty_foyer.xml"))
Exemple #20
0
    def test_read_sites(self, filename=get_path('data.lammps')):
        read = read_lammpsdata(filename)

        assert read.box == Box(lengths=[1, 1, 1])
Exemple #21
0
 def test_read_lammps(self, filename=get_path('data.lammps')):
     read_lammpsdata(filename)
Exemple #22
0
 def opls_ethane_foyer(self):
     return ForceField(
         get_path(filename=get_path("oplsaa-ethane_foyer.xml")))
 def test_forcefield_missing_atom_types_non_strict(self):
     ff = ForceField(
         get_path(filename=get_path('ff_missing_atom_types.xml')),
         strict=False)
 def ff(self):
     return ForceField(get_path('ff-example0.xml'))
 def test_forcefield_missing_atom_types(self):
     with pytest.raises(MissingAtomTypesError):
         ff = ForceField(
             get_path(filename=get_path('ff_missing_atom_types.xml')))
 def test_ff_from_etree(self):
     ff_etree = lxml.etree.parse(get_path('opls_charmm_buck.xml'))
     ff = ForceField(ff_etree)
     assert ff
 def named_groups_ff(self):
     return ForceField(get_path('ff-example1.xml'))
 def test_non_unique_params(self):
     with pytest.raises(DocumentInvalid):
         ForceField(get_path('ff-example-nonunique-params.xml'))
 def test_atomclass_groups_charm_buck_ff(self):
     ff = ForceField(get_path('opls_charmm_buck.xml'))
     assert len(ff.atom_class_groups['CT']) == 2
Exemple #30
0
    def test_tip3p_force_field(self):
        water = ForceField(get_path("tip3p.xml"))
        assert len(water.atom_types) == 2
        assert len(water.bond_types) == 1
        assert len(water.angle_types) == 1
        assert len(water.dihedral_types) == 0

        # Store expected expressions in list
        ref_exprs = [
            sympy.sympify(expr) for expr in [
                "4*epsilon*((sigma/r)**12 - (sigma/r)**6)",
                "0.5 * k * (r-r_eq)**2",
                "0.5 * k * (theta-theta_eq)**2",
            ]
        ]

        assert water.atom_types["opls_111"].charge.value == -0.834
        assert water.atom_types["opls_112"].charge.value == 0.417

        assert (sympy.simplify(water.atom_types["opls_111"].expression -
                               ref_exprs[0]) == 0)
        assert (sympy.simplify(water.atom_types["opls_112"].expression -
                               ref_exprs[0]) == 0)
        assert (
            sympy.simplify(water.bond_types["opls_111~opls_112"].expression -
                           ref_exprs[1]) == 0)
        assert (sympy.simplify(
            water.angle_types["opls_112~opls_111~opls_112"].expression -
            ref_exprs[2]) == 0)

        assert_allclose_units(
            water.atom_types["opls_111"].parameters["sigma"],
            0.315061 * u.nm,
            rtol=1e-5,
            atol=1e-8,
        )
        assert_allclose_units(
            water.atom_types["opls_111"].parameters["epsilon"],
            0.636386 * u.Unit("kJ/mol"),
            rtol=1e-5,
            atol=1e-8,
        )
        assert_allclose_units(
            water.atom_types["opls_112"].parameters["sigma"],
            1.0 * u.nm,
            rtol=1e-5,
            atol=1e-8,
        )
        assert_allclose_units(
            water.atom_types["opls_112"].parameters["epsilon"],
            0.0 * u.Unit("kJ/mol"),
            rtol=1e-5,
            atol=1e-8,
        )

        assert_allclose_units(
            water.bond_types["opls_111~opls_112"].parameters["r_eq"],
            0.09572 * u.nm,
            rtol=1e-5,
            atol=1e-8,
        )
        assert_allclose_units(
            water.bond_types["opls_111~opls_112"].parameters["k"],
            502416.0 * u.Unit("kJ/(mol*nm**2)"),
            rtol=1e-5,
            atol=1e-8,
        )

        assert_allclose_units(
            water.angle_types["opls_112~opls_111~opls_112"].
            parameters["theta_eq"],
            1.824218134 * u.radian,
            rtol=1e-5,
            atol=1e-8,
        )
        assert_allclose_units(
            water.angle_types["opls_112~opls_111~opls_112"].parameters["k"],
            682.02 * u.Unit("kJ/(mol*rad**2)"),
            rtol=1e-5,
            atol=1e-8,
        )