Skip to content

Commit

Permalink
Merge pull request #237 from leeping/support-eval-handler-grads
Browse files Browse the repository at this point in the history
[Evaluator] Support gradients of handler attributes
  • Loading branch information
j-wags authored Sep 17, 2021
2 parents 4670d9d + 64d7c73 commit 128d5bd
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 4 deletions.
22 changes: 18 additions & 4 deletions src/evaluator_io.py
Original file line number Diff line number Diff line change
Expand Up @@ -308,11 +308,15 @@ def _parameter_value_from_gradient_key(self, gradient_key):
bool
Returns True if the parameter is a cosmetic one.
"""
import simtk.unit as simtk_unit

parameter_handler = self.FF.openff_forcefield.get_parameter_handler(
gradient_key.tag
)
parameter = parameter_handler.parameters[gradient_key.smirks]
parameter = (
parameter_handler if gradient_key.smirks is None
else parameter_handler.parameters[gradient_key.smirks]
)

attribute_split = re.split(r"(\d+)", gradient_key.attribute)
attribute_split = list(filter(None, attribute_split))
Expand Down Expand Up @@ -343,6 +347,9 @@ def _parameter_value_from_gradient_key(self, gradient_key):
):
is_cosmetic = True

if not isinstance(parameter_value, simtk_unit.Quantity):
parameter_value = parameter_value * simtk_unit.dimensionless

return openmm_quantity_to_pint(parameter_value), is_cosmetic

def _extract_physical_parameter_values(self):
Expand Down Expand Up @@ -461,9 +468,16 @@ def submit_jobs(self, mvals, AGrad=True, AHess=True):
string_key = field_list[0]
key_split = string_key.split("/")

parameter_tag = key_split[0].strip()
parameter_smirks = key_split[3].strip()
parameter_attribute = key_split[2].strip()
if len(key_split) == 3 and key_split[0] == "":
parameter_tag = key_split[1].strip()
parameter_smirks = None
parameter_attribute = key_split[2].strip()
elif len(key_split) == 4:
parameter_tag = key_split[0].strip()
parameter_smirks = key_split[3].strip()
parameter_attribute = key_split[2].strip()
else:
raise NotImplementedError()

# Use the full attribute name (e.g. k1) for the gradient key.
parameter_gradient_key = ParameterGradientKey(
Expand Down
7 changes: 7 additions & 0 deletions src/openmmio.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,13 @@
from forcebalance.output import getLogger
logger = getLogger(__name__)
try:
# Try importing openmm using >=7.6 namespace
from openmm.app import *
from openmm import *
from simtk.unit import *
import openmm._openmm as _openmm
except ImportError:
# Try importing openmm using <7.6 namespace
from simtk.openmm.app import *
from simtk.openmm import *
from simtk.unit import *
Expand Down

0 comments on commit 128d5bd

Please sign in to comment.