openff-toolkit
openff-toolkit copied to clipboard
`Molecule.from_polymer_pdb()` fails with RDKit on BACE PDB
Describe the bug
Molecule.from_polymer_pdb()
gives an undefined stereochemistry error for the attached PDB.
To Reproduce
from openff.toolkit import Molecule, RDKitToolkitWrapper
protein = Molecule.from_polymer_pdb("protein.pdb", toolkit_registry=RDKitToolkitWrapper())
Output
---------------------------------------------------------------------------
UndefinedStereochemistryError Traceback (most recent call last)
Cell In [1], line 3
1 from openff.toolkit import Molecule, RDKitToolkitWrapper
----> 3 protein = Molecule.from_polymer_pdb("protein.pdb", toolkit_registry=RDKitToolkitWrapper())
File ~/Documents/openff/examples/bespokefit/env-toolkit/lib/python3.10/site-packages/openff/utilities/utilities.py:75, in requires_package.<locals>.inner_decorator.<locals>.wrapper(*args, **kwargs)
72 except Exception as e:
73 raise e
---> 75 return function(*args, **kwargs)
File ~/Documents/openff/examples/bespokefit/env-toolkit/lib/python3.10/site-packages/openff/toolkit/topology/molecule.py:3867, in FrozenMolecule.from_polymer_pdb(cls, file_path, toolkit_registry)
3864 with open(substructure_file_path, "r") as subfile:
3865 substructure_dictionary = json.load(subfile)
-> 3867 offmol = toolkit_registry.call(
3868 "_polymer_openmm_topology_to_offmol", pdb.topology, substructure_dictionary
3869 )
3871 coords = unit.Quantity(
3872 np.array(
3873 [
(...)
3878 unit.angstrom,
3879 )
3880 offmol.add_conformer(coords)
File ~/Documents/openff/examples/bespokefit/env-toolkit/lib/python3.10/site-packages/openff/toolkit/utils/toolkit_registry.py:359, in ToolkitRegistry.call(self, method_name, raise_exception_types, *args, **kwargs)
357 for exception_type in raise_exception_types:
358 if isinstance(e, exception_type):
--> 359 raise e
360 errors.append((toolkit, e))
362 # No toolkit was found to provide the requested capability
363 # TODO: Can we help developers by providing a check for typos in expected method names?
File ~/Documents/openff/examples/bespokefit/env-toolkit/lib/python3.10/site-packages/openff/toolkit/utils/toolkit_registry.py:355, in ToolkitRegistry.call(self, method_name, raise_exception_types, *args, **kwargs)
353 method = getattr(toolkit, method_name)
354 try:
--> 355 return method(*args, **kwargs)
356 except Exception as e:
357 for exception_type in raise_exception_types:
File ~/Documents/openff/examples/bespokefit/env-toolkit/lib/python3.10/site-packages/openff/toolkit/utils/rdkit_wrapper.py:254, in RDKitToolkitWrapper._polymer_openmm_topology_to_offmol(self, omm_top, substructure_dictionary)
250 def _polymer_openmm_topology_to_offmol(self, omm_top, substructure_dictionary):
251 rdkit_mol = self._polymer_openmm_topology_to_rdmol(
252 omm_top, substructure_dictionary
253 )
--> 254 offmol = self.from_rdkit(rdkit_mol)
255 return offmol
File ~/Documents/openff/examples/bespokefit/env-toolkit/lib/python3.10/site-packages/openff/toolkit/utils/rdkit_wrapper.py:1687, in RDKitToolkitWrapper.from_rdkit(self, rdmol, allow_undefined_stereo, hydrogens_are_explicit, _cls)
1684 Chem.AssignStereochemistry(rdmol, cleanIt=False)
1686 # Check for undefined stereochemistry.
-> 1687 self._detect_undefined_stereo(
1688 rdmol,
1689 raise_warning=allow_undefined_stereo,
1690 err_msg_prefix="Unable to make OFFMol from RDMol: ",
1691 )
1693 # Create a new OpenFF Molecule
1694 offmol = _cls()
File ~/Documents/openff/examples/bespokefit/env-toolkit/lib/python3.10/site-packages/openff/toolkit/utils/rdkit_wrapper.py:2623, in RDKitToolkitWrapper._detect_undefined_stereo(cls, rdmol, err_msg_prefix, raise_warning)
2621 else:
2622 msg = "Unable to make OFFMol from RDMol: " + msg
-> 2623 raise UndefinedStereochemistryError(msg)
UndefinedStereochemistryError: Unable to make OFFMol from RDMol: Unable to make OFFMol from RDMol: RDMol has unspecified stereochemistry. Undefined chiral centers are:
- Atom N (index 5824)
Computing environment (please complete the following information):
- Arch Linux
conda list
# packages in environment at /home/joshmitchell/Documents/openff/examples/bespokefit/env-toolkit: # # Name Version Build Channel _libgcc_mutex 0.1 conda_forge conda-forge _openmp_mutex 4.5 2_gnu conda-forge alsa-lib 1.2.7.2 h166bdaf_0 conda-forge amberlite 22.0 pypi_0 pypi ambertools 22.0 py310h3aec49d_3 conda-forge amberutils 21.0 pypi_0 pypi anyio 3.6.1 pypi_0 pypi argon2-cffi 21.3.0 pypi_0 pypi argon2-cffi-bindings 21.2.0 py310h5764c6d_2 conda-forge arpack 3.7.0 hdefa2d7_2 conda-forge asttokens 2.0.8 pypi_0 pypi astunparse 1.6.3 pypi_0 pypi attr 2.5.1 h166bdaf_1 conda-forge attrs 22.1.0 pypi_0 pypi babel 2.10.3 pypi_0 pypi backcall 0.2.0 pypi_0 pypi backports 1.0 py_2 conda-forge backports-functools-lru-cache 1.6.4 pypi_0 pypi backports.functools_lru_cache 1.6.4 pyhd8ed1ab_0 conda-forge beautifulsoup4 4.11.1 pypi_0 pypi bleach 5.0.1 pypi_0 pypi blosc 1.21.1 h83bc5f7_3 conda-forge boost 1.74.0 py310h7c3ba0c_5 conda-forge boost-cpp 1.74.0 h75c5d50_8 conda-forge brotli 1.0.9 h166bdaf_7 conda-forge brotli-bin 1.0.9 h166bdaf_7 conda-forge brotlipy 0.7.0 py310h5764c6d_1004 conda-forge bzip2 1.0.8 h7f98852_4 conda-forge c-ares 1.18.1 h7f98852_0 conda-forge ca-certificates 2022.9.24 ha878542_0 conda-forge cached-property 1.5.2 pypi_0 pypi cached_property 1.5.2 pyha770c72_1 conda-forge cachetools 5.2.0 pypi_0 pypi cairo 1.16.0 ha61ee94_1014 conda-forge certifi 2022.9.24 pypi_0 pypi cffi 1.15.1 py310h255011f_0 conda-forge charset-normalizer 2.1.1 pypi_0 pypi colorama 0.4.5 pypi_0 pypi conda 22.9.0 py310hff52083_1 conda-forge conda-package-handling 1.9.0 py310h5764c6d_0 conda-forge contourpy 1.0.5 py310hbf28c38_0 conda-forge cryptography 38.0.2 py310h597c629_0 conda-forge cudatoolkit 11.7.0 hd8887f6_10 conda-forge curl 7.85.0 h7bff187_0 conda-forge cycler 0.11.0 pypi_0 pypi cython 0.29.32 py310hd8f1fbe_0 conda-forge dbus 1.13.6 h5008d03_3 conda-forge debugpy 1.6.3 py310hd8f1fbe_0 conda-forge decorator 5.1.1 pypi_0 pypi defusedxml 0.7.1 pypi_0 pypi entrypoints 0.4 pypi_0 pypi executing 1.1.1 pypi_0 pypi expat 2.4.9 h27087fc_0 conda-forge fastjsonschema 2.16.2 pypi_0 pypi fftw 3.3.10 nompi_hf0379b8_105 conda-forge flit-core 3.7.1 pypi_0 pypi 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 hab24e00_0 conda-forge fontconfig 2.14.0 hc2a2eb6_1 conda-forge fonts-conda-ecosystem 1 0 conda-forge fonts-conda-forge 1 0 conda-forge fonttools 4.37.4 py310h5764c6d_0 conda-forge freetype 2.12.1 hca18f0e_0 conda-forge gettext 0.19.8.1 h27087fc_1009 conda-forge glib 2.74.0 h6239696_0 conda-forge glib-tools 2.74.0 h6239696_0 conda-forge greenlet 1.1.3 py310hd8f1fbe_0 conda-forge gst-plugins-base 1.20.3 h57caac4_2 conda-forge gstreamer 1.20.3 hd4edc92_2 conda-forge hdf4 4.2.15 h9772cbc_4 conda-forge hdf5 1.12.2 nompi_h2386368_100 conda-forge icu 70.1 h27087fc_0 conda-forge idna 3.4 pypi_0 pypi importlib-metadata 4.11.4 py310hff52083_0 conda-forge importlib-resources 5.10.0 pypi_0 pypi importlib_resources 5.10.0 pyhd8ed1ab_0 conda-forge iniconfig 1.1.1 pypi_0 pypi ipykernel 6.16.0 pypi_0 pypi ipython 8.5.0 pypi_0 pypi ipython-genutils 0.2.0 pypi_0 pypi ipython_genutils 0.2.0 py_1 conda-forge ipywidgets 7.7.2 pypi_0 pypi jack 1.9.18 h8c3723f_1003 conda-forge jedi 0.18.1 pypi_0 pypi jinja2 3.1.2 pypi_0 pypi jpeg 9e h166bdaf_2 conda-forge json5 0.9.5 pypi_0 pypi jsonschema 4.16.0 pypi_0 pypi jupyter 1.0.0 py310hff52083_7 conda-forge jupyter-client 7.4.2 pypi_0 pypi jupyter-console 6.4.4 pypi_0 pypi jupyter-server 1.21.0 pypi_0 pypi jupyter_client 7.4.2 pyhd8ed1ab_0 conda-forge jupyter_console 6.4.4 pyhd8ed1ab_0 conda-forge jupyter_core 4.11.1 py310hff52083_0 conda-forge jupyter_server 1.21.0 pyhd8ed1ab_0 conda-forge jupyterlab 3.4.8 pypi_0 pypi jupyterlab-pygments 0.2.2 pypi_0 pypi jupyterlab-server 2.15.2 pypi_0 pypi jupyterlab-widgets 1.1.1 pypi_0 pypi jupyterlab_pygments 0.2.2 pyhd8ed1ab_0 conda-forge jupyterlab_server 2.15.2 pyhd8ed1ab_0 conda-forge jupyterlab_widgets 1.1.1 pyhd8ed1ab_0 conda-forge keyutils 1.6.1 h166bdaf_0 conda-forge kiwisolver 1.4.4 py310hbf28c38_0 conda-forge krb5 1.19.3 h3790be6_0 conda-forge lcms2 2.12 hddcbb42_0 conda-forge ld_impl_linux-64 2.36.1 hea4e1c9_2 conda-forge lerc 4.0.0 h27087fc_0 conda-forge libarchive 3.5.2 hb890918_3 conda-forge libblas 3.9.0 16_linux64_openblas conda-forge libbrotlicommon 1.0.9 h166bdaf_7 conda-forge libbrotlidec 1.0.9 h166bdaf_7 conda-forge libbrotlienc 1.0.9 h166bdaf_7 conda-forge libcap 2.65 ha37c62d_0 conda-forge libcblas 3.9.0 16_linux64_openblas conda-forge libclang 14.0.6 default_h2e3cab8_0 conda-forge libclang13 14.0.6 default_h3a83d3e_0 conda-forge libcups 2.3.3 h3e49a29_2 conda-forge libcurl 7.85.0 h7bff187_0 conda-forge libdb 6.2.32 h9c3ff4c_0 conda-forge libdeflate 1.14 h166bdaf_0 conda-forge libedit 3.1.20191231 he28a2e2_2 conda-forge libev 4.33 h516909a_1 conda-forge libevent 2.1.10 h9b69904_4 conda-forge libffi 3.4.2 h7f98852_5 conda-forge libflac 1.3.4 h27087fc_0 conda-forge libgcc-ng 12.1.0 h8d9b700_16 conda-forge libgfortran-ng 12.1.0 h69a702a_16 conda-forge libgfortran5 12.1.0 hdcd56e2_16 conda-forge libglib 2.74.0 h7a41b64_0 conda-forge libgomp 12.1.0 h8d9b700_16 conda-forge libiconv 1.17 h166bdaf_0 conda-forge liblapack 3.9.0 16_linux64_openblas conda-forge libllvm14 14.0.6 he0ac6c6_0 conda-forge libmamba 0.27.0 h0dd8ff0_0 conda-forge libmambapy 0.27.0 py310hab0e683_0 conda-forge libnetcdf 4.8.1 nompi_h21705cb_104 conda-forge libnghttp2 1.47.0 hdcd2b5c_1 conda-forge libnsl 2.0.0 h7f98852_0 conda-forge libogg 1.3.4 h7f98852_1 conda-forge libopenblas 0.3.21 pthreads_h78a6416_3 conda-forge libopus 1.3.1 h7f98852_1 conda-forge libpng 1.6.38 h753d276_0 conda-forge libpq 14.5 hd77ab85_0 conda-forge libsndfile 1.0.31 h9c3ff4c_1 conda-forge libsodium 1.0.18 h36c2ea0_1 conda-forge libsolv 0.7.22 h6239696_0 conda-forge libsqlite 3.39.4 h753d276_0 conda-forge libssh2 1.10.0 haa6b8db_3 conda-forge libstdcxx-ng 12.1.0 ha89aaad_16 conda-forge libtiff 4.4.0 h55922b4_4 conda-forge libtool 2.4.6 h9c3ff4c_1008 conda-forge libudev1 249 h166bdaf_4 conda-forge libuuid 2.32.1 h7f98852_1000 conda-forge libvorbis 1.3.7 h9c3ff4c_0 conda-forge libwebp-base 1.2.4 h166bdaf_0 conda-forge libxcb 1.13 h7f98852_1004 conda-forge libxkbcommon 1.0.3 he3ba5ed_0 conda-forge libxml2 2.10.2 h7463322_2 conda-forge libzip 1.9.2 hc869a4a_1 conda-forge libzlib 1.2.12 h166bdaf_4 conda-forge lz4-c 1.9.3 h9c3ff4c_1 conda-forge lzo 2.10 h516909a_1000 conda-forge mamba 0.27.0 py310hf87f941_0 conda-forge markupsafe 2.1.1 py310h5764c6d_1 conda-forge matplotlib-base 3.6.1 py310h8d5ebf3_0 conda-forge matplotlib-inline 0.1.6 pypi_0 pypi mctc-lib 0.3.1 hc3ea6d6_0 conda-forge mdtraj 1.9.7 py310h902c554_2 conda-forge mistune 2.0.4 pypi_0 pypi mmpbsa-py 16.0 pypi_0 pypi munkres 1.1.4 pypi_0 pypi mysql-common 8.0.30 haf5c9bc_1 conda-forge mysql-libs 8.0.30 h28c427c_1 conda-forge nb_conda_kernels 2.3.1 py310hff52083_1 conda-forge nbclassic 0.4.5 pypi_0 pypi nbclient 0.7.0 pypi_0 pypi nbconvert 7.2.1 pypi_0 pypi nbconvert-core 7.2.1 pyhd8ed1ab_0 conda-forge nbconvert-pandoc 7.2.1 pyhd8ed1ab_0 conda-forge nbformat 5.7.0 pypi_0 pypi ncurses 6.3 h27087fc_1 conda-forge nest-asyncio 1.5.6 pypi_0 pypi netcdf-fortran 4.6.0 nompi_hc402ea5_101 conda-forge networkx 2.8.7 pypi_0 pypi nglview 3.0.3 pypi_0 pypi nomkl 1.0 h5ca1d4c_0 conda-forge notebook 6.4.12 pypi_0 pypi notebook-shim 0.1.0 pypi_0 pypi nspr 4.32 h9c3ff4c_1 conda-forge nss 3.78 h2350873_0 conda-forge numexpr 2.8.3 py310hf05e7a9_100 conda-forge numpy 1.23.3 py310h53a5b5f_0 conda-forge ocl-icd 2.3.1 h7f98852_0 conda-forge ocl-icd-system 1.0.0 1 conda-forge openeye-toolkits 2022.1.1 py310_0 openeye openff-amber-ff-ports 0+untagged.24.gf33b5cd.dirty pypi_0 pypi openff-forcefields 2.0.0 pyh6c4a22f_0 conda-forge openff-interchange 0.2.1 pypi_0 pypi openff-interchange-base 0.2.1 pyhd8ed1ab_0 conda-forge openff-toolkit 0.11.1 pypi_0 pypi openff-toolkit-base 0.11.1 pyhd8ed1ab_0 conda-forge openff-units 0.1.8 pypi_0 pypi openff-utilities 0.1.6 pypi_0 pypi openforcefields 0+unknown pypi_0 pypi openjpeg 2.5.0 h7d73246_1 conda-forge openmm 7.7.0 py310hccf1d78_1 conda-forge openssl 1.1.1q h166bdaf_0 conda-forge packaging 21.3 pypi_0 pypi packmol 20.010 h86c2bf4_0 conda-forge packmol-memgen 1.2.3rc0 pypi_0 pypi pandas 1.5.0 py310h769672d_0 conda-forge pandoc 2.19.2 ha770c72_0 conda-forge pandocfilters 1.5.0 pypi_0 pypi panedr 0.5.2 pypi_0 pypi parmed 3.4.3 py310hd8f1fbe_2 conda-forge parso 0.8.3 pypi_0 pypi pbr 5.10.0 pypi_0 pypi pcre2 10.37 hc3806b6_1 conda-forge pdb4amber 22.0 pypi_0 pypi pdbfixer 1.8.1 pypi_0 pypi perl 5.32.1 2_h7f98852_perl5 conda-forge pexpect 4.8.0 pypi_0 pypi pickleshare 0.7.5 pypi_0 pypi pillow 9.2.0 py310hbd86126_2 conda-forge pint 0.19.2 pypi_0 pypi pip 22.2.2 pypi_0 pypi pixman 0.40.0 h36c2ea0_0 conda-forge pkgutil-resolve-name 1.3.10 pypi_0 pypi pluggy 1.0.0 py310hff52083_3 conda-forge ply 3.11 pypi_0 pypi portaudio 19.6.0 h8e90077_6 conda-forge prometheus-client 0.14.1 pypi_0 pypi prometheus_client 0.14.1 pyhd8ed1ab_0 conda-forge prompt-toolkit 3.0.31 pypi_0 pypi prompt_toolkit 3.0.31 hd8ed1ab_0 conda-forge psutil 5.9.2 py310h5764c6d_0 conda-forge pthread-stubs 0.4 h36c2ea0_1001 conda-forge ptyprocess 0.7.0 pypi_0 pypi pulseaudio 14.0 h0868958_9 conda-forge pure-eval 0.2.2 pypi_0 pypi pure_eval 0.2.2 pyhd8ed1ab_0 conda-forge py 1.11.0 pypi_0 pypi pybind11-abi 4 hd8ed1ab_3 conda-forge pycairo 1.21.0 py310h96fc21a_1 conda-forge pycosat 0.6.3 py310h5764c6d_1010 conda-forge pycparser 2.21 pypi_0 pypi pydantic 1.10.2 py310h5764c6d_0 conda-forge pygments 2.13.0 pypi_0 pypi pyopenssl 22.1.0 pypi_0 pypi pyparsing 3.0.9 pypi_0 pypi pyqt 5.15.7 py310h29803b5_0 conda-forge pyqt5-sip 12.11.0 py310hd8f1fbe_0 conda-forge pyrsistent 0.18.1 py310h5764c6d_1 conda-forge pysocks 1.7.1 pypi_0 pypi pytables 3.7.0 py310hb60b9b2_2 conda-forge pytest 7.1.3 py310hff52083_0 conda-forge python 3.10.6 h582c2e5_0_cpython conda-forge python-constraint 1.4.0 pypi_0 pypi python-dateutil 2.8.2 pypi_0 pypi python-fastjsonschema 2.16.2 pyhd8ed1ab_0 conda-forge python_abi 3.10 2_cp310 conda-forge pytraj 2.0.6 pypi_0 pypi pytz 2022.4 pypi_0 pypi pyzmq 24.0.1 py310h330234f_0 conda-forge qt-main 5.15.6 hc525480_0 conda-forge qtconsole 5.3.2 pypi_0 pypi qtconsole-base 5.3.2 pyha770c72_0 conda-forge qtpy 2.2.1 pypi_0 pypi rdkit 2022.03.5 py310h1c297d8_0 conda-forge readline 8.1.2 h0f457ee_0 conda-forge reportlab 3.5.68 py310h94fcab3_1 conda-forge reproc 14.2.3 h7f98852_0 conda-forge reproc-cpp 14.2.3 h9c3ff4c_0 conda-forge requests 2.28.1 pypi_0 pypi ruamel_yaml 0.15.80 py310h5764c6d_1007 conda-forge sander 22.0 pypi_0 pypi scipy 1.9.1 py310hdfbd76f_0 conda-forge send2trash 1.8.0 pypi_0 pypi setuptools 65.4.1 pypi_0 pypi sip 6.6.2 py310hd8f1fbe_0 conda-forge six 1.16.0 pypi_0 pypi smirnoff99frosst 0+unknown pypi_0 pypi snappy 1.1.9 hbd366e4_1 conda-forge sniffio 1.3.0 pypi_0 pypi soupsieve 2.3.2.post1 pypi_0 pypi sqlalchemy 1.4.41 py310h5764c6d_0 conda-forge sqlite 3.39.4 h4ff8645_0 conda-forge stack-data 0.5.1 pypi_0 pypi stack_data 0.5.1 pyhd8ed1ab_0 conda-forge terminado 0.16.0 pypi_0 pypi tinycss2 1.1.1 pypi_0 pypi tk 8.6.12 h27826a3_0 conda-forge toml 0.10.2 pypi_0 pypi tomli 2.0.1 pypi_0 pypi toolz 0.12.0 pypi_0 pypi tornado 6.2 py310h5764c6d_0 conda-forge tqdm 4.64.1 pypi_0 pypi traitlets 5.4.0 pypi_0 pypi typing-extensions 4.4.0 pypi_0 pypi typing_extensions 4.4.0 pyha770c72_0 conda-forge tzdata 2022d h191b570_0 conda-forge unicodedata2 14.0.0 py310h5764c6d_1 conda-forge urllib3 1.26.11 pypi_0 pypi wcwidth 0.2.5 pypi_0 pypi webencodings 0.5.1 pypi_0 pypi websocket-client 1.4.1 pypi_0 pypi wheel 0.37.1 pypi_0 pypi widgetsnbextension 3.6.1 pypi_0 pypi xcb-util 0.4.0 h166bdaf_0 conda-forge xcb-util-image 0.4.0 h166bdaf_0 conda-forge xcb-util-keysyms 0.4.0 h166bdaf_0 conda-forge xcb-util-renderutil 0.3.9 h166bdaf_0 conda-forge xcb-util-wm 0.4.1 h166bdaf_0 conda-forge xmltodict 0.13.0 pypi_0 pypi xorg-kbproto 1.0.7 h7f98852_1002 conda-forge xorg-libice 1.0.10 h7f98852_0 conda-forge xorg-libsm 1.2.3 hd9c2040_1000 conda-forge xorg-libx11 1.7.2 h7f98852_0 conda-forge xorg-libxau 1.0.9 h7f98852_0 conda-forge xorg-libxdmcp 1.1.3 h7f98852_0 conda-forge xorg-libxext 1.3.4 h7f98852_1 conda-forge xorg-libxrender 0.9.10 h7f98852_1003 conda-forge xorg-libxt 1.2.1 h7f98852_2 conda-forge xorg-renderproto 0.11.1 h7f98852_1002 conda-forge xorg-xextproto 7.3.0 h7f98852_1002 conda-forge xorg-xproto 7.0.31 h7f98852_1007 conda-forge xtb 6.5.1 h97a9613_0 conda-forge xtb-python 20.2 py310h5764c6d_5 conda-forge xz 5.2.6 h166bdaf_0 conda-forge yaml 0.2.5 h7f98852_2 conda-forge yaml-cpp 0.7.0 h27087fc_2 conda-forge zeromq 4.3.4 h9c3ff4c_1 conda-forge zipp 3.9.0 pypi_0 pypi zlib 1.2.12 h166bdaf_4 conda-forge zstd 1.5.2 h6239696_4 conda-forge
Additional context
This PDB works with the OpenEye toolkit. The failing nitrogen seems to be in a proline residue. There are proline residues in the T4 protein test case. The only lead I have so far is that the T4 proline is trans whereas the offending proline is cis, but I have no idea why that would matter or even could be detected.
Workaround:
from openff.toolkit import GLOBAL_TOOLKIT_REGISTRY
GLOBAL_TOOLKIT_REGISTRY.registered_toolkits[0]._detect_undefined_stereo = lambda *args, **kwargs: True
Ha, what a surprising find. @Yoshanuikabundi I stumbled upon this question after raising another bug report here #1453. It seems that Molecule.from_polymer_pdb()
is really buggy as it is now. I took your file and used the following strategy to find the bug for your particular case and propose the corresponding fix:
- First, I look at the offending proline itself, isolated from the protein, capped. It can be read by
from_polymer_pdb
. - Then I took successively longer peptide fragment centered at that proline, still readable.
- I started chopping down amino acid from the N end of the protein until at some point the PDB file is no longer readable.
Then I backtracked, and found that the issue is with the disulfide bridge at Cys159 to Cys363. I disconnected this bond and viola, now the file could be read, as shown below:
I have zero idea why having the disulfide bond could lead to an error message for that proline though...
Fixed pdb file attached here. You can do a diff check and see all that I touched is the disulfide bond: protein_fixed.pdb.zip
I'm really sorry for the delay, @ziyuanzhao2000 - crazy week here! This is AWESOME debugging, and your excellent writeup is giving me a bunch of ideas, and the reproducing example is making this easier to track down.
I've been trying to find the root cause of this and haven't gotten there yet. I've deleted a few writeups here from times I thought I'd solved it, none of them actually worked :-(
But in the meantime, I've opened #1460 to enable ignoring this error. I'll push to get that merged and into a release quickly.