Opened 4 years ago
Last modified 4 years ago
#5039 assigned enhancement
"sticky" cartoon settings
Reported by: | Tristan Croll | Owned by: | Tom Goddard |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | Depiction | Version: | |
Keywords: | Cc: | Elaine Meng | |
Blocked By: | Blocking: | ||
Notify when closed: | Platform: | all | |
Project: | ChimeraX |
Description
The following bug report has been submitted: Platform: Linux-3.10.0-1160.25.1.el7.x86_64-x86_64-with-glibc2.17 ChimeraX Version: 1.3.dev202108040454 (2021-08-04 04:54:51 UTC) Description The Clipper plugin uses the method at https://github.com/tristanic/chimerax-clipper/blob/5abc693ea0755ef0395ecd02de507a43a6f9018b/src/util.py#L59 to set its standard style for the cartoon. If this is run on a model with no beta strands defined and then a subsequent `dssp` command causes beta strands to appear, they still come out at the ChimeraX-standard width. I think this should be modified so that the cartoon remembers the setting for different secondary structure types even if none currently exist in the model. Where this commonly comes up is when a model is saved from ChimeraX, run through phenix.refine and loaded back into ChimeraX. I *think* the problem there is that phenix.refine only looks for SHEET records (or the mmCIF equivalent) in its input file, and ChimeraX doesn't write those - so no beta-strand information gets passed through to the phenix.refine output. OpenGL version: 3.3.0 NVIDIA 465.19.01 OpenGL renderer: NVIDIA TITAN Xp/PCIe/SSE2 OpenGL vendor: NVIDIA Corporation Manufacturer: Dell Inc. Model: Precision T5600 OS: CentOS Linux 7 Core Architecture: 64bit ELF Virutal Machine: none CPU: 32 Intel(R) Xeon(R) CPU E5-2687W 0 @ 3.10GHz Cache Size: 20480 KB Memory: total used free shared buff/cache available Mem: 62G 8.7G 41G 396M 12G 53G Swap: 4.9G 0B 4.9G Graphics: 03:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP102 [TITAN Xp] [10de:1b02] (rev a1) Subsystem: NVIDIA Corporation Device [10de:11df] Kernel driver in use: nvidia Locale: ('en_GB', 'UTF-8') PyQt5 5.15.2, Qt 5.15.2 Installed Packages: alabaster: 0.7.12 appdirs: 1.4.4 Babel: 2.9.1 backcall: 0.2.0 blockdiag: 2.0.1 certifi: 2021.5.30 cftime: 1.5.0 chardet: 4.0.0 ChimeraX-AddCharge: 1.1.4 ChimeraX-AddH: 2.1.10 ChimeraX-AlignmentAlgorithms: 2.0 ChimeraX-AlignmentHdrs: 3.2 ChimeraX-AlignmentMatrices: 2.0 ChimeraX-Alignments: 2.1 ChimeraX-AlphaFold: 1.0 ChimeraX-AltlocExplorer: 1.0 ChimeraX-AmberInfo: 1.0 ChimeraX-Arrays: 1.0 ChimeraX-Atomic: 1.28 ChimeraX-AtomicLibrary: 4.1 ChimeraX-AtomSearch: 2.0 ChimeraX-AtomSearchLibrary: 1.0 ChimeraX-AxesPlanes: 2.0 ChimeraX-BasicActions: 1.1 ChimeraX-BILD: 1.0 ChimeraX-BlastProtein: 1.1.1 ChimeraX-BondRot: 2.0 ChimeraX-BugReporter: 1.0 ChimeraX-BuildStructure: 2.5.3 ChimeraX-Bumps: 1.0 ChimeraX-BundleBuilder: 1.1 ChimeraX-ButtonPanel: 1.0 ChimeraX-CageBuilder: 1.0 ChimeraX-CellPack: 1.0 ChimeraX-Centroids: 1.1 ChimeraX-ChemGroup: 2.0 ChimeraX-Clashes: 2.1 ChimeraX-Clipper: 0.17.0 ChimeraX-ColorActions: 1.0 ChimeraX-ColorGlobe: 1.0 ChimeraX-ColorKey: 1.3.2 ChimeraX-CommandLine: 1.1.4 ChimeraX-ConnectStructure: 2.0 ChimeraX-Contacts: 1.0 ChimeraX-Core: 1.3.dev202108040454 ChimeraX-CoreFormats: 1.1 ChimeraX-coulombic: 1.3 ChimeraX-Crosslinks: 1.0 ChimeraX-Crystal: 1.0 ChimeraX-CrystalContacts: 1.0 ChimeraX-DataFormats: 1.2 ChimeraX-Dicom: 1.0 ChimeraX-DistMonitor: 1.1.4 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.1 ChimeraX-Hbonds: 2.1 ChimeraX-Help: 1.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.3.dev32 ChimeraX-ItemsInspection: 1.0 ChimeraX-Label: 1.1 ChimeraX-LinuxSupport: 1.0 ChimeraX-ListInfo: 1.1.1 ChimeraX-Log: 1.1.4 ChimeraX-LookingGlass: 1.1 ChimeraX-Maestro: 1.8.1 ChimeraX-Map: 1.1 ChimeraX-MapData: 2.0 ChimeraX-MapEraser: 1.0 ChimeraX-MapFilter: 2.0 ChimeraX-MapFit: 2.0 ChimeraX-MapSeries: 2.1 ChimeraX-Markers: 1.0 ChimeraX-Mask: 1.0 ChimeraX-MatchMaker: 1.2.1 ChimeraX-MDcrds: 2.4 ChimeraX-MedicalToolbar: 1.0.1 ChimeraX-Meeting: 1.0 ChimeraX-MLP: 1.1 ChimeraX-mmCIF: 2.3 ChimeraX-MMTF: 2.1 ChimeraX-Modeller: 1.0.2 ChimeraX-ModelPanel: 1.1 ChimeraX-ModelSeries: 1.0 ChimeraX-Mol2: 2.0 ChimeraX-Morph: 1.0 ChimeraX-MouseModes: 1.1 ChimeraX-Movie: 1.0 ChimeraX-Neuron: 1.0 ChimeraX-Nucleotides: 2.0.2 ChimeraX-OpenCommand: 1.7 ChimeraX-PDB: 2.5.1 ChimeraX-PDBBio: 1.0 ChimeraX-PDBLibrary: 1.0.1 ChimeraX-PDBMatrices: 1.0 ChimeraX-Phenix: 0.3 ChimeraX-PickBlobs: 1.0 ChimeraX-Positions: 1.0 ChimeraX-PresetMgr: 1.0.1 ChimeraX-PubChem: 2.1 ChimeraX-ReadPbonds: 1.0 ChimeraX-Registration: 1.1 ChimeraX-RemoteControl: 1.0 ChimeraX-ResidueFit: 1.0 ChimeraX-RestServer: 1.1 ChimeraX-RNALayout: 1.0 ChimeraX-RotamerLibMgr: 2.0 ChimeraX-RotamerLibsDunbrack: 2.0 ChimeraX-RotamerLibsDynameomics: 2.0 ChimeraX-RotamerLibsRichardson: 2.0 ChimeraX-Sample: 0.1 ChimeraX-SaveCommand: 1.5 ChimeraX-SchemeMgr: 1.0 ChimeraX-SDF: 2.0 ChimeraX-Segger: 1.0 ChimeraX-Segment: 1.0 ChimeraX-SelInspector: 1.0 ChimeraX-SeqView: 2.4.1 ChimeraX-Shape: 1.0.1 ChimeraX-Shell: 1.0 ChimeraX-Shortcuts: 1.1 ChimeraX-ShowAttr: 1.0 ChimeraX-ShowSequences: 1.0 ChimeraX-SideView: 1.0 ChimeraX-Smiles: 2.1 ChimeraX-SmoothLines: 1.0 ChimeraX-SpaceNavigator: 1.0 ChimeraX-StdCommands: 1.6 ChimeraX-STL: 1.0 ChimeraX-Storm: 1.0 ChimeraX-Struts: 1.0 ChimeraX-Surface: 1.0 ChimeraX-SwapAA: 2.0 ChimeraX-SwapRes: 2.1 ChimeraX-TapeMeasure: 1.0 ChimeraX-Test: 1.0 ChimeraX-Toolbar: 1.1 ChimeraX-ToolshedUtils: 1.2 ChimeraX-Tug: 1.0 ChimeraX-UI: 1.11 ChimeraX-uniprot: 2.1 ChimeraX-UnitCell: 1.0 ChimeraX-ViewDockX: 1.0.1 ChimeraX-Vive: 1.1 ChimeraX-VolumeMenu: 1.0 ChimeraX-Voyager: 0.1 ChimeraX-VTK: 1.0 ChimeraX-WavefrontOBJ: 1.0 ChimeraX-WebCam: 1.0 ChimeraX-WebServices: 1.0 ChimeraX-Zone: 1.0 colorama: 0.4.4 comtypes: 1.1.10 cxservices: 1.0 cycler: 0.10.0 Cython: 0.29.23 decorator: 5.0.9 distlib: 0.3.1 distro: 1.5.0 docutils: 0.17.1 filelock: 3.0.12 funcparserlib: 0.3.6 grako: 3.16.5 h5py: 3.3.0 html2text: 2020.1.16 idna: 2.10 ihm: 0.20 imagecodecs: 2021.4.28 imagesize: 1.2.0 ipykernel: 5.5.5 ipython: 7.23.1 ipython-genutils: 0.2.0 jedi: 0.18.0 Jinja2: 2.11.3 jupyter-client: 6.1.12 jupyter-core: 4.7.1 kiwisolver: 1.3.1 line-profiler: 3.3.0 lxml: 4.6.3 lz4: 3.1.3 MarkupSafe: 1.1.1 matplotlib: 3.4.2 matplotlib-inline: 0.1.2 msgpack: 1.0.2 netCDF4: 1.5.6 networkx: 2.6.2 numexpr: 2.7.3 numpy: 1.21.0 numpydoc: 1.1.0 OpenMM: 7.6.0 openvr: 1.16.801 packaging: 21.0 ParmEd: 3.2.0 parso: 0.8.2 pexpect: 4.8.0 pickleshare: 0.7.5 Pillow: 8.2.0 pip: 21.1.1 pkginfo: 1.7.0 prompt-toolkit: 3.0.19 psutil: 5.8.0 ptyprocess: 0.7.0 pycollada: 0.7.1 pydicom: 2.1.2 Pygments: 2.9.0 PyOpenGL: 3.1.5 PyOpenGL-accelerate: 3.1.5 pyparsing: 2.4.7 PyQt5-commercial: 5.15.2 PyQt5-sip: 12.8.1 PyQtWebEngine-commercial: 5.15.2 python-dateutil: 2.8.1 pytz: 2021.1 pyzmq: 22.1.0 qtconsole: 5.1.0 QtPy: 1.9.0 RandomWords: 0.3.0 requests: 2.25.1 scipy: 1.6.3 setuptools: 57.0.0 sfftk-rw: 0.7.0.post1 six: 1.16.0 snowballstemmer: 2.1.0 sortedcontainers: 2.4.0 Sphinx: 4.0.1 sphinxcontrib-applehelp: 1.0.2 sphinxcontrib-blockdiag: 2.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 suds-jurko: 0.6 tables: 3.6.1 tifffile: 2021.4.8 tinyarray: 1.2.3 tornado: 6.1 traitlets: 5.0.5 urllib3: 1.26.6 wcwidth: 0.2.5 webcolors: 1.11.1 wheel: 0.36.2 wheel-filename: 1.3.0
Change History (9)
comment:1 by , 4 years ago
Component: | Unassigned → Depiction |
---|---|
Owner: | set to |
Platform: | → all |
Project: | → ChimeraX |
Status: | new → assigned |
Summary: | ChimeraX bug report submission → "sticky" cartoon settings |
Type: | defect → enhancement |
comment:2 by , 4 years ago
Cc: | added |
---|
comment:3 by , 4 years ago
Your premise is semi-correct. If I open a structure with no helix and use command "cartoon style modeh tube" and then change some resides to helix they are shown as tubes. The atom-spec is our usual atom-spec that can be blank to mean "everything" and the parameter is set per model. Example:
open 1c2a
cartoon style modeh tube
setattr :4-12 r ss_type 1
HOWEVER, width, thickness, and xsection are different because they are allowed to be different for strand, helix, coil, and nucleic within a model even though they are per-model settings. To avoid making the command too messy, Conrad and I chose to make them single parameters in the command although you could specify them separately using the atomspec (e.g. helix, strand, coil, or nucleic) and under the hood, they were really each 4 separate per-model settings. We didn't think about this situation of the secondary structure being redefined to include a type that wasn't in the structure when the cartoon style was applied. Another simplification we made was that "width" did not apply to coil and its thickness value would also be used as its width.
So your choices are to:
(1) hook directly into the python and change the per-model per-ss-type parameter.
(2) change the command syntax. I feel that the simplest way to do the latter is to have 4 separate keywords instead of (or in addition to?) the original keyword. E.g. instead of (or in addition to) "width" it would be "widthNucleic" "widthStrand" "widthHelix" or something along those lines.
comment:4 by , 4 years ago
Thanks for the suggestions Elaine. So you propose adding 11 new options widthHelix, widthStrand, widthCoil, widthNucleic, thicknessHelix, thicknessStrand, thicknessNucleic, xsectionHelix, xsectionStrand, xsectionCoil, xsectionNucleic. Seems pretty ugly and the command usage output will be very long. Also I see in the code that options arrowsHelix and arrowScale only work for helices if there are helix residues specified, and arrowScale and arrows only work on strands if a strand residue is specified. So the arrow options also need a way to be set. Could add arrowsHelix, arrowsStrand, arrowsScaleHelix, arrowsScaleStrand. Likewise the ssEnds option saves different values for helix and strand, so ssEndsHelix, ssEndsStrand.
Do we really want to add all those (17) new options? I think my one new option "type helix|strand|coil|nucleic" is simpler, albeit also ugly.
comment:5 by , 4 years ago
Actually arrows only applies to strands so don't need arrowsHelix (already exists) and arrowsStrand. So this approach would require 15 new options, not 17.
follow-up: 6 comment:6 by , 4 years ago
Personally I'd rather not have any of these extra parameters. You were asking me that if we were to change syntax, how to change it. (By the way, we chose not to put ssEnds in the user documentation because there were some problematic situations in which it didn't work right, and also because it was confusing.) Whether to actually change the syntax depends on Tristan's need and the pros/cons of changing the command versus the other possibilities (hook into python directly, or possibly define a preset to be applied after secondary structure changes). Also just because we expand one of them doesn't mean we have to expand them ALL, especially not ssEnds which isn't even documented.
follow-up: 7 comment:7 by , 4 years ago
Actually, that's a point. When the secondary structure is updated, I take it that goes into the model's 'changes' trigger... I suppose for my purposes I could just define a callback to reimpose the cartoon settings - although that could be a pain if there's anybody out there who's decided they like a different look when using Clipper. ________________________________ From: ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu> Sent: 11 August 2021 19:54 To: goddard@cgl.ucsf.edu <goddard@cgl.ucsf.edu>; Tristan Croll <tic20@cam.ac.uk> Cc: meng@cgl.ucsf.edu <meng@cgl.ucsf.edu> Subject: Re: [ChimeraX] #5039: "sticky" cartoon settings #5039: "sticky" cartoon settings ------------------------------------+------------------------- Reporter: Tristan Croll | Owner: Tom Goddard Type: enhancement | Status: assigned Priority: normal | Milestone: Component: Depiction | Version: Resolution: | Keywords: Blocked By: | Blocking: Notify when closed: | Platform: all Project: ChimeraX | ------------------------------------+------------------------- Comment (by Elaine Meng): {{{ Personally I'd rather not have any of these extra parameters. You were asking me that if we were to change syntax, how to change it. (By the way, we chose not to put ssEnds in the user documentation because there were some problematic situations in which it didn't work right, and also because it was confusing.) Whether to actually change the syntax depends on Tristan's need and the pros/cons of changing the command versus the other possibilities (hook into python directly, or possibly define a preset to be applied after secondary structure changes). Also just because we expand one of them doesn't mean we have to expand them ALL, especially not ssEnds which isn't even documented. }}} -- Ticket URL: <https://www.rbvi.ucsf.edu/trac/ChimeraX/ticket/5039#comment:6> ChimeraX <https://www.rbvi.ucsf.edu/chimerax/> ChimeraX Issue Tracker
follow-up: 8 comment:8 by , 4 years ago
I realize you just want to do it the way you came up with, but I'm not crazy about that either... having to explain why anybody would ever want to use "cartoon style type strand width N" instead of "cartoon style strand width N" when it is an extremely rare situation. There is also having to explain the concept of stickiness in the current structure vs. a setting that persists independent of any structures being open. Bringing in the "type" option may make people think it is the latter kind of setting.
comment:9 by , 4 years ago
I guess I agree with Elaine that this is a very rare use case. Since you are making these ribbon settings with Python code you can easily use slightly different Python code to make the settings work even when no strands or helices are present. To see how to do this look at the cartoon_style() code
The code you need would look like
structure.ribbon_xs_mgr.set_sheet_scale(width, thickness)
where structure is an AtomicStructure instance.
A sensible request. The problem is the "cartoon style" command as it is currently defined cannot set the ribbon display parameters for strands if no strands exist (same for helices or coils). This is bad as the case Tristan describes illustrates.
The trouble is "cartoon style" takes an atom specifier as its first argument "cartoon style <atom-spec> [width w] [height h] ...". And the settings only apply to the secondary structure types present in that atom specifier. For instance,
Here "helix" is a general ChimeraX atom selector. If there are no helix residues this command will do nothing.
The ribbon settings for helix are remembered whether or not any helices exist. So the deficiency is in the command which does not offer a way to set the helix parameters unless you specify a helix residue.
I am not sure how to remedy this and suggestions are welcome. One ugly way to handle it would be to add a new keyword "type", for example,
Another idea is that the first argument could be the word "helix" or "sheet" or "coil" or an atom spec, and if the word helix is used then it applies settings even if there are no helices. But then there is the problem of how to I set the helix width of just model #1 and not model #2 -- currently that would be "cartoon style #1 & helix width 1".
Elaine, how do you think the command syntax should be changed to handle this?