UNPKG

biojs-vis-pdbviewer

Version:

A BioJS 2.0 component to view protein structures

92 lines (91 loc) 3.44 kB
Clazz.declarePackage ("JM"); Clazz.load (["JM.PhosphorusPolymer"], "JM.NucleicPolymer", ["JU.Measure", "$.P4", "$.V3", "JM.HBond"], function () { c$ = Clazz.decorateAsClass (function () { this.isDssrSet = false; Clazz.instantialize (this, arguments); }, JM, "NucleicPolymer", JM.PhosphorusPolymer); Clazz.makeConstructor (c$, function (monomers) { Clazz.superConstructor (this, JM.NucleicPolymer, [monomers]); this.type = 2; this.hasWingPoints = true; }, "~A"); Clazz.defineMethod (c$, "getNucleicPhosphorusAtom", function (monomerIndex) { return this.monomers[monomerIndex].getLeadAtom (); }, "~N"); Clazz.overrideMethod (c$, "calcEtaThetaAngles", function () { var eta = NaN; for (var i = 0; i < this.monomerCount - 2; ++i) { var m1 = this.monomers[i]; var m2 = this.monomers[i + 1]; var p1 = m1.getP (); var c41 = m1.getC4P (); var p2 = m2.getP (); var c42 = m2.getC4P (); if (i > 0) { var m0 = this.monomers[i - 1]; var c40 = m0.getC4P (); eta = JU.Measure.computeTorsion (c40, p1, c41, p2, true); }var theta = JU.Measure.computeTorsion (p1, c41, p2, c42, true); if (eta < 0) eta += 360; if (theta < 0) theta += 360; m1.setGroupParameter (1112539141, eta); m1.setGroupParameter (1112539152, theta); } return true; }); Clazz.overrideMethod (c$, "calcRasmolHydrogenBonds", function (polymer, bsA, bsB, vAtoms, nMaxPerResidue, min, checkDistances, dsspIgnoreHydrogens) { var other = polymer; var vNorm = new JU.V3 (); var vAB = new JU.V3 (); var vAC = new JU.V3 (); for (var i = this.monomerCount; --i >= 0; ) { var myNucleotide = this.monomers[i]; if (!myNucleotide.isPurine ()) continue; var myN3 = myNucleotide.getN3 (); var isInA = bsA.get (myN3.i); if (!isInA && !bsB.get (myN3.i)) continue; var myN1 = myNucleotide.getN1 (); var myN9 = myNucleotide.getN0 (); var plane = new JU.P4 (); JU.Measure.getPlaneThroughPoints (myN3, myN1, myN9, vNorm, vAB, vAC, plane); var bestN3 = null; var minDist2 = 25; var bestNucleotide = null; for (var j = other.monomerCount; --j >= 0; ) { var otherNucleotide = other.monomers[j]; if (!otherNucleotide.isPyrimidine ()) continue; var otherN3 = otherNucleotide.getN3 (); if (isInA ? !bsB.get (otherN3.i) : !bsA.get (otherN3.i)) continue; var otherN1 = otherNucleotide.getN0 (); var dist2 = myN1.distanceSquared (otherN3); if (dist2 < minDist2 && myN9.distanceSquared (otherN1) > 50 && Math.abs (JU.Measure.distanceToPlane (plane, otherN3)) < 1) { bestNucleotide = otherNucleotide; bestN3 = otherN3; minDist2 = dist2; }} var n = 0; if (bestN3 != null) { n += JM.NucleicPolymer.addHydrogenBond (vAtoms, myN1, bestN3); if (n >= nMaxPerResidue) continue; if (myNucleotide.isGuanine ()) { n += JM.NucleicPolymer.addHydrogenBond (vAtoms, myNucleotide.getN2 (), bestNucleotide.getO2 ()); if (n >= nMaxPerResidue) continue; n += JM.NucleicPolymer.addHydrogenBond (vAtoms, myNucleotide.getO6 (), bestNucleotide.getN4 ()); if (n >= nMaxPerResidue) continue; } else { n += JM.NucleicPolymer.addHydrogenBond (vAtoms, myNucleotide.getN6 (), bestNucleotide.getO4 ()); }}} }, "JM.BioPolymer,JU.BS,JU.BS,JU.Lst,~N,~A,~B,~B"); c$.addHydrogenBond = Clazz.defineMethod (c$, "addHydrogenBond", function (vAtoms, atom1, atom2) { if (atom1 == null || atom2 == null) return 0; vAtoms.addLast ( new JM.HBond (atom1, atom2, 18432, 1, 0, 0)); return 1; }, "JU.Lst,JM.Atom,JM.Atom"); Clazz.defineStatics (c$, "htGroup1", null); });