Opened 4 years ago

Last modified 4 years ago

#6034 accepted enhancement

Jupyter notebooks

Reported by: Tristan Croll Owned by: pett
Priority: normal Milestone:
Component: Core Version:
Keywords: Cc: chimera-programmers
Blocked By: Blocking:
Notify when closed: Platform: all
Project: ChimeraX

Description

The following bug report has been submitted:
Platform:        Windows-10-10.0.19041
ChimeraX Version: 1.3rc202112030319 (2021-12-03 03:19:12 UTC)
Description
I've been working through some tutorials on various subjects implemented as Jupyter notebooks, and I have to say I've been pretty impressed by them (examples under the Tutorials heading at https://mml-book.github.io/). It got me wondering... would it be feasible for ChimeraX to spin up a Jupyter server, and run notebooks through its own help browser?

The result could make a wonderful stepping stone for the "power users" to go from the command interface to Python scripting to active development: in the same page you could, for example, provide a cxcmd: link *and* the working, adjustable code to achieve the same from a Python script. Or show how to add and remove a callback to the "new frame" or "changes" trigger... perform some analysis of atomic coordinates/properties... etc.

I could see myself using it to demonstrate some advanced uses of ISOLDE's restraints - there are many more potential uses of these than what I've exposed to the interface so far (primarily because doing so in a user-friendly way will be rather tricky), and probably quite a few that I haven't even thought of yet. Giving examples for people to play with could be a great way to awaken some creative ideas.

OpenGL version: 3.3.0 NVIDIA 497.29
OpenGL renderer: NVIDIA GeForce RTX 2080/PCIe/SSE2
OpenGL vendor: NVIDIA Corporation
Manufacturer: Notebook                        
Model: P7xxTM1
OS: Microsoft Windows 10 Education (Build 19041)
Memory: 68,654,501,888
MaxProcessMemory: 137,438,953,344
CPU: 16 Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz
OSLanguage: en-GB
Locale: ('en_GB', 'cp1252')
PyQt5 5.15.2, Qt 5.15.2
Installed Packages:
    -: imerax-clipper
    -himerax-clipper: 0.17.0
    -himerax-isolde: 1.3.dev33
    absl-py: 1.0.0
    alabaster: 0.7.12
    appdirs: 1.4.4
    Babel: 2.9.1
    backcall: 0.2.0
    blockdiag: 2.0.1
    certifi: 2021.10.8
    cftime: 1.5.1.1
    charset-normalizer: 2.0.8
    ChimeraX-AddCharge: 1.2.2
    ChimeraX-AddH: 2.1.11
    ChimeraX-AlignmentAlgorithms: 2.0
    ChimeraX-AlignmentHdrs: 3.2
    ChimeraX-AlignmentMatrices: 2.0
    ChimeraX-Alignments: 2.2.3
    ChimeraX-AlphaFold: 1.0
    ChimeraX-AltlocExplorer: 1.0.1
    ChimeraX-AmberInfo: 1.0
    ChimeraX-Arrays: 1.0
    ChimeraX-Atomic: 1.31
    ChimeraX-AtomicLibrary: 4.2
    ChimeraX-AtomSearch: 2.0
    ChimeraX-AtomSearchLibrary: 1.0
    ChimeraX-AxesPlanes: 2.0
    ChimeraX-BasicActions: 1.1
    ChimeraX-BILD: 1.0
    ChimeraX-BlastProtein: 2.0
    ChimeraX-BondRot: 2.0
    ChimeraX-BugReporter: 1.0
    ChimeraX-BuildStructure: 2.6.1
    ChimeraX-Bumps: 1.0
    ChimeraX-BundleBuilder: 1.1
    ChimeraX-ButtonPanel: 1.0
    ChimeraX-CageBuilder: 1.0
    ChimeraX-CellPack: 1.0
    ChimeraX-Centroids: 1.2
    ChimeraX-ChemGroup: 2.0
    ChimeraX-Clashes: 2.2.2
    ChimeraX-Clipper: 0.17.0
    ChimeraX-ColorActions: 1.0
    ChimeraX-ColorGlobe: 1.0
    ChimeraX-ColorKey: 1.5
    ChimeraX-CommandLine: 1.1.5
    ChimeraX-ConnectStructure: 2.0
    ChimeraX-Contacts: 1.0
    ChimeraX-Core: 1.3rc202112030319
    ChimeraX-CoreFormats: 1.1
    ChimeraX-coulombic: 1.3.2
    ChimeraX-Crosslinks: 1.0
    ChimeraX-Crystal: 1.0
    ChimeraX-CrystalContacts: 1.0
    ChimeraX-DataFormats: 1.2.2
    ChimeraX-Dicom: 1.0
    ChimeraX-DistMonitor: 1.1.5
    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.2
    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
    ChimeraX-ItemsInspection: 1.0
    ChimeraX-Label: 1.1
    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: 2.0.4
    ChimeraX-MDcrds: 2.6
    ChimeraX-MedicalToolbar: 1.0.1
    ChimeraX-Meeting: 1.0
    ChimeraX-MLP: 1.1
    ChimeraX-mmCIF: 2.4
    ChimeraX-MMTF: 2.1
    ChimeraX-Modeller: 1.2.6
    ChimeraX-ModelPanel: 1.2.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.6.5
    ChimeraX-PDBBio: 1.0
    ChimeraX-PDBLibrary: 1.0.2
    ChimeraX-PDBMatrices: 1.0
    ChimeraX-PickBlobs: 1.0
    ChimeraX-Positions: 1.0
    ChimeraX-PresetMgr: 1.0.1
    ChimeraX-PubChem: 2.1
    ChimeraX-ReadPbonds: 1.0.1
    ChimeraX-Registration: 1.1
    ChimeraX-RemoteControl: 1.0
    ChimeraX-ResidueFit: 1.0
    ChimeraX-RestServer: 1.1
    ChimeraX-RNALayout: 1.0
    ChimeraX-RotamerLibMgr: 2.0.1
    ChimeraX-RotamerLibsDunbrack: 2.0
    ChimeraX-RotamerLibsDynameomics: 2.0
    ChimeraX-RotamerLibsRichardson: 2.0
    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.6
    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.1
    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.13.7
    ChimeraX-uniprot: 2.2
    ChimeraX-UnitCell: 1.0
    ChimeraX-ViewDockX: 1.0.1
    ChimeraX-VIPERdb: 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.4
    comtypes: 1.1.10
    cxservices: 1.1
    cycler: 0.11.0
    Cython: 0.29.24
    decorator: 5.1.0
    docutils: 0.17.1
    filelock: 3.0.12
    flatbuffers: 2.0
    funcparserlib: 0.3.6
    grako: 3.16.5
    h5py: 3.6.0
    html2text: 2020.1.16
    idna: 3.3
    ihm: 0.21
    imagecodecs: 2021.4.28
    imagesize: 1.3.0
    ipykernel: 5.5.5
    ipython: 7.23.1
    ipython-genutils: 0.2.0
    jax: 0.2.27
    jaxlib: 0.1.75
    jedi: 0.18.0
    Jinja2: 3.0.1
    jupyter-client: 6.1.12
    jupyter-core: 4.9.1
    kiwisolver: 1.3.2
    lxml: 4.6.3
    lz4: 3.1.3
    MarkupSafe: 2.0.1
    matplotlib: 3.4.3
    matplotlib-inline: 0.1.3
    msgpack: 1.0.2
    netCDF4: 1.5.7
    networkx: 2.6.3
    numexpr: 2.8.0
    numpy: 1.21.2
    openvr: 1.16.801
    opt-einsum: 3.3.0
    packaging: 21.3
    ParmEd: 3.4.3
    parso: 0.8.3
    pickleshare: 0.7.5
    Pillow: 8.3.2
    pip: 21.2.4
    pkginfo: 1.7.1
    prompt-toolkit: 3.0.23
    psutil: 5.8.0
    pycollada: 0.7.1
    pydicom: 2.1.2
    Pygments: 2.10.0
    PyOpenGL: 3.1.5
    PyOpenGL-accelerate: 3.1.5
    pyparsing: 3.0.6
    PyQt5-commercial: 5.15.2
    PyQt5-sip: 12.8.1
    PyQtWebEngine-commercial: 5.15.2
    python-dateutil: 2.8.2
    python-igraph: 0.9.7
    pytz: 2021.3
    pywin32: 228
    pyzmq: 22.3.0
    qtconsole: 5.1.1
    QtPy: 1.11.2
    RandomWords: 0.3.0
    requests: 2.26.0
    scipy: 1.7.1
    setuptools: 57.5.0
    sfftk-rw: 0.7.1
    six: 1.16.0
    snowballstemmer: 2.2.0
    sortedcontainers: 2.4.0
    Sphinx: 4.2.0
    sphinx-autodoc-typehints: 1.12.0
    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
    texttable: 1.6.4
    tifffile: 2021.4.8
    tinyarray: 1.2.3
    tornado: 6.1
    traitlets: 5.1.1
    typing-extensions: 4.0.1
    urllib3: 1.26.7
    versioneer: 0.21
    wcwidth: 0.2.5
    webcolors: 1.11.1
    wheel: 0.37.0
    wheel-filename: 1.3.0
    WMI: 1.5.1

Change History (6)

in reply to:  1 ; comment:1 by Tristan Croll, 4 years ago

Come to think of it, would also offer the possibility of people making their own custom notebooks to run analyses with inline graphics etc.

comment:2 by pett, 4 years ago

Cc: chimera-programmers added
Component: UnassignedCore
Owner: set to pett
Platform: all
Project: ChimeraX
Status: newaccepted
Summary: ChimeraX bug report submissionJupyter notebooks
Type: defectenhancement

comment:3 by pett, 4 years ago

I don't know, is it possible? I think the stumbling block is that the Python shell we provide needs access to ChimeraX's Python and therefore uses an in-process kernel. See https://www.rbvi.ucsf.edu/pipermail/chimerax-users/2020-June/001200.html . I'm no expert, so if you know a way to get it to work I'm all ears.

--Eric

comment:4 by Tom Goddard, 4 years ago

Jupyter notebook ChimeraX support could be pretty cool. I could see the chimerax-recipes script examples (https://rbvi.github.io/chimerax-recipes/) instead being presented as notebooks which would allow easier tinkering with them.

Google's AlphaFold notebook is another example where tinkering with the code can be interesting.

But none of the Jupyter notebook examples I have used involve a simultaneously running GUI application. Instead they run a bit of Python code and create Matplotlib graphs or heat plots in the notebook for visualizations. Do you know of any example where a notebook controls a GUI application? If you lose the 3D view of the ChimeraX app it gets a lot less interesting. We have CZI funding to make a PyPi or Conda package for ChimeraX for non-gui uses so I expect that to exist, probably late this year (funding runs from Aug 2021 for 2 years), and it would probably be practical to use that chimerax module in a Jupyter notebook.

comment:5 by Tom Goddard, 4 years ago

My previous comment presumed you were thinking the Jupyter notebook would run in a normal browser like FireFox, Chrome, Safari connecting to a Jupyter server that supports running ChimeraX python code. But maybe you meant just that you want the ChimeraX shell to be Jupyter notebook. The current ChimeraX Shell tool says "Jupyter QtConsole 5.2.2" at the top. Eric, does it support opening a Jupyter notebook with cells containing code from a *.ipynb file? And editing those cells and running them? I always wondered this. It has the "In [1]", "Out [1]", "In [2]", "Out [2]", ... format of a notebook but not the controls I normally see to collapse code cells or rerun them.

in reply to:  6 ; comment:6 by Tristan Croll, 4 years ago

Well, I was thinking specifically about the ChimeraX help window - but if it ran in that I suppose it would run in any browser. The advantage of the former would be that it could also incorporate ChimeraX commands as links.

Anyway, I did some digging around and it seems while it's technically possible, the built in IPython support for it is only implemented for PyQt4. See the second-last page of of https://qtconsole.readthedocs.io/_/downloads/en/stable/pdf/ (section 10.1), which points to the example code at https://github.com/ipython/ipykernel/blob/main/examples/embedding/ipkernel_qtapp.py (basically it requires replacing the call to app.exec_() with a custom function that incorporates the kernel into the event loop). You'd think that the in-process kernel would also be capable of listening for requests from another process, but that doesn't appear to have been implemented. No idea how advisable it would be to have two separate ipython kernels running in the same app...

________________________________
From: ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu>
Sent: 28 January 2022 02:25
Cc: chimera-programmers@cgl.ucsf.edu <chimera-programmers@cgl.ucsf.edu>; pett@cgl.ucsf.edu <pett@cgl.ucsf.edu>; Tristan Croll <tic20@cam.ac.uk>
Subject: Re: [ChimeraX] #6034: Jupyter notebooks

#6034: Jupyter notebooks
------------------------------------+----------------------
          Reporter:  Tristan Croll  |      Owner:  pett
              Type:  enhancement    |     Status:  accepted
          Priority:  normal         |  Milestone:
         Component:  Core           |    Version:
        Resolution:                 |   Keywords:
        Blocked By:                 |   Blocking:
Notify when closed:                 |   Platform:  all
           Project:  ChimeraX       |
------------------------------------+----------------------

Comment (by Tom Goddard):

 My previous comment presumed you were thinking the Jupyter notebook would
 run in a normal browser like FireFox, Chrome, Safari connecting to a
 Jupyter server that supports running ChimeraX python code.  But maybe you
 meant just that you want the ChimeraX shell to be Jupyter notebook.  The
 current ChimeraX Shell tool says "Jupyter QtConsole 5.2.2" at the top.
 Eric, does it support opening a Jupyter notebook with cells containing
 code from a *.ipynb file?  And editing those cells and running them?  I
 always wondered this.  It has the "In [1]", "Out [1]", "In [2]", "Out
 [2]", ... format of a notebook but not the controls I normally see to
 collapse code cells or rerun them.

--
Ticket URL: <https://www.rbvi.ucsf.edu/trac/ChimeraX/ticket/6034#comment:5>
ChimeraX <https://www.rbvi.ucsf.edu/chimerax/>
ChimeraX Issue Tracker
Note: See TracTickets for help on using tickets.