Opened 21 months ago
Last modified 21 months ago
#14516 assigned enhancement
Marker "notes"
Reported by: | Tristan Croll | Owned by: | Tom Goddard |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | Structure Analysis | Version: | |
Keywords: | Cc: | pett | |
Blocked By: | Blocking: | ||
Notify when closed: | Platform: | all | |
Project: | ChimeraX |
Description
The following bug report has been submitted: Platform: Windows-10-10.0.22631 ChimeraX Version: 1.7.1 (2024-01-23 01:58:08 UTC) Description RFE: "sticky note" extension to the Markers tool. Context: when rebuilding and/or analysing an experimental structure, I often find it useful to add markers in sites of interest, with text labels explaining the point. But this approach is a bit limiting: each label can't be much longer than 10 words before becoming unwieldy (disappearing off the edge of the screen when zoomed in, and crowding the view when zoomed out). What I was imagining is an addition to the Markers panel adding a new right mouse mode: right-click on a marker to bring up a little text editor to add an arbitrary-length note, and add a little 2D label (perhaps the UniCode "Memo" emoji -📝, https://www.iemoji.com/view/emoji/398/objects/memo) to indicate its presence. Then the (first n characters of) that note could be used as the tooltip for that marker (if you wrap the text in <div></div> PyQt will treat the tooltip as HTML and do sensible word wrapping), and perhaps a simple `ToolWindow` could be used to browse through and read all current notes. OpenGL version: 3.3.0 NVIDIA 529.19 OpenGL renderer: NVIDIA GeForce RTX 3070 Laptop GPU/PCIe/SSE2 OpenGL vendor: NVIDIA Corporation Python: 3.11.2 Locale: en_GB.cp1252 Qt version: PyQt6 6.3.1, Qt 6.3.1 Qt runtime version: 6.3.2 Qt platform: windows Manufacturer: HP Model: HP ZBook Studio 15.6 inch G8 Mobile Workstation PC OS: Microsoft Windows 11 Pro (Build 22631) Memory: 34,007,068,672 MaxProcessMemory: 137,438,953,344 CPU: 16 11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz OSLanguage: en-GB Installed Packages: -himerax-clipper: 0.22.2 alabaster: 0.7.16 appdirs: 1.4.4 asttokens: 2.4.1 Babel: 2.14.0 backcall: 0.2.0 beautifulsoup4: 4.11.2 blockdiag: 3.0.0 blosc2: 2.0.0 build: 0.10.0 certifi: 2023.11.17 cftime: 1.6.3 charset-normalizer: 3.3.2 ChimeraX-AddCharge: 1.5.13 ChimeraX-AddH: 2.2.5 ChimeraX-AlignmentAlgorithms: 2.0.1 ChimeraX-AlignmentHdrs: 3.4.1 ChimeraX-AlignmentMatrices: 2.1 ChimeraX-Alignments: 2.12.2 ChimeraX-AlphaFold: 1.0 ChimeraX-AltlocExplorer: 1.1.1 ChimeraX-AmberInfo: 1.0 ChimeraX-Arrays: 1.1 ChimeraX-Atomic: 1.49.1 ChimeraX-AtomicLibrary: 12.1.5 ChimeraX-AtomSearch: 2.0.1 ChimeraX-AxesPlanes: 2.3.2 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.10.5 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.3.2 ChimeraX-ChangeChains: 1.1 ChimeraX-CheckWaters: 1.3.2 ChimeraX-ChemGroup: 2.0.1 ChimeraX-Clashes: 2.2.4 ChimeraX-Clipper: 0.22.4 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.7.1 ChimeraX-CoreFormats: 1.2 ChimeraX-coulombic: 1.4.2 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 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.7.1 ChimeraX-ItemsInspection: 1.0.1 ChimeraX-IUPAC: 1.0 ChimeraX-Label: 1.1.8 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.2 ChimeraX-MCopy: 1.0 ChimeraX-MDcrds: 2.6.1 ChimeraX-MedicalToolbar: 1.0.2 ChimeraX-Meeting: 1.0.1 ChimeraX-MLP: 1.1.1 ChimeraX-mmCIF: 2.12.1 ChimeraX-MMTF: 2.2 ChimeraX-Modeller: 1.5.14 ChimeraX-ModelPanel: 1.4 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-NRRD: 1.1 ChimeraX-Nucleotides: 2.0.3 ChimeraX-OpenCommand: 1.13.1 ChimeraX-PDB: 2.7.3 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 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.1 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-SelInspector: 1.0 ChimeraX-SeqView: 2.11 ChimeraX-Shape: 1.0.1 ChimeraX-Shell: 1.0.1 ChimeraX-Shortcuts: 1.1.1 ChimeraX-ShowSequences: 1.0.2 ChimeraX-SideView: 1.0.1 ChimeraX-Smiles: 2.1.2 ChimeraX-SmoothLines: 1.0 ChimeraX-SpaceNavigator: 1.0 ChimeraX-StdCommands: 1.12.4 ChimeraX-STL: 1.0.1 ChimeraX-Storm: 1.0 ChimeraX-StructMeasure: 1.1.2 ChimeraX-Struts: 1.0.1 ChimeraX-Surface: 1.0.1 ChimeraX-SwapAA: 2.0.1 ChimeraX-SwapRes: 2.2.2 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.33.3 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-XMAS: 1.1.2 ChimeraX-Zone: 1.0.1 colorama: 0.4.6 comm: 0.2.1 comtypes: 1.1.14 contourpy: 1.2.0 cxservices: 1.2.2 cycler: 0.12.1 Cython: 0.29.33 debugpy: 1.8.0 decorator: 5.1.1 docutils: 0.19 et-xmlfile: 1.1.0 executing: 2.0.1 filelock: 3.9.0 fonttools: 4.47.2 funcparserlib: 2.0.0a0 glfw: 2.6.4 grako: 3.16.5 h5py: 3.10.0 html2text: 2020.1.16 idna: 3.6 ihm: 0.38 imagecodecs: 2023.9.18 imagesize: 1.4.1 ipykernel: 6.23.2 ipython: 8.14.0 ipython-genutils: 0.2.0 ipywidgets: 8.1.1 jedi: 0.18.2 Jinja2: 3.1.2 jupyter-client: 8.2.0 jupyter-core: 5.7.1 jupyterlab-widgets: 3.0.9 kiwisolver: 1.4.5 line-profiler: 4.0.2 lxml: 4.9.2 lz4: 4.3.2 MarkupSafe: 2.1.4 matplotlib: 3.7.2 matplotlib-inline: 0.1.6 msgpack: 1.0.4 nest-asyncio: 1.6.0 netCDF4: 1.6.2 networkx: 3.1 nibabel: 5.0.1 nptyping: 2.5.0 numexpr: 2.8.8 numpy: 1.25.1 openpyxl: 3.1.2 openvr: 1.23.701 packaging: 23.2 pandas: 2.0.3 ParmEd: 3.4.3 parso: 0.8.3 pep517: 0.13.0 pickleshare: 0.7.5 pillow: 10.2.0 pip: 23.0 pkginfo: 1.9.6 platformdirs: 4.1.0 pprintpp: 0.4.0 prompt-toolkit: 3.0.43 psutil: 5.9.5 pure-eval: 0.2.2 py-cpuinfo: 9.0.0 pycollada: 0.7.2 pydicom: 2.3.0 Pygments: 2.16.1 pynmrstar: 3.3.2 pynrrd: 1.0.0 PyOpenGL: 3.1.7 PyOpenGL-accelerate: 3.1.7 pyopenxr: 1.0.2801 pyparsing: 3.0.9 pyproject-hooks: 1.0.0 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: 2023.3.post1 pywin32: 305 pyzmq: 25.1.2 qtconsole: 5.4.3 QtPy: 2.4.1 QtRangeSlider: 0.1.5 RandomWords: 0.4.0 requests: 2.31.0 scipy: 1.11.1 seaborn: 0.12.2 Send2Trash: 1.8.2 SEQCROW: 1.7.3 setuptools: 67.4.0 sfftk-rw: 0.7.3 six: 1.16.0 snowballstemmer: 2.2.0 sortedcontainers: 2.4.0 soupsieve: 2.5 sphinx: 6.1.3 sphinx-autodoc-typehints: 1.22 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.5.0 tables: 3.8.0 tcia-utils: 1.5.1 tifffile: 2023.7.18 tinyarray: 1.2.4 tomli: 2.0.1 tornado: 6.4 traitlets: 5.9.0 typing-extensions: 4.9.0 tzdata: 2023.4 urllib3: 2.1.0 wcwidth: 0.2.13 webcolors: 1.12 wheel: 0.38.4 wheel-filename: 1.4.1 widgetsnbextension: 4.0.9 WMI: 1.5.1
Change History (6)
comment:1 by , 21 months ago
Cc: | added |
---|---|
Component: | Unassigned → Structure Analysis |
Owner: | set to |
Platform: | → all |
Project: | → ChimeraX |
Status: | new → assigned |
Summary: | ChimeraX bug report submission → Marker "notes" |
Type: | defect → enhancement |
comment:2 by , 21 months ago
comment:3 by , 21 months ago
I made marker note support in Chimera 20 years ago. I can't recall seeing a single person other than me ever use it.
comment:4 by , 21 months ago
Sadly my Altos help hasn’t been quite as forthcoming as I first expected when I joined. Part of that's my fault, for deciding to stay here in the UK rather than moving to the Bay Area. Different cost centre, with fewer people here who really understand the value of structural biology. My personal time is almost completely taken up by applied projects lately, and so far I haven’t had success convincing them it’s worth taking on a junior developer. Still a work in progress... That being said, thanks for the tips. Just had a quick play with that, and I was indeed able to override the `string()` method for a single marker to display a test string (although not particularly robustly - caused a traceback when I attempted to select the marker atom because I hadn't included any of the optional arguments in the method definition. Anyway, when it comes to wrapping the text, it turns out all it takes is: session.ui.main_window.graphics_window.popup.setWordWrap(True) That of course would then cause *every* tooltip in the main graphics window to wrap, but is there a scenario where that would be problematic?
comment:5 by , 21 months ago
For what it’s worth, I think a feature like this might find quite a bit more uptake today than in the old “blobology” era. Judging by chatter at the conference I was at earlier this week (Cryo-EM in Academia and Industry) most of the big biotech/drug companies are jumping on cryo-EM as a major workhorse. Lots of large structures filled with clearly-resolved fine details that are important but easily lost/missed amongst the forest. And these guys *really* care about the details.
comment:6 by , 21 months ago
The string() method override would of course need to handle all the arguments. Not sure how line wrapping would determine the size of the popup. The current heavy use of the popup is with short text and definitely it should not be wrapped as that would make it less useful.
While I agree marker notes could be useful to lots of people, my guess is almost no one will use it. That guess is based on seeing a hundred Chimera and ChimeraX features that almost no one uses over decades. That is just a guess, but I have to go on my guesses when I have hundreds of requested specialty features sitting in our ChimeraX Trac tickets.
There is a way to override what an atom or marker shows in the popup-balloon when you hover the mouse over it. Looking at the mouse hover code
I see it uses the PickedAtom.description() method
which uses str(atom)
which calls Atom.string()
so overriding a marker's string method can allow you to show any string you want.
Maybe newlines in strings could be made to wrap the popup balloon to show multiple lines.
That is some low-level support that seems pretty easy to adapt. But then you need a mouse mode so you can click and add these notes easily. Also you wanted a GUI to review all your notes. That is a lot more work.
I'd say there is at least a week of work to make such a tool production ready.
Unfortunately I'd also say it would have almost zero users. A small number of users could probably be had by spending another week making videos showing how useful it is.
So I'd say this is probably is useful to too few people for us to find the time to do it. But nothing would stop you or your Altos help from implementing this.