#14824 closed defect (fixed)

altloc submodel problems

Reported by: Tristan Croll Owned by: Eric Pettersen
Priority: normal Milestone:
Component: Structure Analysis Version:
Keywords: Cc:
Blocked By: Blocking:
Notify when closed: Platform: all
Project: ChimeraX

Description

The following bug report has been submitted:
Platform:        macOS-14.2.1-arm64-arm-64bit
ChimeraX Version: 1.8.dev202403220040 (2024-03-22 00:40:30 UTC)
Description
Playing around with the new "altloc show" command. This promises to be super-useful for ISOLDE (the inability to see where altlocs are has been one of the big stumbling blocks holding me back from supporting them in model building), but I noticed a few issues:

- (not necessarily an issue with the viewer, but worth noting) if I open 8qe3 and add hydrogens *before* doing `altloc show`, the altloc A HG on Ser325 gets placed really badly (sitting almost on top of the CB)
- more problematically, if I use `addh` after doing `altloc show` then each of the altloc visualisations gets treated like its own standalone model, with three hydrogens added to the N and a spurious hydrogen on the C. 
- (minor stylistic thing) the added hydrogens have the standard bond thickness rather than the thinner bonds chosen for the representation
- somewhat unsurprisingly, my current Clipper implementation doesn't play at all well with it - if the altlocs are shown *before* a model is initialised for Clipper, then each altloc model gets treated as an independent atomic structure and placed in its own symmetry visualisation.

I vaguely recall discussing this before, but I ran into similar issues (when is an AtomicStructure not an AtomicStructure?) when setting up ISOLDE's rotamer preview system way back when. I eventually opted to define a trivial subclass, effectively:

class _RotamerPreview(AtomicStructure):
    pass

... so programmatic decisions could be made on the basis of:

if type(m)==AtomicStructure:
    do_something(m)

Seems to have been a fairly robust approach so far. That way you could e.g. ensure that `addh` only acts on the parent structure, and then copy the added hydrogens on to any extant altloc visualisations via a callback. I think it would also make life easier when adapting Clipper to use them.

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.8.dev202403220040 (2024-03-22)  
© 2016-2024 Regents of the University of California. All rights reserved.  
How to cite UCSF ChimeraX  

> open 8qe3

8qe3 title:  
Crystal structure of human MAT2a bound to S-Adenosylmethionine and Compound 31
[more info...]  
  
Chain information for 8qe3 #1  
---  
Chain | Description | UniProt  
A | S-adenosylmethionine synthase isoform type-2 | METK2_HUMAN 1-395  
  
Non-standard residues in 8qe3 #1  
---  
SAM — S-adenosylmethionine  
U96 —
3-cyclopropyl-6-(2-methylindazol-5-yl)-4-(6-methylpyridin-3-yl)-2~{H}-pyrazolo[4,3-b]pyridin-5-one  
  
8qe3 mmCIF Assemblies  
---  
1| author_and_software_defined_assembly  
  
17 atoms have alternate locations. Control/examine alternate locations with
Altloc Explorer [start tool...] or the altlocs command.  

> hide

> addh

Summary of feedback from adding hydrogens to 8qe3 #1  
---  
warning | Not adding hydrogens to /A GLU 14 CB because it is missing heavy-atom bond partners  
notes | Termini for 8qe3 (#1) chain A determined from SEQRES records  
Chain-initial residues that are actual N termini:  
Chain-initial residues that are not actual N termini: /A GLU 14  
Chain-final residues that are actual C termini: /A TYR 395  
Chain-final residues that are not actual C termini:  
1369 hydrogen bonds  
Adding 'H' to /A GLU 14  
3726 hydrogens added  
  

> altlocs show #1

> view :325

> open 8qe3

8qe3 title:  
Crystal structure of human MAT2a bound to S-Adenosylmethionine and Compound 31
[more info...]  
  
Chain information for 8qe3 #2  
---  
Chain | Description | UniProt  
A | S-adenosylmethionine synthase isoform type-2 | METK2_HUMAN 1-395  
  
Non-standard residues in 8qe3 #2  
---  
SAM — S-adenosylmethionine  
U96 —
3-cyclopropyl-6-(2-methylindazol-5-yl)-4-(6-methylpyridin-3-yl)-2~{H}-pyrazolo[4,3-b]pyridin-5-one  
  
8qe3 mmCIF Assemblies  
---  
1| author_and_software_defined_assembly  
  
17 atoms have alternate locations. Control/examine alternate locations with
Altloc Explorer [start tool...] or the altlocs command.  

> hide #2

> altlocs show #2

> addh #2

Summary of feedback from adding hydrogens to multiple structures  
---  
warning | Not adding hydrogens to 8qe3 #!2/A GLU 14 CB because it is missing heavy-atom bond partners  
notes | Termini for 8qe3 (#2) chain A determined from SEQRES records  
Chain-initial residues that are actual N termini:  
Chain-initial residues that are not actual N termini: 8qe3 #!2/A GLU 14  
Chain-final residues that are actual C termini: 8qe3 #!2/A TYR 395  
Chain-final residues that are not actual C termini:  
1369 hydrogen bonds  
Adding 'H' to 8qe3 #!2/A GLU 14  
Chain-initial residues that are actual N termini:  
Chain-initial residues that are not actual N termini:  
Chain-final residues that are actual C termini:  
Chain-final residues that are not actual C termini:  
0 hydrogen bonds  
Chain-initial residues that are actual N termini:  
Chain-initial residues that are not actual N termini:  
Chain-final residues that are actual C termini:  
Chain-final residues that are not actual C termini:  
0 hydrogen bonds  
Chain-initial residues that are actual N termini:  
Chain-initial residues that are not actual N termini:  
Chain-final residues that are actual C termini:  
Chain-final residues that are not actual C termini:  
0 hydrogen bonds  
Chain-initial residues that are actual N termini:  
Chain-initial residues that are not actual N termini:  
Chain-final residues that are actual C termini:  
Chain-final residues that are not actual C termini:  
0 hydrogen bonds  
Chain-initial residues that are actual N termini:  
Chain-initial residues that are not actual N termini:  
Chain-final residues that are actual C termini:  
Chain-final residues that are not actual C termini:  
0 hydrogen bonds  
Chain-initial residues that are actual N termini:  
Chain-initial residues that are not actual N termini:  
Chain-final residues that are actual C termini:  
Chain-final residues that are not actual C termini:  
0 hydrogen bonds  
3790 hydrogens added  
  

> show #2

> hide #!2 models

> show #1:325

> hide #1:325

> altlocs show #1

> show #!2 models




OpenGL version: 4.1 Metal - 88
OpenGL renderer: Apple M1 Pro
OpenGL vendor: Apple

Python: 3.11.4
Locale: UTF-8
Qt version: PyQt6 6.6.1, Qt 6.6.1
Qt runtime version: 6.6.2
Qt platform: cocoa
Hardware:

    Hardware Overview:

      Model Name: MacBook Pro
      Model Identifier: MacBookPro18,1
      Model Number: Z14Y000GFB/A
      Chip: Apple M1 Pro
      Total Number of Cores: 10 (8 performance and 2 efficiency)
      Memory: 32 GB
      System Firmware Version: 10151.101.3
      OS Loader Version: 10151.61.4

Software:

    System Software Overview:

      System Version: macOS 14.2.1 (23C71)
      Kernel Version: Darwin 23.2.0
      Time since boot: 3 hours, 48 minutes

Graphics/Displays:

    Apple M1 Pro:

      Chipset Model: Apple M1 Pro
      Type: GPU
      Bus: Built-In
      Total Number of Cores: 16
      Vendor: Apple (0x106b)
      Metal Support: Metal 3
      Displays:
        HP Z27k G3:
          Resolution: 3840 x 2160 (2160p/4K UHD 1 - Ultra High Definition)
          UI Looks like: 1920 x 1080 @ 60.00Hz
          Main Display: Yes
          Mirror: Off
          Online: Yes
          Rotation: Supported


Installed Packages:
    alabaster: 0.7.16
    appdirs: 1.4.4
    appnope: 0.1.4
    asttokens: 2.4.1
    Babel: 2.14.0
    beautifulsoup4: 4.12.3
    blockdiag: 3.0.0
    blosc2: 2.0.0
    build: 1.1.1
    certifi: 2023.11.17
    cftime: 1.6.3
    charset-normalizer: 3.3.2
    ChimeraX-AddCharge: 1.5.16
    ChimeraX-AddH: 2.2.5
    ChimeraX-AlignmentAlgorithms: 2.0.1
    ChimeraX-AlignmentHdrs: 3.4.3
    ChimeraX-AlignmentMatrices: 2.1
    ChimeraX-Alignments: 2.12.5
    ChimeraX-AlphaFold: 1.0
    ChimeraX-AltlocExplorer: 1.1.1
    ChimeraX-AmberInfo: 1.0
    ChimeraX-Arrays: 1.1
    ChimeraX-Atomic: 1.56
    ChimeraX-AtomicLibrary: 14.0.2
    ChimeraX-AtomSearch: 2.0.1
    ChimeraX-AxesPlanes: 2.4
    ChimeraX-BasicActions: 1.1.2
    ChimeraX-BILD: 1.0
    ChimeraX-BlastProtein: 2.1.2
    ChimeraX-BondRot: 2.0.4
    ChimeraX-BugReporter: 1.0.1
    ChimeraX-BuildStructure: 2.12.1
    ChimeraX-Bumps: 1.0
    ChimeraX-BundleBuilder: 1.2.2
    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.4
    ChimeraX-ChemGroup: 2.0.1
    ChimeraX-Clashes: 2.2.4
    ChimeraX-Clipper: 0.23.0
    ChimeraX-ColorActions: 1.0.3
    ChimeraX-ColorGlobe: 1.0
    ChimeraX-ColorKey: 1.5.5
    ChimeraX-CommandLine: 1.2.5
    ChimeraX-ConnectStructure: 2.0.1
    ChimeraX-Contacts: 1.0.1
    ChimeraX-Core: 1.8.dev202403220040
    ChimeraX-CoreFormats: 1.2
    ChimeraX-coulombic: 1.4.3
    ChimeraX-Crosslinks: 1.0
    ChimeraX-Crystal: 1.0
    ChimeraX-CrystalContacts: 1.0.1
    ChimeraX-DataFormats: 1.2.3
    ChimeraX-Dicom: 1.2
    ChimeraX-DistMonitor: 1.4.2
    ChimeraX-DockPrep: 1.1.3
    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.1.1
    ChimeraX-Hbonds: 2.4
    ChimeraX-Help: 1.2.2
    ChimeraX-HKCage: 1.3
    ChimeraX-IHM: 1.1
    ChimeraX-ImageFormats: 1.2
    ChimeraX-IMOD: 1.0
    ChimeraX-IO: 1.0.1
    ChimeraX-ISOLDE: 1.8.dev0
    ChimeraX-ItemsInspection: 1.0.1
    ChimeraX-IUPAC: 1.0
    ChimeraX-Label: 1.1.9
    ChimeraX-ListInfo: 1.2.2
    ChimeraX-Log: 1.1.6
    ChimeraX-LookingGlass: 1.1
    ChimeraX-Maestro: 1.9.1
    ChimeraX-Map: 1.1.4
    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.1.3
    ChimeraX-MCopy: 1.0
    ChimeraX-MDcrds: 2.7
    ChimeraX-MedicalToolbar: 1.0.2
    ChimeraX-Meeting: 1.0.1
    ChimeraX-MLP: 1.1.1
    ChimeraX-mmCIF: 2.14
    ChimeraX-MMTF: 2.2
    ChimeraX-Modeller: 1.5.15
    ChimeraX-ModelPanel: 1.5
    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-Neuron: 1.0
    ChimeraX-Nifti: 1.1
    ChimeraX-NMRSTAR: 1.0.2
    ChimeraX-NRRD: 1.1
    ChimeraX-Nucleotides: 2.0.3
    ChimeraX-OpenCommand: 1.13.3
    ChimeraX-PDB: 2.7.5
    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.1
    ChimeraX-PubChem: 2.1
    ChimeraX-QScore: 1.1
    ChimeraX-ReadPbonds: 1.0.1
    ChimeraX-Registration: 1.1.2
    ChimeraX-RemoteControl: 1.0
    ChimeraX-RenderByAttr: 1.3
    ChimeraX-RenumberResidues: 1.1
    ChimeraX-ResidueFit: 1.0.1
    ChimeraX-RestServer: 1.2
    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.2
    ChimeraX-Segger: 1.0
    ChimeraX-Segment: 1.0.1
    ChimeraX-Segmentations: 1.0
    ChimeraX-SelInspector: 1.0
    ChimeraX-SeqView: 2.11.2
    ChimeraX-Shape: 1.0.1
    ChimeraX-Shell: 1.0.1
    ChimeraX-Shortcuts: 1.1.1
    ChimeraX-ShowSequences: 1.0.3
    ChimeraX-SideView: 1.0.1
    ChimeraX-Smiles: 2.1.2
    ChimeraX-SmoothLines: 1.0
    ChimeraX-SpaceNavigator: 1.0
    ChimeraX-StdCommands: 1.16.3
    ChimeraX-STL: 1.0.1
    ChimeraX-Storm: 1.0
    ChimeraX-StructMeasure: 1.2
    ChimeraX-Struts: 1.0.1
    ChimeraX-Surface: 1.0.1
    ChimeraX-SwapAA: 2.0.1
    ChimeraX-SwapRes: 2.5
    ChimeraX-TapeMeasure: 1.0
    ChimeraX-TaskManager: 1.0
    ChimeraX-Test: 1.0
    ChimeraX-Toolbar: 1.1.2
    ChimeraX-ToolshedUtils: 1.2.4
    ChimeraX-Topography: 1.0
    ChimeraX-ToQuest: 1.0
    ChimeraX-Tug: 1.0.1
    ChimeraX-UI: 1.37.1
    ChimeraX-uniprot: 2.3
    ChimeraX-UnitCell: 1.0.1
    ChimeraX-ViewDockX: 1.3.2
    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.3
    ChimeraX-Zone: 1.0.1
    colorama: 0.4.6
    comm: 0.2.2
    contourpy: 1.2.0
    cxservices: 1.2.2
    cycler: 0.12.1
    Cython: 3.0.9
    debugpy: 1.8.1
    decorator: 5.1.1
    docutils: 0.20.1
    executing: 2.0.1
    filelock: 3.13.1
    fonttools: 4.50.0
    funcparserlib: 2.0.0a0
    glfw: 2.7.0
    grako: 3.16.5
    h5py: 3.10.0
    html2text: 2024.2.26
    idna: 3.6
    ihm: 0.43
    imagecodecs: 2024.1.1
    imagesize: 1.4.1
    ipykernel: 6.29.2
    ipython: 8.21.0
    ipywidgets: 8.1.2
    jedi: 0.19.1
    Jinja2: 3.1.3
    jupyter-client: 8.6.0
    jupyter-core: 5.7.2
    jupyterlab-widgets: 3.0.10
    kiwisolver: 1.4.5
    line-profiler: 4.1.2
    lxml: 5.1.0
    lz4: 4.3.3
    MarkupSafe: 2.1.5
    matplotlib: 3.8.3
    matplotlib-inline: 0.1.6
    msgpack: 1.0.8
    ndindex: 1.8
    nest-asyncio: 1.6.0
    netCDF4: 1.6.5
    networkx: 3.2.1
    nibabel: 5.0.1
    nptyping: 2.5.0
    numexpr: 2.9.0
    numpy: 1.26.4
    openvr: 1.26.701
    packaging: 23.2
    ParmEd: 4.2.2
    parso: 0.8.3
    pep517: 0.13.1
    pexpect: 4.9.0
    pillow: 10.2.0
    pip: 24.0
    pkginfo: 1.10.0
    platformdirs: 4.2.0
    prompt-toolkit: 3.0.43
    psutil: 5.9.8
    ptyprocess: 0.7.0
    pure-eval: 0.2.2
    py-cpuinfo: 9.0.0
    pycollada: 0.8
    pydicom: 2.3.0
    pygments: 2.17.2
    pynmrstar: 3.3.4
    pynrrd: 1.0.0
    PyOpenGL: 3.1.7
    PyOpenGL-accelerate: 3.1.7
    pyopenxr: 1.0.3302
    pyparsing: 3.1.2
    pyproject-hooks: 1.0.0
    PyQt6-commercial: 6.6.1
    PyQt6-Qt6: 6.6.2
    PyQt6-sip: 13.6.0
    PyQt6-WebEngine-commercial: 6.6.0
    PyQt6-WebEngine-Qt6: 6.6.2
    python-dateutil: 2.9.0.post0
    pytz: 2024.1
    pyzmq: 25.1.2
    qtconsole: 5.5.1
    QtPy: 2.4.1
    RandomWords: 0.4.0
    requests: 2.31.0
    scipy: 1.12.0
    setuptools: 69.2.0
    setuptools-scm: 8.0.4
    sfftk-rw: 0.8.1
    six: 1.16.0
    snowballstemmer: 2.2.0
    sortedcontainers: 2.4.0
    soupsieve: 2.5
    sphinx: 7.2.6
    sphinx-autodoc-typehints: 2.0.0
    sphinxcontrib-applehelp: 1.0.8
    sphinxcontrib-blockdiag: 3.0.0
    sphinxcontrib-devhelp: 1.0.6
    sphinxcontrib-htmlhelp: 2.0.5
    sphinxcontrib-jsmath: 1.0.1
    sphinxcontrib-qthelp: 1.0.7
    sphinxcontrib-serializinghtml: 1.1.10
    stack-data: 0.6.3
    superqt: 0.6.1
    tables: 3.8.0
    tcia-utils: 1.5.1
    tifffile: 2024.1.30
    tinyarray: 1.2.4
    tornado: 6.4
    traitlets: 5.14.1
    typing-extensions: 4.10.0
    tzdata: 2024.1
    urllib3: 2.2.1
    wcwidth: 0.2.13
    webcolors: 1.13
    wheel: 0.43.0
    wheel-filename: 1.4.1
    widgetsnbextension: 4.0.10

Change History (4)

comment:1 by Eric Pettersen, 19 months ago

Component: UnassignedStructure Analysis
Owner: set to Eric Pettersen
Platform: all
Project: ChimeraX
Status: newaccepted
Summary: ChimeraX bug report submissionaltloc submodel problems

comment:2 by Eric Pettersen, 19 months ago

Fixed the first problem, where altloc A for SER 825 had bad hydrogen positioning

comment:3 by Eric Pettersen, 18 months ago

Okay, fixed the second and third problems as well.

I did not resort to an AtomicStructure subclass, though I could if it would make your life easier for Clipper -- though maybe you would want to just skip structures that have other structures in their parent hierarchy, which would also work to exclude active rotamer models which otherwise will have the same problem...

comment:4 by Eric Pettersen, 18 months ago

Resolution: fixed
Status: acceptedclosed

Barring Tristan requesting a subclass instead of checking the parent hierarchy, fixed.

Note: See TracTickets for help on using tickets.