2017-07-02 63 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文件。 :(

相關問題