如何在ipython notebook

时间:2017-07-02 13:03:17

标签: javascript python ipython-notebook jupyter

我想为研讨会做一个演示,我想以交互方式展示蛋白质结构(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%;身高:100%; z-index:9002; cursor:default;"宽度=" 600"高度=" 600"

但这对我来说没什么用,因为我不理解它。它看起来像XML代码,并且像输入到函数或类,但我不知道如何在我的笔记本演示文稿中运行它。

我还试图保存对象,然后使用python解析它,但这只会给我3D对象的点,并且不会给它上色或给对象赋予表面,或者至少我不会这样做。我知道怎么做。 (我正在谈论VRML)

对于在ipython笔记本中运行内联的东西,我发现:

%matplotlib nbagg

要工作,但没有别的。

感谢任何帮助。

我使用python3,ipython3笔记本,ubuntu 16.04,firefox,但我可以安装任何可以解决我的问题,甚至可以在虚拟机中使用Windows,如果必须的话。

2 个答案:

答案 0 :(得分:1)

我搜索了很多,我在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 notebook magic。

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

答案 1 :(得分:0)

我已经整合了我在 repo here 中拼凑或遇到的两种现代方式(同一笔记本的 nbviewer '更干净' 视图:here)。
在浏览器中通过 this launch link 在 MyBinder.org 的支持下,启动一个 Jupyter 会话,该笔记本正在积极运行。

我希望扩展 the repo it is in 以了解如何使用他人开发的 jupyter-jsmol extension 与大分子结构相互作用。