繁体   English   中英

如何在 ipython notebook 中运行交互式 jmol 或 jsmol 对象

[英]How to run interactive jmol or jsmol object in ipython notebook

我想为一个研讨会做一个演示,我想以交互方式展示一个蛋白质结构(3D 旋转,甚至可能改变它显示的模型,比如卡通、线框、球和棒,......)

我希望这是内联的,而不是在单独的窗口或文件中。

我可以考虑两种可能的解决方案。

一种方法是调用一个内联输出到笔记本的软件,所以假设我通过 bash 用我的输入文件运行 Jmol,然后从笔记本中操作整个内容(请注意,我使用的是 ipython 笔记本,但我如果解决方案需要,愿意安装 jupyter 或任何其他东西)。 这会很棒,尤其是如果我可以将它与任何其他软件一起使用,但我认为这并不容易,甚至可能不可能。

另一种方法是在同一个浏览器、不同的选项卡中链接到一个已经运行的 jmol 或 jsmol 对象,并在笔记本中内联显示相同的内容并在我呈现时从那里旋转它。 我认为这更有可能,因为两者都在同一个浏览器中运行,并且都知道 html 和 javascript,所以有一种共同的语言。 (我对 HTML、javascript 或 php 不太了解,但我认为可以做到)

如果你打开这个链接:

http://www.rcsb.org/pdb/explore/jmol.do?structureId=1A0K&bionumber=1

您将看到可旋转的对象。 如果我运行 Firebug 来检查这个对象,它会给我:

canvas id="jmolApplet0_canvas2d" style="width: 100%; height: 100%; z-index: 9002; cursor: default;" 宽度=“600”高度=“600”

但这对我来说没有多大用处,因为我不明白。 它看起来像 XML 代码,也像函数或类的输入,但我不知道如何在笔记本演示文稿中运行它。

我也试图保存对象,然后使用 python 解析它,但这只会给我 3D 对象的点,并且不会给它着色或为对象提供表面,或者至少我不知道如何做到这一点. (我说的是 VRML)

为了在 ipython notebook 中运行内联的东西,我发现:

%matplotlib nbagg

工作,但没有别的。

任何帮助表示赞赏。

我正在使用 python3、ipython3 notebook、ubuntu 16.04、firefox,但我可以安装任何可以解决我的问题的东西,如果必须的话,甚至可以在 virtualbox 中使用 windows。

我搜索了很多,我在 Oliver Stueker 的 github 站点上找到了一个工作示例: https : //github.com/ostueker/simple_jmol_demo

我遇到的唯一问题是我需要 .pdb 文件,而不是 cml,因为 cml 不包含二级结构信息。 我搜索了更多,并找到了 jhjensen2 发布的另一个几乎可以工作的示例: https ://gist.github.com/jhjensen2/4701339

所以我想出了这个:

%%html
<!doctype html>
<html>
    <title>A simple Jsmol example</title>
<head>
    <script type="text/javascript" src="jsmol/JSmol.min.js"></script>

    <script type="text/javascript">
    var Info = {
      width: 500,
      height: 500,
      j2sPath: "jsmol/j2s",
    }
    </script>
</head>
<body>
    <script type="text/javascript">
      jmolApplet0 = Jmol.getApplet("jmolApplet0", Info);
      Jmol.script(jmolApplet0,"background black; load 1a0k.pdb; wireframe only; spin on")
    </script>
    <br clear="all" / >
        <b>Model:</b>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'wireframe only; ');" checked="checked">Wireframe</input>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'cartoon only; ');">Cartoon</input>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'backbone only; ');">Backbone</input>
        <b>&nbsp; &nbsp; &nbsp; &nbsp; Spin:</b>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'spin off; ');" checked="checked">Off</input>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'spin on; ');">On</input></br>
    <br clear="all" / >
        <b>Color:</b>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'color cpk; ');" checked="checked">Atom</input>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'color structure; ');">Secondary</input>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'color chain; ');">Chain</input>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'color amino; ');">Residue</input>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'color group; ');">Group</input>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'color monomer; ');">Monomer</input>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'color relativeTemperature; ');">Relative temp.</input>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'color fixedTemperature; ');">Fixed temp.</input>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'color black; ');">Black</input>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'color white; ');">White</input>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'color grey; ');">Grey</input>
        </br>
    <br clear="all" / >
        <b>Background:</b>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'background black; ');" checked="checked">Black</input>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'background white; ');">White</input>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'background red; ');">Red</input>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'background green; ');">Green</input>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'background blue; ');">Blue</input>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'background yellow; ');">Yellow</input>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'background cyan; ');">Cyan</input>
        <input name="vis" type="radio" onclick="javascript:Jmol.script(jmolApplet0,
       'background magenta; ');">Magenta</input></br>
</body>

您可以将其用作 ipython 笔记本魔术。

编辑:目前只有当您加载的文件不是 .pdb 文件时,它才会加载一个 .cml 文件,您可以使用 Avogadro 创建该文件。 该代码将仅在浏览器中加载 .pdb 文件,而不是在 ipython notebook 中。 可能没有办法将两者结合起来。 如果我在Jmol.getApplet使用load inlineJmol.getApplet我不起作用,但它在Jmol.getApplethtml中有效,但仅适用于 .cml 文件,不适用于 .pdb 文件。 :(

我已经整合了我拼凑在一起的两种现代方式,或者在这里的 repo 中遇到(nbviewer 'cleaner' view of the same notebook: here )。
通过此启动链接在浏览器中启动 Jupyter 会话,并在 MyBinder.org 的支持下,该笔记本主动运行。

我希望扩展它所在的 repo ,看看可以做些什么来使用其他人开发的jupyter-jsmol 扩展与大分子结构进行交互。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM