#18669 closed defect (nonchimerax)
Excess mmCIF bonds
Reported by: | Tristan Croll | Owned by: | Greg Couch |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | Input/Output | Version: | |
Keywords: | Cc: | Eric Pettersen | |
Blocked By: | Blocking: | ||
Notify when closed: | Platform: | all | |
Project: | ChimeraX |
Description
The following bug report has been submitted: Platform: Windows-10-10.0.26100 ChimeraX Version: 1.10.1 (2025-07-24 20:15:27 UTC) Description I'm reviewing the manuscript for EMProt (http://huanglab.phys.hust.edu.cn/EMProt/), and the combination of its rather barebones mmCIF output (containing only the _atom_site table) and some nasty geometry issues in places has surfaced what I'd call a bug in the ChimeraX mmCIF reader. On opening I see the following warnings in the log: Missing entity information. Treating each chain as a separate entity. Missing or incorrect sequence information. Inferred polymer connectivity. ... which is sensible, except that in the problematic regions the model comes out looking like the attached image, with every atomic clash turned into a covalent bond. If I save the model to PDB, strip out the LINK and CONECT lines and reopen, the connectivity looks normal - so at the very least, the mmCIF and PDB readers give different results for effectively the same input. OpenGL version: 3.3.0 NVIDIA 576.57 OpenGL renderer: NVIDIA GeForce RTX 3070 Laptop GPU/PCIe/SSE2 OpenGL vendor: NVIDIA Corporation Python: 3.11.4 Locale: en_GB.cp1252 Qt version: PyQt6 6.8.1, Qt 6.8.2 Qt runtime version: 6.8.2 Qt platform: windows Manufacturer: HP Model: HP ZBook Studio 15.6 inch G8 Mobile Workstation PC OS: Microsoft Windows 11 Pro (Build 26100) Memory: 34,007,068,672 MaxProcessMemory: 137,438,953,344 CPU: 16 11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz OSLanguage: en-GB Installed Packages: alabaster: 1.0.0 appdirs: 1.4.4 asteval: 1.0.6 asttokens: 3.0.0 babel: 2.17.0 beautifulsoup4: 4.13.3 blockdiag: 3.0.0 blosc2: 3.6.1 build: 1.2.2.post1 certifi: 2025.7.14 cftime: 1.6.4.post1 charset-normalizer: 3.4.2 ChimeraX-AddCharge: 1.5.19 ChimeraX-AddH: 2.2.7 ChimeraX-AlignmentAlgorithms: 2.0.2 ChimeraX-AlignmentHdrs: 3.6.1 ChimeraX-AlignmentMatrices: 2.1 ChimeraX-Alignments: 2.20.2 ChimeraX-AlphaFold: 1.0.1 ChimeraX-AltlocExplorer: 1.1.2 ChimeraX-AmberInfo: 1.0 ChimeraX-Aniso: 1.1.4 ChimeraX-Arrays: 1.1 ChimeraX-Atomic: 1.60.7 ChimeraX-AtomicLibrary: 14.1.19 ChimeraX-AtomSearch: 2.0.1 ChimeraX-AxesPlanes: 2.4 ChimeraX-BasicActions: 1.1.3 ChimeraX-BILD: 1.0 ChimeraX-BlastProtein: 3.0.0 ChimeraX-Boltz: 1.0 ChimeraX-BondRot: 2.0.4 ChimeraX-BugReporter: 1.0.2 ChimeraX-BuildStructure: 2.13.1 ChimeraX-Bumps: 1.0 ChimeraX-BundleBuilder: 1.5.1 ChimeraX-ButtonPanel: 1.0.1 ChimeraX-CageBuilder: 1.0.1 ChimeraX-CellPack: 1.0 ChimeraX-Centroids: 1.4 ChimeraX-ChangeChains: 1.1 ChimeraX-CheckWaters: 1.5 ChimeraX-ChemGroup: 2.0.2 ChimeraX-Clashes: 2.3 ChimeraX-Clipper: 0.25.2 ChimeraX-ColorActions: 1.0.5 ChimeraX-ColorGlobe: 1.0 ChimeraX-ColorKey: 1.5.8 ChimeraX-CommandLine: 1.3 ChimeraX-ConnectStructure: 2.0.1 ChimeraX-Contacts: 1.0.1 ChimeraX-Core: 1.10.1 ChimeraX-CoreFormats: 1.2 ChimeraX-coulombic: 1.4.5 ChimeraX-Crosslinks: 1.0 ChimeraX-Crystal: 1.0 ChimeraX-CrystalContacts: 1.0.1 ChimeraX-DataFormats: 1.2.4 ChimeraX-Dicom: 1.2.7 ChimeraX-DistMonitor: 1.4.2 ChimeraX-DockPrep: 1.1.4 ChimeraX-Dssp: 2.0 ChimeraX-EMDB-SFF: 1.0 ChimeraX-ESMFold: 1.0 ChimeraX-FileHistory: 1.0.1 ChimeraX-FunctionKey: 1.0.1 ChimeraX-Geometry: 1.3 ChimeraX-gltf: 1.0 ChimeraX-Graphics: 1.4.1 ChimeraX-Hbonds: 2.5.1 ChimeraX-Help: 1.3 ChimeraX-HKCage: 1.3 ChimeraX-IHM: 1.1 ChimeraX-ImageFormats: 1.2 ChimeraX-IMOD: 1.0 ChimeraX-IO: 1.0.3 ChimeraX-ISOLDE: 1.10.1 ChimeraX-ItemsInspection: 1.0.1 ChimeraX-IUPAC: 1.0 ChimeraX-KVFinder: 1.6.2 ChimeraX-Label: 1.1.14 ChimeraX-ListInfo: 1.2.2 ChimeraX-Log: 1.2 ChimeraX-LookingGlass: 1.1 ChimeraX-Maestro: 1.9.1 ChimeraX-Map: 1.3 ChimeraX-MapData: 2.0 ChimeraX-MapEraser: 1.0.1 ChimeraX-MapFilter: 2.0.1 ChimeraX-MapFit: 2.0 ChimeraX-MapSeries: 2.1.1 ChimeraX-Markers: 1.0.1 ChimeraX-Mask: 1.0.2 ChimeraX-MatchMaker: 2.2.2 ChimeraX-MCopy: 1.0 ChimeraX-MDcrds: 2.10.1 ChimeraX-MedicalToolbar: 1.1 ChimeraX-Meeting: 1.0.1 ChimeraX-MLP: 1.1.1 ChimeraX-mmCIF: 2.16 ChimeraX-MMTF: 2.2 ChimeraX-ModelArchive: 1.0 ChimeraX-Modeller: 1.5.19 ChimeraX-ModelPanel: 1.5.1 ChimeraX-ModelSeries: 1.0.1 ChimeraX-Mol2: 2.0.3 ChimeraX-Mole: 1.0 ChimeraX-Morph: 1.0.2 ChimeraX-MouseModes: 1.2 ChimeraX-Movie: 1.0 ChimeraX-MutationScores: 1.0 ChimeraX-Neuron: 1.0 ChimeraX-Nifti: 1.2 ChimeraX-NMRSTAR: 1.0.2 ChimeraX-NRRD: 1.2 ChimeraX-Nucleotides: 2.0.3 ChimeraX-OpenCommand: 1.14.1 ChimeraX-OrthoPick: 1.0.1 ChimeraX-PDB: 2.7.10 ChimeraX-PDBBio: 1.0.1 ChimeraX-PDBLibrary: 1.0.4 ChimeraX-PDBMatrices: 1.0 ChimeraX-PickBlobs: 1.0.1 ChimeraX-Positions: 1.0 ChimeraX-PresetMgr: 1.1.3 ChimeraX-ProfileGrids: 1.1.3 ChimeraX-PubChem: 2.2 ChimeraX-ReadPbonds: 1.0.1 ChimeraX-Registration: 1.1.2 ChimeraX-RemoteControl: 1.0 ChimeraX-RenderByAttr: 1.6.3 ChimeraX-RenumberResidues: 1.1 ChimeraX-ResidueFit: 1.0.1 ChimeraX-RestServer: 1.3.1 ChimeraX-RNALayout: 1.0 ChimeraX-RotamerLibMgr: 4.0 ChimeraX-RotamerLibsDunbrack: 2.0 ChimeraX-RotamerLibsDynameomics: 2.0 ChimeraX-RotamerLibsRichardson: 2.0 ChimeraX-SaveCommand: 1.5.1 ChimeraX-SchemeMgr: 1.0 ChimeraX-SDF: 2.0.3 ChimeraX-Segger: 1.0 ChimeraX-Segment: 1.0.1 ChimeraX-Segmentations: 3.5.7 ChimeraX-SelInspector: 1.0 ChimeraX-SeqView: 2.17.1 ChimeraX-Shape: 1.1 ChimeraX-Shell: 1.0.1 ChimeraX-Shortcuts: 1.2.1 ChimeraX-ShowSequences: 1.0.3 ChimeraX-SideView: 1.0.1 ChimeraX-SimilarStructures: 1.0.1 ChimeraX-Smiles: 2.1.2 ChimeraX-SmoothLines: 1.0 ChimeraX-SpaceNavigator: 1.0 ChimeraX-StdCommands: 1.19.1 ChimeraX-STL: 1.0.1 ChimeraX-Storm: 1.0 ChimeraX-StructMeasure: 1.2.1 ChimeraX-Struts: 1.0.1 ChimeraX-Surface: 1.0.1 ChimeraX-SwapAA: 2.0.1 ChimeraX-SwapRes: 2.5.2 ChimeraX-TapeMeasure: 1.0 ChimeraX-TaskManager: 1.0 ChimeraX-Test: 1.0 ChimeraX-Toolbar: 1.2.3 ChimeraX-ToolshedUtils: 1.2.4 ChimeraX-Topography: 1.0 ChimeraX-ToQuest: 1.0 ChimeraX-Tug: 1.0.1 ChimeraX-UI: 1.45.2 ChimeraX-Umap: 1.0 ChimeraX-uniprot: 2.3.1 ChimeraX-UnitCell: 1.0.1 ChimeraX-ViewDockX: 1.4.4 ChimeraX-VIPERdb: 1.0 ChimeraX-Vive: 1.1 ChimeraX-VolumeMenu: 1.0.1 ChimeraX-vrml: 1.0 ChimeraX-VTK: 1.0 ChimeraX-WavefrontOBJ: 1.0 ChimeraX-WebCam: 1.0.2 ChimeraX-WebServices: 1.1.5 ChimeraX-Zone: 1.0.1 colorama: 0.4.6 comm: 0.2.2 comtypes: 1.4.10 contourpy: 1.3.2 coverage: 7.10.0 cxservices: 1.2.3 cycler: 0.12.1 Cython: 3.0.12 debugpy: 1.8.15 decorator: 5.2.1 dill: 0.4.0 docutils: 0.21.2 executing: 2.2.0 filelock: 3.18.0 fonttools: 4.59.0 funcparserlib: 2.0.0a0 glfw: 2.9.0 grako: 3.16.5 h5py: 3.14.0 html2text: 2024.2.26 idna: 3.10 ihm: 2.2 imagecodecs: 2024.6.1 imagesize: 1.4.1 iniconfig: 2.1.0 ipykernel: 6.29.5 ipython: 8.26.0 ipywidgets: 8.1.7 jedi: 0.19.1 Jinja2: 3.1.6 jupyter_client: 8.6.3 jupyter_core: 5.8.1 jupyterlab_widgets: 3.0.15 kiwisolver: 1.4.8 line_profiler: 4.2.0 lmfit: 1.3.4 lxml: 5.3.1 lz4: 4.3.2 MarkupSafe: 3.0.2 matplotlib: 3.10.1 matplotlib-inline: 0.1.7 msgpack: 1.1.0 ndindex: 1.10.0 nest-asyncio: 1.6.0 netCDF4: 1.6.5 networkx: 3.3 nibabel: 5.2.0 nptyping: 2.5.0 numdifftools: 0.9.41 numexpr: 2.11.0 numpy: 1.26.4 nvidia-nvjitlink-cu12: 12.9.86 OpenMM: 8.2.0 OpenMM-CUDA-12: 8.2.0 openvr: 1.26.701 packaging: 24.2 pandas: 2.3.1 ParmEd: 4.2.2 parso: 0.8.4 pep517: 0.13.1 pickleshare: 0.7.5 pillow: 10.4.0 pip: 25.0.1 pkginfo: 1.11.1 platformdirs: 4.3.8 pluggy: 1.6.0 prompt_toolkit: 3.0.51 psutil: 7.0.0 pure_eval: 0.2.3 py-cpuinfo: 9.0.0 pycollada: 0.8 pydicom: 2.4.4 Pygments: 2.18.0 pynmrstar: 3.3.5 pynrrd: 1.0.0 PyOpenGL: 3.1.9 PyOpenGL-accelerate: 3.1.9 pyopenxr: 1.1.4501 pyparsing: 3.2.3 pyproject_hooks: 1.2.0 PyQt6-commercial: 6.8.1 PyQt6-Qt6: 6.8.2 PyQt6-WebEngine-commercial: 6.8.0 PyQt6-WebEngine-Qt6: 6.8.2 PyQt6_sip: 13.10.0 pytest: 8.4.1 pytest-cov: 6.2.1 python-dateutil: 2.9.0.post0 pytz: 2025.2 pywin32: 310 pyzmq: 27.0.0 qtconsole: 5.5.2 QtPy: 2.4.3 qtshim: 1.1 RandomWords: 0.4.0 requests: 2.32.3 roman-numerals-py: 3.1.0 scipy: 1.14.0 setuptools: 78.1.0 sfftk-rw: 0.8.1 six: 1.16.0 snowballstemmer: 3.0.1 sortedcontainers: 2.4.0 soupsieve: 2.7 Sphinx: 8.2.3 sphinx-autodoc-typehints: 3.1.0 sphinxcontrib-applehelp: 2.0.0 sphinxcontrib-blockdiag: 3.0.0 sphinxcontrib-devhelp: 2.0.0 sphinxcontrib-htmlhelp: 2.1.0 sphinxcontrib-jsmath: 1.0.1 sphinxcontrib-qthelp: 2.0.0 sphinxcontrib-serializinghtml: 2.0.0 stack-data: 0.6.3 superqt: 0.7.1 tables: 3.10.2 tcia_utils: 1.5.1 tifffile: 2025.3.13 tinyarray: 1.2.4 tornado: 6.5.1 traitlets: 5.14.3 typing_extensions: 4.14.1 tzdata: 2025.2 uncertainties: 3.2.3 urllib3: 2.5.0 wcwidth: 0.2.13 webcolors: 24.11.1 wheel: 0.45.1 wheel-filename: 1.4.2 widgetsnbextension: 4.0.14 WMI: 1.5.1 File attachment: bad_connectivity.jpg
Attachments (2)
Change History (16)
by , 8 weeks ago
Attachment: | bad_connectivity.jpg added |
---|
comment:1 by , 7 weeks ago
Cc: | added |
---|---|
Component: | Unassigned → Input/Output |
Owner: | set to |
Platform: | → all |
Project: | → ChimeraX |
Status: | new → assigned |
Summary: | ChimeraX bug report submission → Excess mmCIF bonds |
comment:2 by , 7 weeks ago
Can you add an example mmCIF file that causes the problem? If I had to guess, perhaps everything is in one residue?
comment:3 by , 7 weeks ago
I guess there's no harm in that... look in the vicinity of /A:676. On Tue, Sep 2, 2025 at 6:10 PM ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu> wrote: > >
comment:4 by , 7 weeks ago
Resolution: | → nonchimerax |
---|---|
Status: | assigned → closed |
So that's a bug in the data, not the connectivity. Chain a and chain b overlap. "hide /b:75-76" to see that connectivity is correct. Then fix the coordinates in the mmCIF file.
comment:5 by , 8 days ago
For what it's worth, I'm currently at a workshop run by CCP-EM, where a number of students are using models built by ModelAngelo (run via the CCP-EM GUI Doppio). If they click the Doppio "Open in ChimeraX" button it passes through the output as a mmCIF file... in almost all cases there are at least a few sites with poor geometry that lead to the same excess-bonds pathologies I flagged here. On Tue, Sep 2, 2025 at 11:01 PM ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu> wrote: > > > >
comment:6 by , 7 days ago
Example please. In the case reported here earlier, the excessive bonds were an illusion due to overlapping models.
comment:8 by , 7 days ago
Unfortunately I don’t have one to give - but I have asked some of the attendees if they could submit an example. Root cause appears to be the same - where local resolution is poor ModelAngelo starts getting a bit rough, leading to clashing residues, distorted peptide bonds etc. These sort of problems arise quite commonly in different experimental reconstruction tools, and are often quite trivial to fix in something like ISOLDE - but in order to do so right now, one would first have to find and manually delete all the spurious bonds. On Wed, 15 Oct 2025 at 18:11, ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu> wrote: > >
comment:9 by , 7 days ago
In the example you provided, the bonds were correct. They only appeared to be spurious because the residues from two different chains overlapped. So the correct manual intervention would have been to move the two chains apart -- no bond deleting needed. Of course, it would be better if the modelling didn't generate overlapping residues in the first place.
comment:10 by , 7 days ago
In this scenario, moving the chains apart isn’t really an option - they’re traced into experimental density maps, and in general *most* residues are exactly where they need to be - things just get messy in places where the maps are messy. In a perfect world they’d be avoided, but sadly our world is far from perfect. The bonds I’m talking about are, I guess, “correct” in the sense of “these atoms are closer than the limit of covalent bonding range” but most of them are chemical impossibilities. As well as bonds between clashing residues on opposing chains, I also see things like the peptide bond nitrogen *and* carbon both bonding to the carbonyl oxygen. I realise a big part of the problem is that these mmCIF files are just “undercooked” - missing information that according to the mmCIF definition should be provided. After all, models from AlphaFold-DB also often have similar severe clashes, but those *don’t* get turned into bonds. I guess an alternative solution (that the CCP-EM team would likely be happy to address) is to improve on that… question is, what details need to be added to the mmCIF to avoid this behaviour? On Wed, 15 Oct 2025 at 18:32, ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu> wrote: > >
comment:11 by , 7 days ago
I don't think that is mmCIF's responsibility. The modelling tool shouldn't place two residues in the same density. Or the modelling tool could give the the atoms alternate locations, so only one is shown at a time. In this scenario, ChimeraX would probably need to be modified to understand that use of alternate locations for conflicting residues.
comment:12 by , 7 days ago
It’s not generally a case of putting two residues in the *same* density - just getting the geometry a bit off to the point where nonbonded atoms approach a bit more closely than they should. Unfortunately I’m totally run off my feet with travel for the next couple of weeks, so it’s unlikely I’m going to be able to generate an example case for you - but I’ll give the CCPEM team a nudge. On Wed, 15 Oct 2025 at 19:19, ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu> wrote: > >
comment:13 by , 7 days ago
Greg, the mmCIF code might be better served by using pdb_lib's connect_structure, which follows along chains, connecting standard residues up correctly from template connectivity and also the inter-residue peptide bonds. You could then follow that up with structure.connect_structure() which would find inter-chain connectivity such as disulphide bonds, and would not add bonds to already saturated atoms. We could discuss tomorrow.
Added by email2trac