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

combined_models_in_clipper_then_trimmed.jpg

Attachments (1)

combined_models_in_clipper_then_trimmed.jpg (1.0 MB ) - added by Tristan Croll 3 years ago.
Added by email2trac

Download all attachments as: .zip

Change History (15)

by Tristan Croll, 3 years ago

Added by email2trac

in reply to:  2 comment:1 by Tristan Croll, 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:

in reply to:  3 ; comment:2 by Tristan Croll, 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:

comment:3 by Eric Pettersen, 3 years ago

Component: UnassignedStructure Editing
Owner: set to Eric Pettersen
Platform: all
Project: ChimeraX
Status: newaccepted
Summary: ChimeraX bug report submissionProblems with combine command

comment:4 by Eric Pettersen, 3 years ago

Cc: Tom Goddard 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.

in reply to:  6 comment:5 by Tristan Croll, 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:

comment:6 by Eric Pettersen, 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 Tom Goddard, 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).

https://github.com/RBVI/ChimeraX/blob/develop/src/bundles/atomic_lib/atomic_cpp/atomstruct_cpp/Pseudobond.h

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.

in reply to:  9 comment:8 by Tristan Croll, 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:

comment:9 by Tom Goddard, 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.

in reply to:  11 comment:10 by Tristan Croll, 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:

comment:11 by Tom Goddard, 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.

in reply to:  13 comment:12 by Tristan Croll, 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:

comment:13 by Eric Pettersen, 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 Eric Pettersen, 3 years ago

Resolution: fixed
Status: acceptedclosed

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

Note: See TracTickets for help on using tickets.