Skip to content

Commit

Permalink
Fixes rmin_half / sigma factor conversion (#807).
Browse files Browse the repository at this point in the history
  • Loading branch information
SimonBoothroyd committed Jan 8, 2021
1 parent 988c6d6 commit 2f6bc3f
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 10 deletions.
4 changes: 4 additions & 0 deletions docs/releasehistory.rst
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ New features
- `PR #794 <https://github.com/openforcefield/openforcefield/pull/974>`_: Adds a decorator
``@requires_package`` that denotes a function requires an optional dependency.

Bugfixes
""""""""
- `PR #808 <https://github.com/openforcefield/openforcefield/pull/808>`_: Fixes the interconversion
between a vdW ``sigma`` and ``rmin_half`` parameter.

0.8.2 - Bugfix release
----------------------
Expand Down
22 changes: 14 additions & 8 deletions openforcefield/tests/test_parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -1764,26 +1764,32 @@ def test_sigma_rmin_half(self):

data = {
"smirks": "[*:1]",
"sigma": 0.5 * unit.angstrom,
"rmin_half": 0.5 * unit.angstrom,
"epsilon": 0.5 * unit.kilocalorie_per_mole,
}
param = vdWHandler.vdWType(**data)

assert param.sigma is not None
assert param.rmin_half is not None
assert param.sigma == param.rmin_half / 2 ** (1 / 6)
assert "sigma" in param.to_dict()
assert "rmin_half" not in param.to_dict()
assert numpy.isclose(
param.sigma.value_in_unit(unit.angstrom),
(2.0 * param.rmin_half / 2 ** (1 / 6)).value_in_unit(unit.angstrom),
)
assert "sigma" not in param.to_dict()
assert "rmin_half" in param.to_dict()

param.sigma = 0.8 * unit.angstrom
param.sigma = param.sigma

assert param.sigma == param.rmin_half / 2 ** (1 / 6)
assert numpy.isclose(param.rmin_half.value_in_unit(unit.angstrom), 0.5)
assert "sigma" in param.to_dict()
assert "rmin_half" not in param.to_dict()

param.rmin_half = 0.8 * unit.angstrom
param.rmin_half = param.rmin_half

assert param.sigma == param.rmin_half / 2 ** (1 / 6)
assert numpy.isclose(
param.sigma.value_in_unit(unit.angstrom),
(2.0 * param.rmin_half / 2 ** (1 / 6)).value_in_unit(unit.angstrom),
)
assert "sigma" not in param.to_dict()
assert "rmin_half" in param.to_dict()

Expand Down
4 changes: 2 additions & 2 deletions openforcefield/typing/engines/smirnoff/parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -3513,13 +3513,13 @@ def __setattr__(self, name, value):
if name == "rmin_half":
if type(value) == str:
value = object_to_quantity(value)
super().__setattr__("sigma", value / 2 ** (1 / 6))
super().__setattr__("sigma", 2.0 * value / 2 ** (1 / 6))
self._extra_nb_var = "sigma"

if name == "sigma":
if type(value) == str:
value = object_to_quantity(value)
super().__setattr__("rmin_half", value * 2 ** (1 / 6))
super().__setattr__("rmin_half", value * 2 ** (1 / 6) / 2.0)
self._extra_nb_var = "rmin_half"

def to_dict(
Expand Down

0 comments on commit 2f6bc3f

Please sign in to comment.