openff-forcefields icon indicating copy to clipboard operation
openff-forcefields copied to clipboard

sulfate angle parameters are incorrectly identified

Open therealchrisneale opened this issue 9 months ago • 3 comments

Describe the bug When attempting to parameterize a sulfate smiles of "[O-]S(=O)(=O)[O-]", the resulting topology does not assign all angles to 109.5 degrees.

To Reproduce

import openmm
from openff.toolkit import ForceField, Molecule, unit
from openff.interchange import Interchange
from openff.interchange.components._packmol import RHOMBIC_DODECAHEDRON, pack_box

ligand = Molecule.from_smiles("[O-]S(=O)(=O)[O-]")

topology = pack_box(
    molecules=[ligand],
    number_of_copies=[1],
    box_vectors=3.5 * RHOMBIC_DODECAHEDRON * unit.nanometer,
)
topology.n_molecules, topology.box_vectors, topology.get_positions().shape

sage = ForceField("openff-2.2.1.offxml")

interchange: Interchange = Interchange.from_smirnoff(force_field=sage, topology=topology)
interchange.topology.n_atoms, interchange.box, interchange.positions.shape

integrator = openmm.LangevinIntegrator(
    300 * openmm.unit.kelvin,
    1 / openmm.unit.picosecond,
    1 * openmm.unit.femtoseconds,
)
simulation = interchange.to_openmm_simulation(integrator=integrator)

print("\n### angles")
bonded = [f for f in simulation.system.getForces() if isinstance(f, openmm.openmm.HarmonicAngleForce)][0]
for i in range(bonded.getNumAngles()):
    print(bonded.getAngleParameters(i))

Output

### angles
[0, 1, 2, Quantity(value=1.8712080163342617, unit=radian), Quantity(value=1000.8227065747888, unit=kilojoule/(mole*radian**2))]
[0, 1, 3, Quantity(value=1.8712080163342617, unit=radian), Quantity(value=1000.8227065747888, unit=kilojoule/(mole*radian**2))]
[0, 1, 4, Quantity(value=1.8712080163342617, unit=radian), Quantity(value=1000.8227065747888, unit=kilojoule/(mole*radian**2))]
[2, 1, 3, Quantity(value=2.1025946571403775, unit=radian), Quantity(value=789.2336085207944, unit=kilojoule/(mole*radian**2))]
[2, 1, 4, Quantity(value=1.8712080163342617, unit=radian), Quantity(value=1000.8227065747888, unit=kilojoule/(mole*radian**2))]
[3, 1, 4, Quantity(value=1.8712080163342617, unit=radian), Quantity(value=1000.8227065747888, unit=kilojoule/(mole*radian**2))]

Computing environment (please complete the following information): mac M1

$ conda list
# packages in environment at ...:
#
# Name                    Version                   Build  Channel
adjusttext                1.3.0              pyhd8ed1ab_0    conda-forge
adwaita-icon-theme        47.0                     unix_0    conda-forge
ambertools                23.6            nompi_py312hb5b0a05_103    conda-forge
amberutils                21.0                     pypi_0    pypi
annotated-types           0.7.0              pyhd8ed1ab_1    conda-forge
anyio                     4.8.0              pyhd8ed1ab_0    conda-forge
appnope                   0.1.4              pyhd8ed1ab_1    conda-forge
argon2-cffi               23.1.0             pyhd8ed1ab_1    conda-forge
argon2-cffi-bindings      21.2.0          py312hb553811_5    conda-forge
arpack                    3.9.1           nompi_hdfe9103_102    conda-forge
arrow                     1.3.0              pyhd8ed1ab_1    conda-forge
asttokens                 3.0.0              pyhd8ed1ab_1    conda-forge
astunparse                1.6.3                      py_0  
async-lru                 2.0.4              pyhd8ed1ab_1    conda-forge
atk-1.0                   2.36.0               hb642b71_0  
attrs                     25.2.0             pyh71513ae_0    conda-forge
babel                     2.17.0             pyhd8ed1ab_0    conda-forge
beautifulsoup4            4.13.3             pyha770c72_0    conda-forge
biopython                 1.85            py312h01d7ebd_1    conda-forge
bleach                    6.2.0              pyh29332c3_4    conda-forge
bleach-with-css           6.2.0                h82add2a_4    conda-forge
blosc                     1.21.5               hafa3907_1    conda-forge
boost-cpp                 1.84.0               h07eb623_3    conda-forge
brotli                    1.1.0                h00291cd_2    conda-forge
brotli-bin                1.1.0                h00291cd_2    conda-forge
brotli-python             1.1.0           py312h5861a67_2    conda-forge
bson                      0.5.10             pyhd8ed1ab_0    conda-forge
bzip2                     1.0.8                hfdf4475_7    conda-forge
c-ares                    1.34.4               hf13058a_0    conda-forge
c-blosc2                  2.14.4               h0ae8482_1    conda-forge
ca-certificates           2025.2.25            hecd8cb5_0  
cached-property           1.5.2                hd8ed1ab_1    conda-forge
cached_property           1.5.2              pyha770c72_1    conda-forge
cachetools                5.5.2              pyhd8ed1ab_0    conda-forge
cairo                     1.18.0               h99e66fa_0    conda-forge
certifi                   2025.1.31       py312hecd8cb5_0  
cffi                      1.17.1          py312hf857d28_0    conda-forge
cftime                    1.6.4           py312h3a11e2b_1    conda-forge
chardet                   5.2.0              pyhd8ed1ab_3    conda-forge
charset-normalizer        3.4.1              pyhd8ed1ab_0    conda-forge
cinnabar                  0.4.1              pyhd8ed1ab_2    conda-forge
click                     8.1.8              pyh707e725_0    conda-forge
colorama                  0.4.6              pyhd8ed1ab_1    conda-forge
comm                      0.2.2              pyhd8ed1ab_1    conda-forge
contourpy                 1.3.1           py312hc47a885_0    conda-forge
cycler                    0.12.1             pyhd8ed1ab_1    conda-forge
cyrus-sasl                2.1.27               hf9bab2b_7    conda-forge
debugpy                   1.8.13          py312haafddd8_0    conda-forge
decorator                 5.2.1              pyhd8ed1ab_0    conda-forge
defusedxml                0.7.1              pyhd8ed1ab_0    conda-forge
dill                      0.3.9              pyhd8ed1ab_1    conda-forge
double-conversion         3.1.5                haf313ee_1  
edgembar                  0.2                      pypi_0    pypi
epoxy                     1.5.10               h5eb16cf_1    conda-forge
exceptiongroup            1.2.2              pyhd8ed1ab_1    conda-forge
executing                 2.1.0              pyhd8ed1ab_1    conda-forge
expat                     2.6.4                h6d0c2b6_0  
fftw                      3.3.10          nompi_h292e606_110    conda-forge
filelock                  3.17.0             pyhd8ed1ab_0    conda-forge
font-ttf-dejavu-sans-mono 2.37                 hab24e00_0    conda-forge
font-ttf-inconsolata      3.000                h77eed37_0    conda-forge
font-ttf-source-code-pro  2.038                h77eed37_0    conda-forge
font-ttf-ubuntu           0.83                 h77eed37_3    conda-forge
fontconfig                2.14.2               h5bb23bf_0    conda-forge
fonts-conda-ecosystem     1                             0    conda-forge
fonts-conda-forge         1                             0    conda-forge
fonttools                 4.56.0          py312h3520af0_0    conda-forge
fqdn                      1.5.1              pyhd8ed1ab_1    conda-forge
freetype                  2.13.3               h02243ff_0  
freetype-py               2.3.0              pyhd8ed1ab_0    conda-forge
fribidi                   1.0.10               hbcb3906_0    conda-forge
gdk-pixbuf                2.42.10              h688160f_2  
gettext                   0.21.0               h4e8c18a_2  
giflib                    5.2.2                h46256e1_0  
glib                      2.78.4               hcec6c5f_0  
glib-tools                2.78.4               hcec6c5f_0  
gobject-introspection     1.78.1          py312hf6ed2c1_1  
graphite2                 1.3.14               he9d5cce_1  
graphviz                  12.2.1               h5d95408_0  
greenlet                  3.1.1           py312haafddd8_1    conda-forge
griddataformats           1.0.2              pyhd8ed1ab_1    conda-forge
gsd                       3.4.2           py312h01d7ebd_0    conda-forge
gtk3                      3.24.21              h8878e13_7  
gts                       0.7.6                h53e17e3_4    conda-forge
gufe                      1.2.0              pyhd8ed1ab_1    conda-forge
h11                       0.14.0             pyhd8ed1ab_1    conda-forge
h2                        4.2.0              pyhd8ed1ab_0    conda-forge
h5py                      3.13.0          nompi_py312hea5ca7c_100    conda-forge
harfbuzz                  10.2.0               h5b8c2d6_0  
hdf4                      4.2.15               h7aa5921_5    conda-forge
hdf5                      1.14.3          nompi_h687a608_105    conda-forge
hicolor-icon-theme        0.17                 h694c41f_2    conda-forge
hpack                     4.1.0              pyhd8ed1ab_0    conda-forge
httpcore                  1.0.7              pyh29332c3_1    conda-forge
httpx                     0.28.1             pyhd8ed1ab_0    conda-forge
hyperframe                6.1.0              pyhd8ed1ab_0    conda-forge
icu                       73.2                 hf5e326d_0    conda-forge
idna                      3.10               pyhd8ed1ab_1    conda-forge
importlib-metadata        8.6.1              pyha770c72_0    conda-forge
importlib_resources       6.5.2              pyhd8ed1ab_0    conda-forge
iniconfig                 2.0.0              pyhd8ed1ab_1    conda-forge
ipykernel                 6.29.5             pyh57ce528_0    conda-forge
ipython                   9.0.2              pyhfb0248b_0    conda-forge
ipython_pygments_lexers   1.1.1              pyhd8ed1ab_0    conda-forge
ipywidgets                8.1.5              pyhd8ed1ab_1    conda-forge
isoduration               20.11.0            pyhd8ed1ab_1    conda-forge
jax                       0.4.35          py312hecd8cb5_0  
jaxlib                    0.4.35          cpu_py312hdd39599_2  
jedi                      0.19.2             pyhd8ed1ab_1    conda-forge
jinja2                    3.1.6              pyhd8ed1ab_0    conda-forge
joblib                    1.4.2              pyhd8ed1ab_1    conda-forge
jpeg                      9e                   h46256e1_3  
json5                     0.10.0             pyhd8ed1ab_1    conda-forge
jsoncpp                   1.9.4                ha357a0b_3  
jsonpointer               3.0.0           py312hb401068_1    conda-forge
jsonschema                4.23.0             pyhd8ed1ab_1    conda-forge
jsonschema-specifications 2024.10.1          pyhd8ed1ab_1    conda-forge
jsonschema-with-format-nongpl 4.23.0               hd8ed1ab_1    conda-forge
jupyter-lsp               2.2.5              pyhd8ed1ab_1    conda-forge
jupyter_client            8.6.3              pyhd8ed1ab_1    conda-forge
jupyter_core              5.7.2              pyh31011fe_1    conda-forge
jupyter_events            0.12.0             pyh29332c3_0    conda-forge
jupyter_server            2.15.0             pyhd8ed1ab_0    conda-forge
jupyter_server_terminals  0.5.3              pyhd8ed1ab_1    conda-forge
jupyterlab                4.3.5              pyhd8ed1ab_0    conda-forge
jupyterlab_pygments       0.3.0              pyhd8ed1ab_2    conda-forge
jupyterlab_server         2.27.3             pyhd8ed1ab_1    conda-forge
jupyterlab_widgets        3.0.13             pyhd8ed1ab_1    conda-forge
kartograf                 1.1.0              pyhd8ed1ab_1    conda-forge
khronos-opencl-icd-loader 2024.10.24           h6e16a3a_1    conda-forge
kiwisolver                1.4.8           py312h9275861_0    conda-forge
krb5                      1.21.3               h37d8d59_0    conda-forge
lcms2                     2.16                 h31d93a5_1  
lerc                      4.0.0                hb486fe8_0    conda-forge
libabseil                 20240116.2      cxx17_h548131f_0  
libaec                    1.1.3                h73e2aa4_0    conda-forge
libblas                   3.9.0           31_h7f60823_openblas    conda-forge
libboost                  1.84.0               h739af76_3    conda-forge
libboost-devel            1.84.0               h2b186f8_3    conda-forge
libboost-headers          1.84.0               h694c41f_3    conda-forge
libboost-python           1.84.0          py312hdf63323_7    conda-forge
libbrotlicommon           1.1.0                h00291cd_2    conda-forge
libbrotlidec              1.1.0                h00291cd_2    conda-forge
libbrotlienc              1.1.0                h00291cd_2    conda-forge
libcblas                  3.9.0           31_hff6cab4_openblas    conda-forge
libcurl                   8.8.0                hf9fcc65_1    conda-forge
libcxx                    19.1.7               hf95d169_0    conda-forge
libdeflate                1.22                 h46256e1_0  
libedit                   3.1.20250104    pl5321ha958ccf_0    conda-forge
libev                     4.33                 h10d778d_2    conda-forge
libexpat                  2.6.4                h240833e_0    conda-forge
libffi                    3.4.6                h281671d_0    conda-forge
libgd                     2.3.3                hfbc75c6_4  
libgfortran               5.0.0           13_2_0_h97931a8_3    conda-forge
libgfortran5              13.2.0               h2873a65_3    conda-forge
libglib                   2.78.4               h19e1a8f_0  
libgrpc                   1.62.2               h384b2fc_0    conda-forge
libiconv                  1.18                 h4b5e92a_1    conda-forge
libidn2                   2.3.4                h6c40b1e_0  
libintl                   0.23.1               h27064b9_0    conda-forge
libjpeg-turbo             2.0.0                hca72f7f_0  
liblapack                 3.9.0           31_h236ab99_openblas    conda-forge
libllvm15                 15.0.7               h1357083_4  
liblzma                   5.6.4                hd471939_0    conda-forge
libnetcdf                 4.9.2           nompi_h7334405_114    conda-forge
libnghttp2                1.58.0               h64cf6d3_1    conda-forge
libntlm                   1.8                  h6e16a3a_0    conda-forge
libopenblas               0.3.29          openmp_hbf64a52_0    conda-forge
libpng                    1.6.39               h6c40b1e_0  
libpq                     17.0                 h38cae2e_0    conda-forge
libprotobuf               4.25.3               h34eed0b_0  
librdkit                  2024.03.6            h9a5be36_0    conda-forge
libre2-11                 2024.02.01           h5e9a74d_0  
librsvg                   2.56.3               ha9ee93f_1  
libsodium                 1.0.20               hfdf4475_0    conda-forge
libsqlite                 3.46.0               h1b8f9f3_0    conda-forge
libssh2                   1.11.1               h3a17b82_0  
libtiff                   4.7.0                h2dfa3ea_0  
libtool                   2.4.7                h6d0c2b6_0  
libunistring              0.9.10               h9ed2024_0  
libwebp                   1.3.2                hc927772_1  
libwebp-base              1.3.2                h46256e1_1  
libxcb                    1.17.0               hf1f96e2_0    conda-forge
libxml2                   2.13.7               h6070cd6_0  
libxslt                   1.1.39               h03b04e6_0    conda-forge
libzip                    1.10.1               hc158999_3    conda-forge
libzlib                   1.2.13               h87427d6_6    conda-forge
llvm-openmp               19.1.7               ha54dae1_0    conda-forge
llvmlite                  0.44.0          py312hfa5e528_1  
lomap2                    3.2.1              pyhd8ed1ab_2    conda-forge
lxml                      5.2.2           py312h1aa9a54_0    conda-forge
lz4-c                     1.9.4                hcec6c5f_1  
markupsafe                3.0.2           py312h3520af0_1    conda-forge
matplotlib-base           3.10.1          py312h535dea3_0    conda-forge
matplotlib-inline         0.1.7              pyhd8ed1ab_1    conda-forge
mda-xdrlib                0.2.0              pyhd8ed1ab_1    conda-forge
mdanalysis                2.9.0           py312hec45ffd_0    conda-forge
mdtraj                    1.10.0          py312h00f8f5a_0    conda-forge
mistune                   3.1.2              pyhd8ed1ab_0    conda-forge
ml_dtypes                 0.5.1           py312hec45ffd_0    conda-forge
mmpbsa-py                 16.0                     pypi_0    pypi
mmtf-python               1.1.3              pyhd8ed1ab_0    conda-forge
mpiplus                   v0.0.2             pyhd8ed1ab_0    conda-forge
mrcfile                   1.5.4              pyhd8ed1ab_0    conda-forge
msgpack-python            1.1.0           py312hc5c4d5f_0    conda-forge
munkres                   1.1.4              pyh9f0ad1d_0    conda-forge
narwhals                  1.30.0             pyhd8ed1ab_0    conda-forge
nbclient                  0.10.2             pyhd8ed1ab_0    conda-forge
nbconvert-core            7.16.6             pyh29332c3_0    conda-forge
nbformat                  5.10.4             pyhd8ed1ab_1    conda-forge
ncurses                   6.5                  h0622a9a_3    conda-forge
nest-asyncio              1.6.0              pyhd8ed1ab_1    conda-forge
netcdf-fortran            4.6.1           nompi_h4680a16_108    conda-forge
netcdf4                   1.6.5           nompi_py312hb3bfefa_102    conda-forge
networkx                  3.4.2              pyh267e887_2    conda-forge
nglview                   3.1.4              pyh620948e_0    conda-forge
ninja                     1.12.1               hecd8cb5_0  
ninja-base                1.12.1               h1962661_0  
notebook                  7.3.2              pyhd8ed1ab_0    conda-forge
notebook-shim             0.2.4              pyhd8ed1ab_1    conda-forge
nspr                      4.35                 hcec6c5f_0  
nss                       3.89.1               hcec6c5f_0  
numba                     0.61.0          py312hfa89a5f_1    conda-forge
numexpr                   2.10.2          py312ha51eba0_0    conda-forge
numpy                     1.26.4          py312he3a82b2_0    conda-forge
ocl_icd_wrapper_apple     1.0.0                hbcb3906_0    conda-forge
opencl-headers            2024.10.24           h240833e_0    conda-forge
openfe                    1.3.0              pyhd8ed1ab_0    conda-forge
openfe-analysis           0.3.1              pyhd8ed1ab_0    conda-forge
openff-amber-ff-ports     0.0.4              pyhca7485f_0    conda-forge
openff-forcefields        2024.09.0          pyhff2d567_0    conda-forge
openff-interchange        0.4.2              pyhd8ed1ab_2    conda-forge
openff-interchange-base   0.4.2              pyhd8ed1ab_2    conda-forge
openff-models             0.1.2              pyhca7485f_0    conda-forge
openff-toolkit            0.16.8             pyhd8ed1ab_2    conda-forge
openff-toolkit-base       0.16.8             pyhd8ed1ab_2    conda-forge
openff-units              0.2.2              pyhd8ed1ab_1    conda-forge
openff-utilities          0.1.15             pyhd8ed1ab_0    conda-forge
openjpeg                  2.5.2                h2d09ccc_1  
openldap                  2.6.9                hd8a590d_0    conda-forge
openmm                    8.1.2           py312h40894ff_3_khronos    conda-forge
openmmforcefields         0.14.2             pyhd8ed1ab_0    conda-forge
openmmtools               0.24.1             pyhd8ed1ab_0    conda-forge
openssl                   3.4.1                hc426f3f_0    conda-forge
opt_einsum                3.4.0              pyhd8ed1ab_1    conda-forge
overrides                 7.7.0              pyhd8ed1ab_1    conda-forge
packaging                 24.2               pyhd8ed1ab_2    conda-forge
packmol-memgen            2024.2.9                 pypi_0    pypi
pandas                    2.2.3           py312h98e817e_1    conda-forge
pandocfilters             1.5.0              pyhd8ed1ab_0    conda-forge
panedr                    0.8.0              pyhd8ed1ab_1    conda-forge
pango                     1.50.7               h986b0af_1  
parmed                    4.3.0           py312h9a1398e_1    conda-forge
parso                     0.8.4              pyhd8ed1ab_1    conda-forge
patsy                     1.0.1              pyhd8ed1ab_1    conda-forge
pcre2                     10.42                h9b97e30_1  
pdb4amber                 22.0                     pypi_0    pypi
pdbfixer                  1.9                pyh1a96a4e_0    conda-forge
perl                      5.32.1          7_h10d778d_perl5    conda-forge
pexpect                   4.9.0              pyhd8ed1ab_1    conda-forge
pickleshare               0.7.5           pyhd8ed1ab_1004    conda-forge
pillow                    11.1.0          py312h935ef2f_1  
pint                      0.23               pyhd8ed1ab_1    conda-forge
pip                       25.0.1             pyh8b19718_0    conda-forge
pixman                    0.44.2               h1fd1274_0    conda-forge
pkgutil-resolve-name      1.3.10             pyhd8ed1ab_2    conda-forge
platformdirs              4.3.6              pyhd8ed1ab_1    conda-forge
plotly                    6.0.0              pyhd8ed1ab_0    conda-forge
plugcli                   0.2.0              pyhd8ed1ab_1    conda-forge
pluggy                    1.5.0              pyhd8ed1ab_1    conda-forge
pooch                     1.8.2              pyhd8ed1ab_1    conda-forge
poppler                   24.09.0              h774fa5f_2  
poppler-data              0.4.11               hecd8cb5_1  
prometheus_client         0.21.1             pyhd8ed1ab_0    conda-forge
prompt-toolkit            3.0.50             pyha770c72_0    conda-forge
psutil                    7.0.0           py312h01d7ebd_0    conda-forge
pthread-stubs             0.4               h00291cd_1002    conda-forge
ptyprocess                0.7.0              pyhd8ed1ab_1    conda-forge
pure_eval                 0.2.3              pyhd8ed1ab_1    conda-forge
py-cpuinfo                9.0.0              pyhd8ed1ab_1    conda-forge
py3dmol                   2.4.2              pyhd8ed1ab_1    conda-forge
pycairo                   1.27.0          py312hc3eca63_0    conda-forge
pycparser                 2.22               pyh29332c3_1    conda-forge
pydantic                  2.10.6             pyh3cfb1c2_0    conda-forge
pydantic-core             2.27.2          py312h0d0de52_0    conda-forge
pyedr                     0.8.0              pyhd8ed1ab_1    conda-forge
pygments                  2.19.1             pyhd8ed1ab_0    conda-forge
pygraphviz                1.14            py312hc79309e_0    conda-forge
pymbar                    4.0.3                hb401068_3    conda-forge
pymbar-core               4.0.3           py312h025c719_3    conda-forge
pymsmt                    22.0                     pypi_0    pypi
pyobjc-core               11.0            py312h2365019_0    conda-forge
pyobjc-framework-cocoa    11.0            py312h2365019_0    conda-forge
pyparsing                 3.2.1              pyhd8ed1ab_0    conda-forge
pysocks                   1.7.1              pyha55dd90_7    conda-forge
pytables                  3.9.2           py312hf575446_2    conda-forge
pytest                    8.3.5              pyhd8ed1ab_0    conda-forge
python                    3.12.3          h1411813_0_cpython    conda-forge
python-constraint         1.4.0              pyhff2d567_1    conda-forge
python-dateutil           2.9.0.post0        pyhff2d567_1    conda-forge
python-fastjsonschema     2.21.1             pyhd8ed1ab_0    conda-forge
python-json-logger        2.0.7              pyhd8ed1ab_0    conda-forge
python-tzdata             2025.1             pyhd8ed1ab_0    conda-forge
python_abi                3.12                    5_cp312    conda-forge
pytng                     0.3.1           py312h57167bd_2    conda-forge
pytraj                    2.0.6                    pypi_0    pypi
pytz                      2024.1             pyhd8ed1ab_0    conda-forge
pyyaml                    6.0.2           py312h3520af0_2    conda-forge
pyzmq                     26.3.0          py312h679dbab_0    conda-forge
qhull                     2020.2               h3c5361c_5    conda-forge
rdkit                     2024.03.5       py312hc58cafc_0    conda-forge
re2                       2024.02.01           h1962661_0  
readline                  8.2                  h7cca4af_2    conda-forge
referencing               0.36.2             pyh29332c3_0    conda-forge
reportlab                 4.3.1           py312h01d7ebd_0    conda-forge
requests                  2.32.3             pyhd8ed1ab_1    conda-forge
rfc3339-validator         0.1.4              pyhd8ed1ab_1    conda-forge
rfc3986-validator         0.1.1              pyh9f0ad1d_0    conda-forge
rlpycairo                 0.2.0              pyhd8ed1ab_0    conda-forge
rpds-py                   0.23.1          py312hb59e30e_0    conda-forge
sander                    22.0                     pypi_0    pypi
scikit-learn              1.6.1           py312he1a5313_0    conda-forge
scipy                     1.13.1          py312hb9702fa_0    conda-forge
seaborn                   0.13.2               hd8ed1ab_3    conda-forge
seaborn-base              0.13.2             pyhd8ed1ab_3    conda-forge
send2trash                1.8.3              pyh31c8845_1    conda-forge
setuptools                75.8.2             pyhff2d567_0    conda-forge
six                       1.17.0             pyhd8ed1ab_0    conda-forge
smirnoff99frosst          1.1.0              pyh44b312d_0    conda-forge
snappy                    1.2.1                haf3c120_1    conda-forge
sniffio                   1.3.1              pyhd8ed1ab_1    conda-forge
soupsieve                 2.5                pyhd8ed1ab_1    conda-forge
sqlalchemy                2.0.39          py312h01d7ebd_1    conda-forge
sqlite                    3.45.3               h6c40b1e_0  
stack_data                0.6.3              pyhd8ed1ab_1    conda-forge
statsmodels               0.14.4          py312h3a11e2b_0    conda-forge
terminado                 0.18.1             pyh31c8845_0    conda-forge
threadpoolctl             3.6.0              pyhecae5ae_0    conda-forge
tidynamics                1.1.2              pyhd8ed1ab_0    conda-forge
tinycss2                  1.4.0              pyhd8ed1ab_0    conda-forge
tinydb                    4.8.2              pyhd8ed1ab_1    conda-forge
tk                        8.6.13               h1abcd95_1    conda-forge
tomli                     2.2.1              pyhd8ed1ab_1    conda-forge
tornado                   6.4.2           py312h01d7ebd_0    conda-forge
tqdm                      4.67.1             pyhd8ed1ab_1    conda-forge
traitlets                 5.14.3             pyhd8ed1ab_1    conda-forge
types-python-dateutil     2.9.0.20241206     pyhd8ed1ab_0    conda-forge
typing-extensions         4.12.2               hd8ed1ab_1    conda-forge
typing_extensions         4.12.2             pyha770c72_1    conda-forge
typing_utils              0.1.0              pyhd8ed1ab_1    conda-forge
tzdata                    2025a                h78e105d_0    conda-forge
unicodedata2              16.0.0          py312h01d7ebd_0    conda-forge
uri-template              1.3.0              pyhd8ed1ab_1    conda-forge
urllib3                   2.3.0              pyhd8ed1ab_0    conda-forge
validators                0.34.0             pyhd8ed1ab_1    conda-forge
wcwidth                   0.2.13             pyhd8ed1ab_1    conda-forge
webcolors                 24.11.1            pyhd8ed1ab_0    conda-forge
webencodings              0.5.1              pyhd8ed1ab_3    conda-forge
websocket-client          1.8.0              pyhd8ed1ab_1    conda-forge
wget                      1.25.0               h3a17b82_0  
wheel                     0.45.1             pyhd8ed1ab_1    conda-forge
widgetsnbextension        4.0.13             pyhd8ed1ab_1    conda-forge
xmltodict                 0.14.2             pyhd8ed1ab_1    conda-forge
xorg-libice               1.1.2                h6e16a3a_0    conda-forge
xorg-libsm                1.2.6                h6e16a3a_0    conda-forge
xorg-libx11               1.8.12               h217831a_0    conda-forge
xorg-libxau               1.0.12               h6e16a3a_0    conda-forge
xorg-libxdmcp             1.1.5                h00291cd_0    conda-forge
xorg-libxext              1.3.6                h00291cd_0    conda-forge
xorg-libxt                1.3.1                h6e16a3a_0    conda-forge
xz                        5.6.4                h46256e1_1  
yaml                      0.2.5                h0d85af4_2    conda-forge
zeromq                    4.3.5                h7130eaa_7    conda-forge
zipp                      3.21.0             pyhd8ed1ab_1    conda-forge
zlib                      1.2.13               h87427d6_6    conda-forge
zlib-ng                   2.0.7                h6c40b1e_0  
zstandard                 0.23.0          py312h01d7ebd_1    conda-forge
zstd                      1.5.6                h138b38a_0  

Additional context Add any other context about the problem here.

therealchrisneale avatar May 10 '25 02:05 therealchrisneale

Thanks for the report, Chris! I can reproduce and see the issue of incorrectly perceiving O=S=O:

import openmm
from openff.toolkit import ForceField, Molecule, unit

from rdkit import Chem
from rdkit.Chem.Draw import IPythonConsole
from rdkit.Chem import Draw
IPythonConsole.ipython_useSVG=True 

ligand = Molecule.from_smiles("[O-]S(=O)(=O)[O-]")
ff = ForceField("openff-2.2.1.offxml")
angles = ff.label_molecules(ligand.to_topology())[0]["Angles"]
for indices, parameter in angles.items():
    elements = [ligand.atoms[i].symbol for i in indices]
    label = "-".join(f"{el}{i + 1}" for el, i in zip(elements, indices))
    print(f"{label}  |  {parameter.id} -- {parameter.angle}, {parameter.k}")
O1-S2-O3  |  a32 -- 107.212321927 degree, 239.2023677282 kilocalorie_per_mole / radian ** 2
O1-S2-O4  |  a32 -- 107.212321927 degree, 239.2023677282 kilocalorie_per_mole / radian ** 2
O1-S2-O5  |  a32 -- 107.212321927 degree, 239.2023677282 kilocalorie_per_mole / radian ** 2
O3-S2-O4  |  a31 -- 120.4697998809 degree, 188.6313595891 kilocalorie_per_mole / radian ** 2
O3-S2-O5  |  a32 -- 107.212321927 degree, 239.2023677282 kilocalorie_per_mole / radian ** 2
O4-S2-O5  |  a32 -- 107.212321927 degree, 239.2023677282 kilocalorie_per_mole / radian ** 2
Image

This should be something we can fix with a more specific angle SMIRKS.

lilyminium avatar May 10 '25 06:05 lilyminium

I think you will also need more specific bond parameters too, unless those already exist. Because all 4 bonds in the sulfate ion should also be identical.

bannanc avatar Jun 12 '25 21:06 bannanc

@bannanc In 2.2.1 at least they are identical -- all 4 get picked up by b59, with the relatively general SMIRKS "[#16X4,#16X3:1]~[#8X1:2]".

lilyminium avatar Jun 13 '25 07:06 lilyminium