Opened 5 years ago

Closed 5 years ago

#3764 closed defect (fixed)

Label mouse mode with blank chain id logs bad command atom spec

Reported by: goddard@… Owned by: Tom Goddard
Priority: normal Milestone:
Component: Command Line Version:
Keywords: Cc: Elaine Meng, pett
Blocked By: Blocking:
Notify when closed: Platform: all
Project: ChimeraX

Description

The following bug report has been submitted:
Platform:        Windows-10-10.0.18362
ChimeraX Version: 1.1 (2020-09-09 22:22:27 UTC)
Description
Label residue mouse mode logs a command with a space for chain id that apparently is an illegal atom specifier.  This is using core.commands.residue_specifier() to produce the illegal atom spec.


Log:
UCSF ChimeraX version: 1.1 (2020-09-09)  
© 2016-2020 Regents of the University of California. All rights reserved.  
How to cite UCSF ChimeraX  

> open 2719 format sdf fromDatabase pubchem

PubChem entry 2719  
  

> ui mousemode right label

> label #1/ :1

Expected one of 'atoms', 'bonds', 'pseudobonds', or 'residues' or a keyword  




OpenGL version: 3.3.0 NVIDIA 398.35
OpenGL renderer: GeForce GTX 1070 with Max-Q Design/PCIe/SSE2
OpenGL vendor: NVIDIA Corporation
Manufacturer: Micro-Star International Co., Ltd.
Model: GS65 Stealth Thin 8RF
OS: Microsoft Windows 10 Pro (Build 18362)
Memory: 34,195,668,992
MaxProcessMemory: 137,438,953,344
CPU: 12 Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz"
PyQt version: 5.12.3
Compiled Qt version: 5.12.4
Runtime Qt version: 5.12.9
Installed Packages:
    alabaster: 0.7.12
    appdirs: 1.4.4
    Babel: 2.8.0
    backcall: 0.2.0
    blockdiag: 2.0.1
    certifi: 2020.6.20
    chardet: 3.0.4
    ChimeraX-AddH: 2.1.1
    ChimeraX-AlignmentAlgorithms: 2.0
    ChimeraX-AlignmentHdrs: 3.2
    ChimeraX-AlignmentMatrices: 2.0
    ChimeraX-Alignments: 2.1
    ChimeraX-Arrays: 1.0
    ChimeraX-Atomic: 1.6.1
    ChimeraX-AtomSearch: 2.0
    ChimeraX-AxesPlanes: 2.0
    ChimeraX-BasicActions: 1.1
    ChimeraX-BILD: 1.0
    ChimeraX-BlastProtein: 1.0.1
    ChimeraX-BondRot: 2.0
    ChimeraX-BugReporter: 1.0
    ChimeraX-BuildStructure: 2.0
    ChimeraX-Bumps: 1.0
    ChimeraX-BundleBuilder: 1.0
    ChimeraX-ButtonPanel: 1.0
    ChimeraX-CageBuilder: 1.0
    ChimeraX-CellPack: 1.0
    ChimeraX-Centroids: 1.1
    ChimeraX-ChemGroup: 2.0
    ChimeraX-Clashes: 2.0
    ChimeraX-ColorActions: 1.0
    ChimeraX-ColorGlobe: 1.0
    ChimeraX-CommandLine: 1.1.3
    ChimeraX-ConnectStructure: 2.0
    ChimeraX-Contacts: 1.0
    ChimeraX-Core: 1.1
    ChimeraX-CoreFormats: 1.0
    ChimeraX-coulombic: 1.0.1
    ChimeraX-Crosslinks: 1.0
    ChimeraX-Crystal: 1.0
    ChimeraX-DataFormats: 1.0
    ChimeraX-Dicom: 1.0
    ChimeraX-DistMonitor: 1.1
    ChimeraX-DistUI: 1.0
    ChimeraX-Dssp: 2.0
    ChimeraX-EMDB-SFF: 1.0
    ChimeraX-ExperimentalCommands: 1.0
    ChimeraX-FileHistory: 1.0
    ChimeraX-FunctionKey: 1.0
    ChimeraX-Geometry: 1.1
    ChimeraX-gltf: 1.0
    ChimeraX-Graphics: 1.0
    ChimeraX-Hbonds: 2.0
    ChimeraX-Help: 1.0
    ChimeraX-HKCage: 1.0
    ChimeraX-IHM: 1.0
    ChimeraX-ImageFormats: 1.0
    ChimeraX-IMOD: 1.0
    ChimeraX-IO: 1.0
    ChimeraX-Label: 1.0
    ChimeraX-ListInfo: 1.0
    ChimeraX-Log: 1.1.1
    ChimeraX-LookingGlass: 1.1
    ChimeraX-Map: 1.0.1
    ChimeraX-MapData: 2.0
    ChimeraX-MapEraser: 1.0
    ChimeraX-MapFilter: 2.0
    ChimeraX-MapFit: 2.0
    ChimeraX-MapSeries: 2.0
    ChimeraX-Markers: 1.0
    ChimeraX-Mask: 1.0
    ChimeraX-MatchMaker: 1.1
    ChimeraX-MDcrds: 2.0
    ChimeraX-MedicalToolbar: 1.0.1
    ChimeraX-Meeting: 1.0
    ChimeraX-MLP: 1.0
    ChimeraX-mmCIF: 2.2
    ChimeraX-MMTF: 2.0
    ChimeraX-Modeller: 1.0
    ChimeraX-ModelPanel: 1.0
    ChimeraX-ModelSeries: 1.0
    ChimeraX-Mol2: 2.0
    ChimeraX-Morph: 1.0
    ChimeraX-MouseModes: 1.0
    ChimeraX-Movie: 1.0
    ChimeraX-Neuron: 1.0
    ChimeraX-Nucleotides: 2.0
    ChimeraX-OpenCommand: 1.2.1
    ChimeraX-PDB: 2.1
    ChimeraX-PDBBio: 1.0
    ChimeraX-PickBlobs: 1.0
    ChimeraX-Positions: 1.0
    ChimeraX-PresetMgr: 1.0
    ChimeraX-PubChem: 2.0
    ChimeraX-Read-Pbonds: 1.0
    ChimeraX-Registration: 1.1
    ChimeraX-RemoteControl: 1.0
    ChimeraX-ResidueFit: 1.0
    ChimeraX-RestServer: 1.0
    ChimeraX-RNALayout: 1.0
    ChimeraX-RotamerLibMgr: 2.0
    ChimeraX-RotamerLibsDunbrack: 2.0
    ChimeraX-RotamerLibsDynameomics: 2.0
    ChimeraX-RotamerLibsRichardson: 2.0
    ChimeraX-SaveCommand: 1.2
    ChimeraX-SchemeMgr: 1.0
    ChimeraX-SDF: 2.0
    ChimeraX-Segger: 1.0
    ChimeraX-Segment: 1.0
    ChimeraX-SeqView: 2.2
    ChimeraX-Shape: 1.0.1
    ChimeraX-Shell: 1.0
    ChimeraX-Shortcuts: 1.0
    ChimeraX-ShowAttr: 1.0
    ChimeraX-ShowSequences: 1.0
    ChimeraX-SideView: 1.0
    ChimeraX-Smiles: 2.0
    ChimeraX-SmoothLines: 1.0
    ChimeraX-SpaceNavigator: 1.0
    ChimeraX-StdCommands: 1.0.4
    ChimeraX-STL: 1.0
    ChimeraX-Storm: 1.0
    ChimeraX-Struts: 1.0
    ChimeraX-Surface: 1.0
    ChimeraX-SwapAA: 2.0
    ChimeraX-SwapRes: 2.0
    ChimeraX-TapeMeasure: 1.0
    ChimeraX-Test: 1.0
    ChimeraX-Toolbar: 1.0
    ChimeraX-ToolshedUtils: 1.0
    ChimeraX-Tug: 1.0
    ChimeraX-UI: 1.2.3
    ChimeraX-uniprot: 2.0
    ChimeraX-ViewDockX: 1.0
    ChimeraX-Vive: 1.1
    ChimeraX-VolumeMenu: 1.0
    ChimeraX-VTK: 1.0
    ChimeraX-WavefrontOBJ: 1.0
    ChimeraX-WebCam: 1.0
    ChimeraX-WebServices: 1.0
    ChimeraX-Zone: 1.0
    colorama: 0.4.3
    comtypes: 1.1.7
    cxservices: 1.0
    cycler: 0.10.0
    Cython: 0.29.20
    decorator: 4.4.2
    distlib: 0.3.1
    docutils: 0.16
    filelock: 3.0.12
    funcparserlib: 0.3.6
    gdcm: 2.8.8
    grako: 3.16.5
    h5py: 2.10.0
    html2text: 2020.1.16
    idna: 2.10
    ihm: 0.16
    imagecodecs: 2020.5.30
    imagecodecs-lite: 2020.1.31
    imagesize: 1.2.0
    ipykernel: 5.3.0
    ipython: 7.15.0
    ipython-genutils: 0.2.0
    jedi: 0.17.2
    Jinja2: 2.11.2
    jupyter-client: 6.1.3
    jupyter-core: 4.6.3
    kiwisolver: 1.2.0
    line-profiler: 2.1.2
    lxml: 4.5.1
    MarkupSafe: 1.1.1
    matplotlib: 3.2.1
    msgpack: 1.0.0
    netifaces: 0.10.9
    networkx: 2.4
    numexpr: 2.7.1
    numpy: 1.18.5+mkl
    numpydoc: 1.0.0
    openvr: 1.12.501
    packaging: 20.4
    parso: 0.7.1
    pickleshare: 0.7.5
    Pillow: 7.1.2
    pip: 20.2.2
    pkginfo: 1.5.0.1
    prompt-toolkit: 3.0.7
    psutil: 5.7.0
    pycollada: 0.7.1
    pydicom: 2.0.0
    Pygments: 2.6.1
    PyOpenGL: 3.1.5
    PyOpenGL-accelerate: 3.1.5
    pyparsing: 2.4.7
    PyQt5-commercial: 5.12.3
    PyQt5-sip: 4.19.19
    PyQtWebEngine-commercial: 5.12.1
    python-dateutil: 2.8.1
    pytz: 2020.1
    pywin32: 228
    pyzmq: 19.0.2
    qtconsole: 4.7.4
    QtPy: 1.9.0
    RandomWords: 0.3.0
    requests: 2.24.0
    scipy: 1.4.1
    setuptools: 49.4.0
    sfftk-rw: 0.6.6.dev0
    six: 1.15.0
    snowballstemmer: 2.0.0
    sortedcontainers: 2.2.2
    Sphinx: 3.1.1
    sphinxcontrib-applehelp: 1.0.2
    sphinxcontrib-blockdiag: 2.0.0
    sphinxcontrib-devhelp: 1.0.2
    sphinxcontrib-htmlhelp: 1.0.3
    sphinxcontrib-jsmath: 1.0.1
    sphinxcontrib-qthelp: 1.0.3
    sphinxcontrib-serializinghtml: 1.1.4
    suds-jurko: 0.6
    tables: 3.6.1
    tifffile: 2020.6.3
    tinyarray: 1.2.2
    tornado: 6.0.4
    traitlets: 5.0.4
    urllib3: 1.25.10
    wcwidth: 0.2.5
    webcolors: 1.11.1
    wheel: 0.34.2
    WMI: 1.5.1

Change History (22)

comment:1 by Tom Goddard, 5 years ago

Cc: pett Elaine Meng added
Component: UnassignedCommand Line
Owner: set to Tom Goddard
Platform: all
Project: ChimeraX
Status: newassigned
Summary: ChimeraX bug report submissionLabel mouse mode with blank chain id logs bad command atom spec

Elaine, Eric, how can one specify a chain identifier that is a space character in an atom spec? "#1/ :1" is invalid. This bug is with "open pubchem:2719" which is one residue with a single space character as the chain id. Of course I could omit the chain id. But this bug is with a mouse mode generated command. And I could have a model with chain id " " and other chain ids.

Last edited 5 years ago by Tom Goddard (previous) (diff)

comment:2 by pett, 5 years ago

Okay, in theory this would be

//chain_id=' '

(or possibly /' ') but there seems to be bug in chain ID evaluation. If I have one 1gcn open, then the command

sel //chain_id=A

works. If I *also* have a a pubchem structure open it fails, highlighting the atom spec and saying "Expected an objects specifier or a keyword". If I close the pubchem structure, it works again. It's weirder than that. I can select chain A that way on 1gcn or 4hhb but _not_ 1zik!

This will require some investigation.

Last edited 5 years ago by Tom Goddard (previous) (diff)

comment:3 by pett, 5 years ago

FYI, I think it would be safe to omit the '/' in your use case. I have never seen a structure with mixed blank and non-blank chain IDs.

comment:4 by pett, 5 years ago

You could possibly reassign this to me, since I have been looking at parsing recently.

comment:5 by Tom Goddard, 5 years ago

Cc: pett removed
Owner: changed from Tom Goddard to pett

I still haven't seen any way to specify a chain id that is a space character. It doesn't seem to like the quote marks

select //chain_id=' '
Expected an objects specifier or a keyword
sel /' '
incomplete quoted text

Also I don't think it is ok to omit the chain id and insist that structures cannot contain space and non-space chain ids. Files that mix those may be extremely rare but the file formats allow it and so surely people will create such files. Let's not replace the current wrong code with other code that is wrong.

comment:6 by pett, 5 years ago

Well, with just the PubChem small molecule open, there are no chains and therefore //attr_name=value will never select anything. You have to use ::chain_id=' '.

Unlike '/X', which is equivalent to ::chain_id=X, // looks at attributes of chain _objects_, and therefore will never match residues that aren't in chains.

I feel like sel "/ " (quotes around the whole spec) should work, but it currently doesn't. Not sure how hard It will be to make it work. Could be tremendously hard, or not.

I have fixed the //chain_id=' ' not parsing. It turns out that numpy.vectorize (used in the attribute-matching code) is an extremely finicky beast. There was already one workaround in the code for when vectorize went inexplicably haywire. So I just nuked the use of vectorize and substituted a loop. Vectorize() wasn't noted for high performance anyway.

in reply to:  7 ; comment:7 by goddard@…, 5 years ago

Ok, but I still don't know a way to write the equivalent command for a picked atom with model number, chain id, residue number and atom name.

{{{
 sel #1::chain_id=' ':1@Cl1
}}}

selects the whole residue, not sure why.  If I drop the ":1" part then it selects just the one atom.  But I need a way to specify a space as a chain_id and also specify a residue number and atom name.

in reply to:  8 ; comment:8 by Elaine Meng, 5 years ago

Since the ":" is repeated it is treated as a series of specifications, first all residues with chain ID ' ' and then another with residue 1 atom Cl1.

Using an intersection is icky but works, in my example

open pubchem:12123
sel #1::chain_id=' ' & :1@Br1



in reply to:  9 ; comment:9 by Elaine Meng, 5 years ago

For complete specificity I guess you'd need the #1 on both parts, so make that:

sel #1::chain_id=' ' & #1:1@Br1

in reply to:  10 ; comment:10 by pett, 5 years ago

You're over-thinking it.  Since '&' is an intersection you don't need it on both sides.


in reply to:  11 ; comment:11 by goddard@…, 5 years ago

Ok, I could go with the following in logged commands from mouse modes if a space is in the chain id

{{{
#1::chain_id=' ' & :1@Cl1
}}}

A quoting mechanism would be better, more likely that a user could figure it out if they needed to type such a command

{{{
#1/' ':1@Cl1
}}}

But I wouldn't want to torture anyone with implementing that given the current shambles that is our atom spec parser.

comment:12 by pett, 5 years ago

Practically speaking, the user would type "#1:1@C1" since there won't be mixed blank/non-blank chain IDs, but to be 1000% correct the atom spec you are using works.

comment:13 by pett, 5 years ago

Also, getting a blank ID combined with '/' looks to be impossible. Both types of quotes are legal chain ID character according to http://mmcif.wwpdb.org/dictionaries/mmcif_pdbx_v50.dic/Items/_entity.id.html. If you try not use quotes, then is "/A " just chain A, or chain "A "?

comment:14 by pett, 5 years ago

Resolution: fixed
Status: assignedclosed

Well, sorta fixed. :-)

in reply to:  15 ; comment:15 by goddard@…, 5 years ago

Did you push the fix?  I don't see anything in git and installing label and core didn't fix it for me.

comment:16 by pett, 5 years ago

The fix is in atomic (matching chain attributes).

in reply to:  17 ; comment:17 by goddard@…, 5 years ago

I get the same error using the label mouse mode with the current atomic:

open pubchem:2719
ui mousemode right label
label #1/ :1
Expected one of 'atoms', 'bonds', 'pseudobonds', or 'residues' or a keyword

comment:18 by pett, 5 years ago

I thought I made it clear, you can't use just '/' and a blank. with or without quotes. What _is_ fixed is that //chain_id=' ' always works (no "expected an object specifier or keyword" error), though in your usage case you actually want ::chain_id=' '.

comment:19 by Tom Goddard, 5 years ago

Ok, I misunderstood the previous "sorta fixed" message. It didn't mean this bug is fixed. You might want to reassign it to me if you are done with it.

comment:20 by pett, 5 years ago

Resolution: fixed
Status: closedreopened

comment:21 by pett, 5 years ago

Cc: pett added
Owner: changed from pett to Tom Goddard
Status: reopenedassigned

Seemed nigh impossible to fix to me. Nonetheless, I wish you luck.

comment:22 by Tom Goddard, 5 years ago

Resolution: fixed
Status: assignedclosed

Fixed.

Made logged command use (#1::chain_id=' '&:1) to handle blank chain id.

Note: See TracTickets for help on using tickets.