UNPKG

biojs-vis-pdbviewer

Version:

A BioJS 2.0 component to view protein structures

255 lines (253 loc) 9.86 kB
Clazz.declarePackage ("J.adapter.readers.quantum"); Clazz.load (["J.adapter.readers.quantum.MOReader"], "J.adapter.readers.quantum.GamessReader", ["java.lang.Float", "java.util.Hashtable", "JU.AU", "$.Lst", "$.PT", "J.api.JmolAdapter", "JU.Logger"], function () { c$ = Clazz.decorateAsClass (function () { this.atomNames = null; this.calcOptions = null; this.isTypeSet = false; Clazz.instantialize (this, arguments); }, J.adapter.readers.quantum, "GamessReader", J.adapter.readers.quantum.MOReader); Clazz.defineMethod (c$, "readEnergy", function () { var tokens = J.adapter.smarter.AtomSetCollectionReader.getTokensStr (this.line.substring (this.line.indexOf ("ENERGY"))); if (tokens.length < 3) return; var strEnergy = tokens[2]; var e = this.parseFloatStr (strEnergy); if (!Float.isNaN (e)) this.asc.setAtomSetEnergy (strEnergy, e); }); Clazz.defineMethod (c$, "readGaussianBasis", function (initiator, terminator) { var gdata = new JU.Lst (); this.gaussianCount = 0; var nGaussians = 0; this.shellCount = 0; var thisShell = "0"; var tokens; this.discardLinesUntilContains (initiator); this.rd (); var slater = null; var shellsByAtomType = new java.util.Hashtable (); var slatersByAtomType = new JU.Lst (); var atomType = null; while (this.rd () != null && this.line.indexOf (terminator) < 0) { if (this.line.indexOf ("(") >= 0) this.line = J.adapter.readers.quantum.GamessReader.fixBasisLine (this.line); tokens = this.getTokens (); switch (tokens.length) { case 1: if (atomType != null) { if (slater != null) { slater[2] = nGaussians; slatersByAtomType.addLast (slater); slater = null; }shellsByAtomType.put (atomType, slatersByAtomType); }slatersByAtomType = new JU.Lst (); atomType = tokens[0]; break; case 0: break; default: if (!tokens[0].equals (thisShell)) { if (slater != null) { slater[2] = nGaussians; slatersByAtomType.addLast (slater); }thisShell = tokens[0]; this.shellCount++; slater = [J.api.JmolAdapter.getQuantumShellTagID (this.fixShellTag (tokens[1])), this.gaussianCount, 0]; nGaussians = 0; }++nGaussians; ++this.gaussianCount; gdata.addLast (tokens); } } if (slater != null) { slater[2] = nGaussians; slatersByAtomType.addLast (slater); }if (atomType != null) shellsByAtomType.put (atomType, slatersByAtomType); this.gaussians = JU.AU.newFloat2 (this.gaussianCount); for (var i = 0; i < this.gaussianCount; i++) { tokens = gdata.get (i); this.gaussians[i] = Clazz.newFloatArray (tokens.length - 3, 0); for (var j = 3; j < tokens.length; j++) this.gaussians[i][j - 3] = this.parseFloatStr (tokens[j]); } var ac = this.atomNames.size (); if (this.shells == null && ac > 0) { this.shells = new JU.Lst (); for (var i = 0; i < ac; i++) { atomType = this.atomNames.get (i); var slaters = shellsByAtomType.get (atomType); if (slaters == null) { JU.Logger.error ("slater for atom " + i + " atomType " + atomType + " was not found in listing. Ignoring molecular orbitals"); return; }for (var j = 0; j < slaters.size (); j++) { slater = slaters.get (j); this.shells.addLast ([i, slater[0], slater[1], slater[2]]); } } }if (JU.Logger.debugging) { JU.Logger.debug (this.shellCount + " slater shells read"); JU.Logger.debug (this.gaussianCount + " gaussian primitives read"); }}, "~S,~S"); Clazz.defineMethod (c$, "readFrequencies", function () { this.discardLinesUntilContains ("FREQUENCY:"); var haveFreq = false; while (this.line != null && this.line.indexOf ("FREQUENCY:") >= 0) { var frequencyCount = 0; var tokens = this.getTokens (); var frequencies = Clazz.newFloatArray (tokens.length, 0); for (var i = 0; i < tokens.length; i++) { var frequency = this.parseFloatStr (tokens[i]); if (tokens[i].equals ("I")) frequencies[frequencyCount - 1] = -frequencies[frequencyCount - 1]; if (Float.isNaN (frequency)) continue; frequencies[frequencyCount++] = frequency; if (JU.Logger.debugging) { JU.Logger.debug ((this.vibrationNumber + 1) + " frequency=" + frequency); }} var red_masses = null; var intensities = null; this.rd (); if (this.line.indexOf ("MASS") >= 0) { red_masses = this.getTokens (); this.rd (); }if (this.line.indexOf ("INTENS") >= 0) { intensities = this.getTokens (); }var ac = this.asc.getLastAtomSetAtomCount (); var iAtom0 = this.asc.ac; var ignore = Clazz.newBooleanArray (frequencyCount, false); for (var i = 0; i < frequencyCount; i++) { ignore[i] = !this.doGetVibration (++this.vibrationNumber); if (ignore[i]) continue; if (haveFreq) { this.asc.cloneLastAtomSet (); } else { haveFreq = true; iAtom0 -= ac; }this.asc.setAtomSetFrequency (null, null, "" + frequencies[i], null); if (red_masses != null) this.asc.setAtomSetModelProperty ("ReducedMass", red_masses[red_masses.length - frequencyCount + i] + " AMU"); if (intensities != null) this.asc.setAtomSetModelProperty ("IRIntensity", intensities[intensities.length - frequencyCount + i] + " D^2/AMU-Angstrom^2"); } this.discardLinesUntilBlank (); this.fillFrequencyData (iAtom0, ac, ac, ignore, false, 20, 12, null, 0); this.readLines (13); } }); c$.fixBasisLine = Clazz.defineMethod (c$, "fixBasisLine", function (line) { var pt; var pt1; line = line.$replace (')', ' '); while ((pt = line.indexOf ("(")) >= 0) { pt1 = pt; while (line.charAt (--pt1) == ' ') { } while (line.charAt (--pt1) != ' ') { } line = line.substring (0, ++pt1) + line.substring (pt + 1); } return line; }, "~S"); Clazz.defineMethod (c$, "setCalculationType", function () { if (this.calcOptions == null || this.isTypeSet) return; this.isTypeSet = true; var SCFtype = this.calcOptions.get ("contrl_options_SCFTYP"); var Runtype = this.calcOptions.get ("contrl_options_RUNTYP"); var igauss = this.calcOptions.get ("basis_options_IGAUSS"); var gbasis = this.calcOptions.get ("basis_options_GBASIS"); var DFunc = !"0".equals (this.calcOptions.get ("basis_options_NDFUNC")); var PFunc = !"0".equals (this.calcOptions.get ("basis_options_NPFUNC")); var FFunc = !"0".equals (this.calcOptions.get ("basis_options_NFFUNC")); var DFTtype = this.calcOptions.get ("contrl_options_DFTTYP"); var perturb = this.parseIntStr (this.calcOptions.get ("contrl_options_MPLEVL")); var CItype = this.calcOptions.get ("contrl_options_CITYP"); var CCtype = this.calcOptions.get ("contrl_options_CCTYP"); if (igauss == null && SCFtype == null) return; if (this.calculationType.equals ("?")) this.calculationType = ""; if (igauss != null) { if ("0".equals (igauss)) { var recognized = false; if (this.calculationType.length > 0) this.calculationType += " "; if (gbasis.startsWith ("ACC")) this.calculationType += "aug-cc-p"; if (gbasis.startsWith ("CC")) this.calculationType += "cc-p"; if ((gbasis.startsWith ("ACC") || gbasis.startsWith ("CC")) && gbasis.endsWith ("C")) this.calculationType += "C"; if (gbasis.indexOf ("CCD") >= 0) { this.calculationType += "VDZ"; recognized = true; }if (gbasis.indexOf ("CCT") >= 0) { this.calculationType += "VTZ"; recognized = true; }if (gbasis.indexOf ("CCQ") >= 0) { this.calculationType += "VQZ"; recognized = true; }if (gbasis.indexOf ("CC5") >= 0) { this.calculationType += "V5Z"; recognized = true; }if (gbasis.indexOf ("CC6") >= 0) { this.calculationType += "V6Z"; recognized = true; }if (!recognized) this.calculationType += gbasis; } else { if (this.calculationType.length > 0) this.calculationType += " "; this.calculationType += igauss + "-" + JU.PT.rep (gbasis, "N", ""); if ("T".equals (this.calcOptions.get ("basis_options_DIFFSP"))) { if ("T".equals (this.calcOptions.get ("basis_options_DIFFS"))) this.calculationType += "+"; this.calculationType += "+"; }this.calculationType += "G"; if (DFunc || PFunc || FFunc) { this.calculationType += "("; if (FFunc) { this.calculationType += "f"; if (DFunc || PFunc) this.calculationType += ","; }if (DFunc) { this.calculationType += "d"; if (PFunc) this.calculationType += ","; }if (PFunc) this.calculationType += "p"; this.calculationType += ")"; }}if (DFTtype != null && DFTtype.indexOf ("NONE") < 0) { if (this.calculationType.length > 0) this.calculationType += " "; this.calculationType += DFTtype; }if (CItype != null && CItype.indexOf ("NONE") < 0) { if (this.calculationType.length > 0) this.calculationType += " "; this.calculationType += CItype; }if (CCtype != null && CCtype.indexOf ("NONE") < 0) { if (this.calculationType.length > 0) this.calculationType += " "; this.calculationType += CCtype; }if (perturb > 0) { if (this.calculationType.length > 0) this.calculationType += " "; this.calculationType += "MP" + perturb; }if (SCFtype != null) { if (this.calculationType.length > 0) this.calculationType += " "; this.calculationType += SCFtype + " " + Runtype; }}}); Clazz.defineMethod (c$, "readControlInfo", function () { this.readCalculationInfo ("contrl_options_"); }); Clazz.defineMethod (c$, "readBasisInfo", function () { this.readCalculationInfo ("basis_options_"); }); Clazz.defineMethod (c$, "readCalculationInfo", function (type) { if (this.calcOptions == null) { this.calcOptions = new java.util.Hashtable (); this.asc.setInfo ("calculationOptions", this.calcOptions); }while (this.rd () != null && (this.line = this.line.trim ()).length > 0) { if (this.line.indexOf ("=") < 0) continue; var tokens = J.adapter.smarter.AtomSetCollectionReader.getTokensStr (JU.PT.rep (this.line, "=", " = ") + " ?"); for (var i = 0; i < tokens.length; i++) { if (!tokens[i].equals ("=")) continue; try { var key = type + tokens[i - 1]; var value = (key.equals ("basis_options_SPLIT3") ? tokens[++i] + " " + tokens[++i] + " " + tokens[++i] : tokens[++i]); if (JU.Logger.debugging) JU.Logger.debug (key + " = " + value); this.calcOptions.put (key, value); } catch (e) { if (Clazz.exceptionOf (e, Exception)) { } else { throw e; } } } } }, "~S"); });