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

2024-09-30 12:12:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我想为一个研讨会做一个演示,我想交互式地展示一个蛋白质结构(三维旋转,甚至可以改变它显示的模型,比如卡通、线框、球和棍子……)

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

我可以考虑两种可能的解决办法。在

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

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

如果打开此链接:

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

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

画布 id="jmolApplet0_canvas2d" style="width: 100%; height: 100%; z-index: 9002; cursor: default;" width="600" height="600"

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

我还试图保存对象,然后用python解析它,但这只给了我3D对象的点,不会给它着色或给对象表面,或者至少我不知道怎么做。(我说的是VRML)

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

%matplotlib nbagg百分比

工作,但没有别的。在

感谢任何帮助。在

我使用的是python3,ipython3笔记本,ubuntu16.04,firefox,但是我可以安装任何可以解决我问题的东西,如果需要的话,甚至可以在virtualbox中使用windows。在


Tags: 文件对象方法模型链接ipython浏览器笔记本
1条回答
网友
1楼 · 发布于 2024-09-30 12:12:19

我搜索了很多,在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笔记本中加载。也许没有办法把两者结合起来。如果我在Jmol.getApplet中使用load inline,它对我不起作用,但它在Jmol.getApplethtml中有效,但只适用于.cml文件,而不适用于.pdb文件。:(

相关问题 更多 >

    热门问题