openforcefield / openff-qcsubmit

Automated tools for submitting molecules to QCFractal
https://openff-qcsubmit.readthedocs.io/en/latest/index.html
MIT License
26 stars 4 forks source link

HydrogenBondFilter fails due to OpenMM units in Molecule conformers #236

Closed chapincavender closed 9 months ago

chapincavender commented 9 months ago

HydrogenBondFilter currently fails for all datasets I've tested. I suspect the error comes from importing OpenMM units here so that TorsionDriveResultCollection.to_records() produces OpenFF toolkit Molecules with conformers as OpenMM Quantities, whereas HydrogenBondFilter expects conformers as pint/OpenFF Quantities.

MWE:

from qcportal import PortalClient
from openff.qcsubmit.results import TorsionDriveResultCollection
from openff.qcsubmit.results.filters import HydrogenBondFilter
client = PortalClient("api.qcarchive.molssi.org:443")
td = TorsionDriveResultCollection.from_server(client=client, datasets=["OpenFF Gen 2 Torsion Set 1 Roche 2"], spec_name="default")
td.filter(HydrogenBondFilter(method="baker-hubbard"))

Error from MWE:

/home/ccavende/anaconda3/envs/openff-param-fit/lib/python3.11/site-packages/numpy/core/getlimits.py:549: UserWarning: The value of the smallest subnormal for <class 'numpy.float64'> type is zero.
  setattr(self, word, getattr(machar, word).flat[0])
/home/ccavende/anaconda3/envs/openff-param-fit/lib/python3.11/site-packages/numpy/core/getlimits.py:89: UserWarning: The value of the smallest subnormal for <class 'numpy.float64'> type is zero.
  return self._float_to_str(self.smallest_subnormal)
/home/ccavende/anaconda3/envs/openff-param-fit/lib/python3.11/site-packages/numpy/core/getlimits.py:549: UserWarning: The value of the smallest subnormal for <class 'numpy.float32'> type is zero.
  setattr(self, word, getattr(machar, word).flat[0])
/home/ccavende/anaconda3/envs/openff-param-fit/lib/python3.11/site-packages/numpy/core/getlimits.py:89: UserWarning: The value of the smallest subnormal for <class 'numpy.float32'> type is zero.
  return self._float_to_str(self.smallest_subnormal)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/ccavende/anaconda3/envs/openff-param-fit/lib/python3.11/site-packages/openff/qcsubmit/results/results.py", line 230, in filter
    filtered_collection = collection_filter.apply(filtered_collection)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ccavende/anaconda3/envs/openff-param-fit/lib/python3.11/site-packages/openff/qcsubmit/results/filters.py", line 72, in apply
    filtered_collection = self._apply(result_collection.copy(deep=True))
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ccavende/anaconda3/envs/openff-param-fit/lib/python3.11/site-packages/openff/qcsubmit/results/filters.py", line 149, in _apply
    filtered_ids = [
                   ^
  File "/home/ccavende/anaconda3/envs/openff-param-fit/lib/python3.11/site-packages/openff/qcsubmit/results/filters.py", line 152, in <listcomp>
    if self._filter_function(entries_by_id[record.id], record, molecule)
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ccavende/anaconda3/envs/openff-param-fit/lib/python3.11/site-packages/openff/qcsubmit/results/filters.py", line 676, in _filter_function
    [
  File "/home/ccavende/anaconda3/envs/openff-param-fit/lib/python3.11/site-packages/openff/qcsubmit/results/filters.py", line 677, in <listcomp>
    conformer.m_as(unit.nanometers).tolist()
    ^^^^^^^^^^^^^^
  File "/home/ccavende/anaconda3/envs/openff-param-fit/lib/python3.11/site-packages/openmm/unit/quantity.py", line 202, in __getattr__
    ret_val = getattr(self._value, attribute)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'numpy.ndarray' object has no attribute 'm_as'

Relevant subset of conda list:

openff-amber-ff-ports     0.0.3              pyh6c4a22f_0    conda-forge
openff-bespokefit         0.2.2              pyhd8ed1ab_0    conda-forge
openff-forcefields        2023.08.0          pyh1a96a4e_0    conda-forge
openff-fragmenter-base    0.2.1              pyhd8ed1ab_0    conda-forge
openff-interchange        0.3.17             pyhd8ed1ab_1    conda-forge
openff-interchange-base   0.3.17             pyhd8ed1ab_1    conda-forge
openff-models             0.1.1              pyhca7485f_0    conda-forge
openff-qcsubmit           0.50.0             pyhd8ed1ab_0    conda-forge
openff-toolkit            0.14.4             pyhd8ed1ab_1    conda-forge
openff-toolkit-base       0.14.4             pyhd8ed1ab_1    conda-forge
openff-units              0.2.1              pyh1a96a4e_0    conda-forge
openff-utilities          0.1.11             pyhd8ed1ab_0    conda-forge
openmm                    8.0.0           py311h28d7ac7_3    conda-forge
openmmforcefields         0.11.2             pyhd8ed1ab_1    conda-forge
qcelemental               0.27.1             pyhd8ed1ab_0    conda-forge
qcengine                  0.29.0             pyhd8ed1ab_0    conda-forge
qcportal                  0.51               pyhd8ed1ab_0    conda-forge