2017-07-02 115 views
0

我想为一个研讨会做一个演示文稿,我想交互式地展示一个蛋白质结构(3D旋转,甚至可能改变它显示的模型,如卡通,线框,球&棒,...)如何在ipython笔记本中运行交互式jmol或jsmol对象

我想这是行内,而不是在单独的窗口或文件。

我能想到的两种可能的解决方案。

其中之一就是调用一个内嵌输出到笔记本的软件,假设我通过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;” WIDTH =“600” HEIGHT =“600”

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

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

对于IPython的笔记本上运行内嵌的东西,我发现:

%matplotlib nbagg

是工作,但没有别的。

任何帮助表示赞赏。

我使用的是python3,ipython3 notebook,ubuntu 16.04,firefox,但是我可以安装任何可以解决我的问题的东西,甚至可以在virtualbox中使用windows。

回答

0

我已经搜查了很多,我发现奥利弗Stueker的GitHub的网站工作的例子:https://github.com/ostueker/simple_jmol_demo

唯一的问题,我与它的是我需要的.pdb文件,而不是CML,因为没有按CML” t包含二级结构信息。我搜索一些,发现张贴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笔记本中加载。可能没有办法将两者结合起来。如果我在中使用load inline,它对我不起作用,但它在Jmol.getApplethtml中工作,但只对.cml文件起作用,不适用于.pdb文件。 :(

相关问题