UNPKG

biojs-vis-pdbviewer

Version:

A BioJS 2.0 component to view protein structures

115 lines (99 loc) 4.11 kB
// jsmol/ext/JSmolRCSB.js // // a JSmol extension for RCSB-related functionality // // The Jmol.rcsb extension allows easy creation of Java or HTML5 applets on a // page that reference PDB 4-characater and 3-character (ligand) IDs. // This applet's id will be "jmol_" + Info._id // // Jmol.rcsb can be used for any URL, not just those from RCSB. // Options include a label in the upper left-hand corner and // one or more buttons below the applet. // // Jmol.rcsb.getHtml3D(Info) // includes _id, _url, _label, _buttonOptions // Jmol.rcsb.toggleHydrogens(applet) // Jmol.rcsb.toggleLabels(applet) // Jmol.rcsb,toggleMep(applet) // (ligand) molecular electrostatic potential // Jmol.rcsb.toggleSpin(applet) // // Bob Hanson 11/8/2013 6:32:35 AM hansonr@stolaf.edu // ;(function(Jmol) { Jmol.rcsb = { DefaultInfo : { // rcsb-related: _id: "1crn",// 1crn, HEM, etc. _url: null, // partial or full url _label: null,// top left _buttonOptions: "",// hydrogens labels mep spin debug // Jmol: script: "", width: "100%", height: "100%", debug: false, color: "white", use: "HTML5", addSelectionOptions: false, // true for debugging disableInitialConsole: true, j2sPath: "j2s", isSigned: true }, getHtml3D : function(Info) { // returns HTML for the applet Info || (Info = {}); Jmol._addDefaultInfo(Info, Jmol.rcsb.DefaultInfo); var id = Info._id; var loadID = Info._url || (id.length == 3 ? "==" + id : id.length == 4 ? "=" + id : id); // standard PDB ID for a ligand or protein Info.script = "set zoomlarge false;load \"" + loadID + "\";frank off;set antialiasDisplay;" + (Info.script || ""); if (Info._label) Info.script += ";set echo top left;font echo 10;echo " + Info._label + ";color echo blue;"; var options = (Info._buttonOptions || ""); if (options && Info.height == "100%") Info.height = "90%"; var appID = "jmol_" + id; var html = Jmol.getAppletHtml(appID, Info); // based on options specified, create one or more anchors var opts = options.split(" "); for (var i = 0, o; o=opts[i++];) { switch(o){ case "hydrogens": html += '<a href="javascript:Jmol.rcsb.toggleHydrogens(' + appID + ')">hydrogens</a> '; break; case "labels": html += '<a href="javascript:Jmol.rcsb.toggleLabels(' + appID + ')">labels</a> '; break; case "mep": html += '<a href="javascript:Jmol.rcsb.toggleMep(' + appID + ')" title="molecular electrostatic potential">mep</a> '; break; case "spin": html += '<a href="javascript:Jmol.rcsb.toggleSpin(' + appID + ')">spin</a> '; break; case "debug": html += '<a href="javascript:' + appID + '._showInfo(true)">debug</a> '; break; } } return html; }, // note to Kyle: [16:41:26.611] Jmol.evaluate(jmol_HEM, "script('show _?')") toggleSpin: function(applet) { var s = "if(_spinning){spin off}else{spin on}"; Jmol.script(applet, s); }, toggleLabels: function(applet) { // turn on labels, but selectively if protein or nucleic var s = "font label 10;color labels black;if ({protein|nucleic}){if ({*.CA|*.P}[1].label){labels off} else {select *.CA|*.P;label %n %r;select !protein&!nucleic;label %a} } else if ({*}[1].label){labels off}else{labels %a}"; Jmol.script(applet, s); }, toggleMep: function(applet) { // a molecule electrostatic potential var s = "if (!script('isosurface list').find('visible')){set echo bottom left;echo working...;refresh;select ligand; if ({selected}.partialCharge.max == {selected}.partialCharge.min){calculate partialcharge};isosurface select {ligand} only vdw map mep translucent;echo}else if(script('isosurface list').find('visible:true')){isosurface off}else{isosurface on}"; Jmol.script(applet, s); }, toggleHydrogens: function(applet) { // we calculate hydrogen positions if this is a protein and there are no H atoms var s = 'if({_H}==0&&{*.CA|*.P}){set pdbAddHydrogens true;save orientation o1;load "";restore orientation o1;set pdbAddHydrogens false;}else{showHydrogens=!showHydrogens}'; Jmol.script(applet, s); } } // rcsb })(Jmol); // closure