2017-07-02 2 views
0

Je veux faire une présentation pour un séminaire et je voudrais montrer une structure protéique interactivement (rotation 3D, peut-être même changer le modèle dans lequel il est montré, comme dessin animé, wireframe, ball & stick, ...)Comment lancer un objet jmol ou jsmol interactif dans un cahier ipython

Je veux que ce soit en ligne, pas dans une fenêtre ou un fichier séparé.

Je peux penser à deux solutions possibles. On pourrait simplement appeler un logiciel qui sort en ligne vers l'ordinateur portable, alors disons que je lance Jmol avec mon fichier d'entrée via bash et que je manipule tout le contenu de l'ordinateur portable (Notez que j'utilise un ordinateur portable ipython, mais je suis prêt à installer jupyter ou tout autre truc si c'est nécessaire pour la solution). Ce serait génial surtout si je pouvais l'utiliser avec n'importe quel autre logiciel, mais je ne pense pas que ce soit facile et que ce ne soit même pas possible. L'autre façon serait de créer un lien vers un objet jmol ou jsmol déjà lancé dans le même navigateur, onglet différent, et montrer la même chose dans le cahier en ligne et le faire pivoter à partir de là comme je le présente. Je pense que cela est plus susceptible d'être possible, car les deux fonctionnent dans le même navigateur et les deux connaissent html et javascript, donc il y a un langage commun. (Je ne sais pas trop sur HTML, javascript ou php, mais je pense qu'il est possible de le faire)

Si vous ouvrez ce lien:

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

Vous verrez l'objet rotatif . Si je lance Firebug pour examiner cet objet il me donne:

toile id = "jmolApplet0_canvas2d" style = "largeur: 100%; hauteur: 100%; z-index: 9002; curseur: défaut;" width = "600" height = "600"

mais ce n'est pas très utile pour moi, car je ne le comprends pas. Il ressemble à du code XML et ressemble à une entrée d'une fonction ou d'une classe, mais je n'ai aucune idée de comment je pourrais l'exécuter dans ma présentation de bloc-notes. J'essayais aussi de sauvegarder l'objet puis de l'analyser en utilisant python, mais cela ne me donne que les points de l'objet 3D, et ne le colorie pas ou ne donne pas de surface aux objets, ou du moins je ne le fais pas savoir comment ça. (Je parle de VRML)

Pour exécuter les choses inline dans le cahier ipython, j'ai trouvé:

% matplotlib nbagg

à travailler, mais rien d'autre.

Toute aide est appréciée. J'utilise python3, ipython3 portable, ubuntu 16.04, firefox mais je peux installer tout ce qui résoudrait mon problème, même utiliser windows dans virtualbox si je le dois.

Répondre

0

J'ai cherché beaucoup et j'ai trouvé un exemple de travail sur le site GitHub Oliver Stueker: https://github.com/ostueker/simple_jmol_demo

Le seul problème que j'avais avec ce que j'ai les fichiers nécessaires pdb, pas CML, parce que CML n » t contiennent les informations sur la structure secondaire.J'ai cherché un peu plus, et a trouvé un autre exemple presque travail posté par jhjensen2: https://gist.github.com/jhjensen2/4701339

Alors je suis venu avec ceci:

%%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> 

Vous pouvez l'utiliser comme ipython magique portable.

Editer: Bien pour l'instant seulement si le fichier que vous chargez n'est pas un fichier .pdb, mais il va charger un fichier .cml, que vous pouvez faire avec Avogadro. Le code chargera les fichiers .pdb dans un navigateur uniquement, pas dans un cahier ipython. Il pourrait ne pas y avoir un moyen de combiner les deux. Si j'utilise le load inline dans Jmol.getApplet cela ne fonctionne pas pour moi, mais cela fonctionne dans Jmol.getApplethtml mais seulement avec les fichiers .cml et ne fonctionne pas avec les fichiers .pdb. :(