我想为研讨会做一个演示,我想以交互方式展示蛋白质结构(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,如果必须的话。
答案 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> 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 与大分子结构相互作用。