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: | 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 , 5 years ago
Cc: | added |
---|---|
Component: | Unassigned → Command Line |
Owner: | set to |
Platform: | → all |
Project: | → ChimeraX |
Status: | new → assigned |
Summary: | ChimeraX bug report submission → Label mouse mode with blank chain id logs bad command atom spec |
comment:2 by , 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.
comment:3 by , 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 , 5 years ago
You could possibly reassign this to me, since I have been looking at parsing recently.
comment:5 by , 5 years ago
Cc: | removed |
---|---|
Owner: | changed from | to
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 , 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.
follow-up: 7 comment:7 by , 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.
follow-up: 8 comment:8 by , 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
follow-up: 9 comment:9 by , 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
follow-up: 10 comment:10 by , 5 years ago
You're over-thinking it. Since '&' is an intersection you don't need it on both sides.
follow-up: 11 comment:11 by , 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 , 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 , 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 "?
follow-up: 15 comment:15 by , 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.
follow-up: 17 comment:17 by , 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 , 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 , 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 , 5 years ago
Resolution: | fixed |
---|---|
Status: | closed → reopened |
comment:21 by , 5 years ago
Cc: | added |
---|---|
Owner: | changed from | to
Status: | reopened → assigned |
Seemed nigh impossible to fix to me. Nonetheless, I wish you luck.
comment:22 by , 5 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
Fixed.
Made logged command use (#1::chain_id=' '&:1)
to handle blank chain id.
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.