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



我想为研讨会做一个演讲,我想以交互方式展示蛋白质结构(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来检查这个对象,它会给我:

画布 id="jmolApplet0_canvas2d" 样式="宽度: 100%; 高度:100%; Z 索引: 9002; 光标: 默认值;" 宽度="600" 高度="600">

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

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

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

%matplotlib nbagg

工作,但没有别的。

任何帮助,不胜感激。

我正在使用python3,ipython3笔记本,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 文件,您可以使用阿伏伽德罗制作该文件。该代码将仅在浏览器中加载.pdb文件,而不是在 ipython 笔记本中加载。可能没有办法将两者结合起来。如果我在Jmol.getApplet中使用load inline,它对我不起作用,但它确实适用于Jmol.getApplethtml,但仅适用于 .cml 文件,不适用于.pdb文件。:(

我已经整合了我拼凑在一起或在存储库中遇到的两种现代方式 这里 (nbviewer 同一笔记本的"更干净"视图:这里(.
通过此启动链接在您的浏览器中启动一个 Jupyter 会话,该笔记本在 MyBinder.org 的支持下主动运行。

我希望扩展它所在的存储库,看看可以使用其他人开发的jupyter-jsmol扩展与大分子结构进行交互。

最新更新