Opened 3 years ago
Closed 3 years ago
#8263 closed defect (fixed)
Problems with combine command
Reported by: | Tristan Croll | Owned by: | Eric Pettersen |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | Structure Editing | Version: | |
Keywords: | Cc: | Tom Goddard | |
Blocked By: | Blocking: | ||
Notify when closed: | Platform: | all | |
Project: | ChimeraX |
Description
The following bug report has been submitted: Platform: Linux-5.15.0-56-generic-x86_64-with-glibc2.35 ChimeraX Version: 1.5 (2022-11-24 00:03:27 UTC) Description Repeated use of the combine command on the same group of models does something very strange. In this example the first use seems to go fine*, but on the second call the resulting model has the chains all moved around - chain B is overlaid on chain A, and I can't work out exactly how the others have moved. * Mostly fine. If I initialise the combined model in Clipper, then delete the low-confidence crud with "delete #4@@bfactor<50" the missing-structure pseudobonds point out into random positions in space, far from where any atoms are (or were) - see attached image. Log: > isolde shorthand Initialising ISOLDE-specific command aliases: Alias Equivalent full command ------------------------------------------------- st isolde step {arguments} aw isolde add water {arguments} awsf isolde add water {arguments} sim false al isolde add ligand {arguments} aa isolde add aa $1 sel {arguments} ht isolde mod his sel {arguments} so setattr sel atoms occupancy {arguments} ab isolde adjust bfactors {arguments} ss isolde sim start sel rt isolde release torsions sel {arguments} rd isolde release distances sel {arguments} ra rd; rt pf isolde pepflip sel cf isolde cisflip sel cbb color bfactor {arguments} cbo color byattr occupancy {arguments} cbc color {arguments} bychain; color {arguments} byhet cs clipper set contourSensitivity {arguments} UCSF ChimeraX version: 1.5 (2022-11-24) © 2016-2022 Regents of the University of California. All rights reserved. How to cite UCSF ChimeraX > open 7y04 format mmcif fromDatabase pdb 7y04 title: Hsp90-AhR-p23 complex [more info...] Chain information for 7y04 #1 --- Chain | Description | UniProt A B | Heat shock protein HSP 90-beta | HS90B_MOUSE C D | Prostaglandin E synthase 3 | TEBP_MOUSE E | Aryl hydrocarbon receptor | AHR_MOUSE Non-standard residues in 7y04 #1 --- ADP — adenosine-5'-diphosphate BEF — beryllium trifluoride ion > alphafold match #1 trim false 3 AlphaFold models found using UniProt identifiers: P11499 (chains A,B), Q9R0Q7 (chains C,D), P30561 (chain E) AlphaFold chains matching 7y04 --- Chain| UniProt Name| UniProt Id| RMSD| Length| Seen| % Id E | AHR_MOUSE | P30561 | 6.43 | 848 | 9 | 100 A | HS90B_MOUSE | P11499 | 1.42 | 724 | 623 | 100 B | HS90B_MOUSE | P11499 | 1.39 | 724 | 621 | 100 C | TEBP_MOUSE | Q9R0Q7 | 0.87 | 160 | 111 | 100 D | TEBP_MOUSE | Q9R0Q7 | 0.81 | 160 | 111 | 100 Opened 5 AlphaFold models > hide #!1 models > combine #2 [Repeated 1 time(s)] > hide #!2 models > hide #3 models > color bychain > hide #4 models > show #3 models > show #4 models > hide #4 models > show #4 models > hide #4 models > show #4 models > hide #4 models > show #4 models > hide #4 models > show #4 models > hide #4 models > show #4 models > ~cartoon @@bfactor<60 > matchmaker #4/B to #3/B Parameters --- Chain pairing | bb Alignment algorithm | Needleman-Wunsch Similarity matrix | BLOSUM-62 SS fraction | 0.3 Gap open (HH/SS/other) | 18/18/6 Gap extend | 1 SS matrix | | | H | S | O ---|---|---|--- H | 6 | -9 | -6 S | | 6 | -6 O | | | 4 Iteration cutoff | 2 Matchmaker combination, chain B (#3) with combination, chain B (#4), sequence alignment score = 2890.6 RMSD between 724 pruned atom pairs is 0.000 angstroms; (across all 724 pairs: 0.000) > matchmaker #4/B to #3/A Parameters --- Chain pairing | bb Alignment algorithm | Needleman-Wunsch Similarity matrix | BLOSUM-62 SS fraction | 0.3 Gap open (HH/SS/other) | 18/18/6 Gap extend | 1 SS matrix | | | H | S | O ---|---|---|--- H | 6 | -9 | -6 S | | 6 | -6 O | | | 4 Iteration cutoff | 2 Matchmaker combination, chain A (#3) with combination, chain B (#4), sequence alignment score = 2890.6 RMSD between 724 pruned atom pairs is 0.000 angstroms; (across all 724 pairs: 0.000) OpenGL version: 3.3.0 NVIDIA 515.86.01 OpenGL renderer: NVIDIA GeForce RTX 3070/PCIe/SSE2 OpenGL vendor: NVIDIA Corporation Python: 3.9.11 Locale: en_GB.UTF-8 Qt version: PyQt6 6.3.1, Qt 6.3.1 Qt runtime version: 6.3.2 Qt platform: xcb XDG_SESSION_TYPE=x11 DESKTOP_SESSION=ubuntu XDG_SESSION_DESKTOP=ubuntu XDG_CURRENT_DESKTOP=ubuntu:GNOME DISPLAY=:1 Manufacturer: Dell Inc. Model: XPS 8950 OS: Ubuntu 22.04 Jammy Jellyfish Architecture: 64bit ELF Virtual Machine: none CPU: 20 12th Gen Intel(R) Core(TM) i7-12700 Cache Size: 25600 KB Memory: total used free shared buff/cache available Mem: 31Gi 7.6Gi 12Gi 270Mi 11Gi 22Gi Swap: 2.0Gi 0B 2.0Gi Graphics: 0000:01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA104 [GeForce RTX 3070 Lite Hash Rate] [10de:2488] (rev a1) Subsystem: Dell GA104 [GeForce RTX 3070 Lite Hash Rate] [1028:c903] Kernel driver in use: nvidia Installed Packages: alabaster: 0.7.12 appdirs: 1.4.4 asttokens: 2.1.0 Babel: 2.11.0 backcall: 0.2.0 blockdiag: 3.0.0 build: 0.8.0 certifi: 2022.9.24 cftime: 1.6.2 charset-normalizer: 2.1.1 ChimeraX-AddCharge: 1.4 ChimeraX-AddH: 2.2.1 ChimeraX-AlignmentAlgorithms: 2.0 ChimeraX-AlignmentHdrs: 3.2.1 ChimeraX-AlignmentMatrices: 2.0 ChimeraX-Alignments: 2.6 ChimeraX-AlphaFold: 1.0 ChimeraX-AltlocExplorer: 1.0.3 ChimeraX-AmberInfo: 1.0 ChimeraX-Arrays: 1.0 ChimeraX-Atomic: 1.41.5 ChimeraX-AtomicLibrary: 8.0.3 ChimeraX-AtomSearch: 2.0.1 ChimeraX-AxesPlanes: 2.3 ChimeraX-BasicActions: 1.1.2 ChimeraX-BILD: 1.0 ChimeraX-BlastProtein: 2.1.2 ChimeraX-BondRot: 2.0.1 ChimeraX-BugReporter: 1.0.1 ChimeraX-BuildStructure: 2.7.1 ChimeraX-Bumps: 1.0 ChimeraX-BundleBuilder: 1.2 ChimeraX-ButtonPanel: 1.0.1 ChimeraX-CageBuilder: 1.0.1 ChimeraX-CellPack: 1.0 ChimeraX-Centroids: 1.3.1 ChimeraX-ChangeChains: 1.0.2 ChimeraX-CheckWaters: 1.3 ChimeraX-ChemGroup: 2.0 ChimeraX-Clashes: 2.2.4 ChimeraX-Clipper: 0.19.0 ChimeraX-ColorActions: 1.0.3 ChimeraX-ColorGlobe: 1.0 ChimeraX-ColorKey: 1.5.2 ChimeraX-CommandLine: 1.2.4 ChimeraX-ConnectStructure: 2.0.1 ChimeraX-Contacts: 1.0.1 ChimeraX-Core: 1.5 ChimeraX-CoreFormats: 1.1 ChimeraX-coulombic: 1.3.2 ChimeraX-Crosslinks: 1.0 ChimeraX-Crystal: 1.0 ChimeraX-CrystalContacts: 1.0.1 ChimeraX-DataFormats: 1.2.2 ChimeraX-Dicom: 1.1 ChimeraX-DistMonitor: 1.3 ChimeraX-DockPrep: 1.0 ChimeraX-Dssp: 2.0 ChimeraX-EMDB-SFF: 1.0 ChimeraX-ExperimentalCommands: 1.0 ChimeraX-FileHistory: 1.0.1 ChimeraX-FunctionKey: 1.0.1 ChimeraX-Geometry: 1.2 ChimeraX-gltf: 1.0 ChimeraX-Graphics: 1.1 ChimeraX-Hbonds: 2.4 ChimeraX-Help: 1.2.1 ChimeraX-HKCage: 1.3 ChimeraX-IHM: 1.1 ChimeraX-ImageFormats: 1.2 ChimeraX-IMOD: 1.0 ChimeraX-IO: 1.0.1 ChimeraX-ISOLDE: 1.5 ChimeraX-ItemsInspection: 1.0.1 ChimeraX-Label: 1.1.7 ChimeraX-LinuxSupport: 1.0.1 ChimeraX-ListInfo: 1.1.1 ChimeraX-Log: 1.1.5 ChimeraX-LookingGlass: 1.1 ChimeraX-Maestro: 1.8.2 ChimeraX-Map: 1.1.2 ChimeraX-MapData: 2.0 ChimeraX-MapEraser: 1.0.1 ChimeraX-MapFilter: 2.0 ChimeraX-MapFit: 2.0 ChimeraX-MapSeries: 2.1.1 ChimeraX-Markers: 1.0.1 ChimeraX-Mask: 1.0.1 ChimeraX-MatchMaker: 2.0.9 ChimeraX-MDcrds: 2.6 ChimeraX-MedicalToolbar: 1.0.2 ChimeraX-Meeting: 1.0.1 ChimeraX-MLP: 1.1 ChimeraX-mmCIF: 2.8 ChimeraX-MMTF: 2.2 ChimeraX-Modeller: 1.5.6 ChimeraX-ModelPanel: 1.3.6 ChimeraX-ModelSeries: 1.0.1 ChimeraX-Mol2: 2.0 ChimeraX-Mole: 1.0 ChimeraX-Morph: 1.0.1 ChimeraX-MouseModes: 1.1.1 ChimeraX-Movie: 1.0 ChimeraX-Neuron: 1.0 ChimeraX-Nucleotides: 2.0.3 ChimeraX-OpenCommand: 1.9.1 ChimeraX-PDB: 2.6.8 ChimeraX-PDBBio: 1.0 ChimeraX-PDBLibrary: 1.0.2 ChimeraX-PDBMatrices: 1.0 ChimeraX-PickBlobs: 1.0.1 ChimeraX-Positions: 1.0 ChimeraX-PresetMgr: 1.1 ChimeraX-PubChem: 2.1 ChimeraX-ReadPbonds: 1.0.1 ChimeraX-Registration: 1.1.1 ChimeraX-RemoteControl: 1.0 ChimeraX-RenumberResidues: 1.1 ChimeraX-ResidueFit: 1.0.1 ChimeraX-RestServer: 1.1 ChimeraX-RNALayout: 1.0 ChimeraX-RotamerLibMgr: 2.0.1 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 ChimeraX-Segger: 1.0 ChimeraX-Segment: 1.0 ChimeraX-SelInspector: 1.0 ChimeraX-SeqView: 2.7.2 ChimeraX-Shape: 1.0.1 ChimeraX-Shell: 1.0.1 ChimeraX-Shortcuts: 1.1.1 ChimeraX-ShowSequences: 1.0.1 ChimeraX-SideView: 1.0.1 ChimeraX-Smiles: 2.1 ChimeraX-SmoothLines: 1.0 ChimeraX-SpaceNavigator: 1.0 ChimeraX-StdCommands: 1.10 ChimeraX-STL: 1.0 ChimeraX-Storm: 1.0 ChimeraX-StructMeasure: 1.1 ChimeraX-Struts: 1.0.1 ChimeraX-Surface: 1.0 ChimeraX-SwapAA: 2.0.1 ChimeraX-SwapRes: 2.1.3 ChimeraX-TapeMeasure: 1.0 ChimeraX-Test: 1.0 ChimeraX-Toolbar: 1.1.2 ChimeraX-ToolshedUtils: 1.2.1 ChimeraX-Tug: 1.0.1 ChimeraX-UI: 1.24.3 ChimeraX-uniprot: 2.2.1 ChimeraX-UnitCell: 1.0.1 ChimeraX-ViewDockX: 1.1.4 ChimeraX-VIPERdb: 1.0 ChimeraX-Vive: 1.1 ChimeraX-VolumeMenu: 1.0.1 ChimeraX-VTK: 1.0 ChimeraX-WavefrontOBJ: 1.0 ChimeraX-WebCam: 1.0.1 ChimeraX-WebServices: 1.1.0 ChimeraX-Zone: 1.0.1 colorama: 0.4.5 cxservices: 1.2 cycler: 0.11.0 Cython: 0.29.32 debugpy: 1.6.4 decorator: 5.1.1 distro: 1.7.0 docutils: 0.19 entrypoints: 0.4 executing: 1.2.0 filelock: 3.7.1 fonttools: 4.38.0 funcparserlib: 1.0.1 grako: 3.16.5 h5py: 3.7.0 html2text: 2020.1.16 idna: 3.4 ihm: 0.33 imagecodecs: 2022.7.31 imagesize: 1.4.1 importlib-metadata: 5.1.0 ipykernel: 6.15.3 ipython: 8.4.0 ipython-genutils: 0.2.0 jedi: 0.18.1 Jinja2: 3.1.2 jupyter-client: 7.3.4 jupyter-core: 5.1.0 kiwisolver: 1.4.4 line-profiler: 3.5.1 lxml: 4.9.1 lz4: 4.0.2 MarkupSafe: 2.1.1 matplotlib: 3.5.2 matplotlib-inline: 0.1.6 msgpack: 1.0.4 nest-asyncio: 1.5.6 netCDF4: 1.6.0 networkx: 2.8.5 numexpr: 2.8.4 numpy: 1.23.1 openvr: 1.23.701 packaging: 21.3 ParmEd: 3.4.3 parso: 0.8.3 pep517: 0.13.0 pexpect: 4.8.0 pickleshare: 0.7.5 Pillow: 9.2.0 pip: 22.2.2 pkginfo: 1.8.3 platformdirs: 2.5.4 prompt-toolkit: 3.0.33 psutil: 5.9.1 ptyprocess: 0.7.0 pure-eval: 0.2.2 pycollada: 0.7.2 pydicom: 2.3.0 Pygments: 2.12.0 PyOpenGL: 3.1.5 PyOpenGL-accelerate: 3.1.5 pyparsing: 3.0.9 PyQt6-commercial: 6.3.1 PyQt6-Qt6: 6.3.2 PyQt6-sip: 13.4.0 PyQt6-WebEngine-commercial: 6.3.1 PyQt6-WebEngine-Qt6: 6.3.2 python-dateutil: 2.8.2 pytz: 2022.6 pyzmq: 24.0.1 qtconsole: 5.3.1 QtPy: 2.3.0 RandomWords: 0.4.0 rdkit-pypi: 2022.9.2 requests: 2.28.1 scipy: 1.9.0 setuptools: 65.1.1 sfftk-rw: 0.7.2 six: 1.16.0 snowballstemmer: 2.2.0 sortedcontainers: 2.4.0 Sphinx: 5.1.1 sphinx-autodoc-typehints: 1.19.1 sphinxcontrib-applehelp: 1.0.2 sphinxcontrib-blockdiag: 3.0.0 sphinxcontrib-devhelp: 1.0.2 sphinxcontrib-htmlhelp: 2.0.0 sphinxcontrib-jsmath: 1.0.1 sphinxcontrib-qthelp: 1.0.3 sphinxcontrib-serializinghtml: 1.1.5 stack-data: 0.6.2 tables: 3.7.0 tifffile: 2022.7.31 tinyarray: 1.2.4 tomli: 2.0.1 tornado: 6.2 traitlets: 5.3.0 urllib3: 1.26.13 wcwidth: 0.2.5 webcolors: 1.12 wheel: 0.37.1 wheel-filename: 1.4.1 zipp: 3.11.0 File attachment: combined_models_in_clipper_then_trimmed.jpg
Attachments (1)
Change History (15)
by , 3 years ago
Attachment: | combined_models_in_clipper_then_trimmed.jpg added |
---|
comment:1 by , 3 years ago
The missing-structure pseudobonds correct themselves when the end-point atoms are shown, but go back to being wrong when they're hidden (by Clipper setting a bit in their 'hide' properties). If both `display` and `hide` are false for at least one endpoint atom then the pseudobond is not displayed, but if `hide` evaluates to True then the pseudobond is displayed regardless. On Thu, Jan 5, 2023 at 2:07 PM ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu> wrote:
follow-up: 1 comment:2 by , 3 years ago
If I hide the cartoon, the pseudobonds go back to being in the right place (but are still displayed for all bonds where both endpoint atoms have `display` False and `hide` True). On Thu, Jan 5, 2023 at 2:21 PM ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu> wrote:
follow-up: 2 comment:3 by , 3 years ago
Component: | Unassigned → Structure Editing |
---|---|
Owner: | set to |
Platform: | → all |
Project: | → ChimeraX |
Status: | new → accepted |
Summary: | ChimeraX bug report submission → Problems with combine command |
comment:4 by , 3 years ago
Cc: | added |
---|
I can replicate the weirdness with the second 'combine' and will look into it.
Pseudobonds will always be drawn if 'hide' is True because the assumption is that setting hide True means you are depicting the atom by other means (e.g. a ribbon or stylized nucleotides), and the pseudobond end points will go to Atom.effective_coord(). Clipper should not be setting hide True If it is not depicting the atoms in any way.
comment:5 by , 3 years ago
From discussions with Conrad way back when, my understanding is that the hide property was created as a bit field rather than a Boolean for this reason - so each use case can check whether atoms are hidden for compatible reasons by &ing with the relevant bits (iirc, HIDE_ISOLDE is 0x04). On Thu, 5 Jan 2023 at 18:47, ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu> wrote:
follow-up: 5 comment:6 by , 3 years ago
Right. I guess I don't know the drawing logic when multiple hide bits are set (Tom?). Certainly if just HIDE_RIBBON is set, the pseudobond will be drawn.
comment:7 by , 3 years ago
The shown method of the C++ Pseudobond class determines whether a pseudobond is rendered. Here is the code for it. It treats Atom.hide() as a boolean even though it is an int (bit field).
class Pseudobond bool shown() const { return (visible() && (_shown_when_atoms_hidden ? ((atoms()[0]->display() || atoms()[0]->hide()) && (atoms()[1]->display() || atoms()[1]->hide())) : ((atoms()[0]->display() && !atoms()[0]->hide()) && (atoms()[1]->display() && !atoms()[1]->hide())))); }
In cymol.pyx the following HIDE_* bits are defined
https://github.com/RBVI/ChimeraX/blob/develop/src/bundles/atomic/atomic_cpp/cymol.pyx
cdef class CyAtom: HIDE_RIBBON = 0x1 HIDE_ISOLDE = 0x2 HIDE_NUCLEOTIDE = 0x4
I thought the semantics of the hide bits were that it indicates the atom is shown in an alternative representation (e.g. ribbon, nucleotide), so pseudobonds should be drawn. I don't know what HIDE_ISOLDE means.
comment:8 by , 3 years ago
In hindsight it probably should have been named HIDE_CLIPPER, since in the end that’s the only place I ended up using it… but it’s how Clipper hides atoms outside its spotlight region (or outside the mask region when masking to a selection). Done that way because it’s really convenient both in terms of code complexity and computational cost to have it independent of the `display` flag - otherwise Clipper would have to independently track which atoms (e.g. hydrogens) the user has deliberately hidden. On Thu, 5 Jan 2023 at 20:29, ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu> wrote:
follow-up: 8 comment:9 by , 3 years ago
I see. So clipper is not following the semantics of Atom.hide, just using it because it is convenient, and mostly works. Hopefully you have some solution for avoiding the pseudobond display problems that result from this creative use of Atom.hide.
comment:10 by , 3 years ago
I can't remember for certain, but I half suspect this usage might predate the existence of chain-break pseudobonds... would have been around early-mid 2017. Was quite a bit of discussion about it at the time, mostly with Conrad. On Thu, Jan 5, 2023 at 8:44 PM ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu> wrote:
follow-up: 10 comment:11 by , 3 years ago
I see, so it is chain break pseudobonds that you have trouble with. There are of course other kinds of pseudobonds (e.g. metal coordination, hydrogen bonds) that are going to present the same problem. The Atom hide bit or boolean comes from Chimera and has always had the semantics that it indicates the atom is shown in a different style and that pseudobonds should be shown to the effective atom position.
comment:12 by , 3 years ago
OK, I definitely wasn't aware of that. I've noticed the metal-coordination and base-pair pseudobonds continuing to display in a model using Clipper, but it's never been a huge bother - in some ways they're actually quite helpful to show the locations of those sites. On Thu, Jan 5, 2023 at 8:59 PM ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu> wrote:
follow-up: 12 comment:13 by , 3 years ago
Pseudobonds also have "hide" bits, so you could go whole hog and set the ISOLDE hide bit on pseudobonds where an end point atom has that bit set. Kind of going down the same wrong path, but better than what you have now.
comment:14 by , 3 years ago
Resolution: | → fixed |
---|---|
Status: | accepted → closed |
Structure::_copy(), which combine uses, transforms coordinates *in place*, which astonishingly does not visibly affect the source model. Now it copies the coordinates first.
Fix: https://github.com/RBVI/ChimeraX/commit/6c728898fc9e47890c9f2d83534c021e484e0bfd
Added by email2trac