| Clazz.declarePackage ("JS"); | |
| Clazz.load (null, "JS.SmilesMeasure", ["JU.PT"], function () { | |
| c$ = Clazz.decorateAsClass (function () { | |
| this.search = null; | |
| this.nPoints = 0; | |
| this.type = 0; | |
| this.index = 0; | |
| this.isNot = false; | |
| this.indices = null; | |
| this.minmax = null; | |
| this.points = null; | |
| Clazz.instantialize (this, arguments); | |
| }, JS, "SmilesMeasure"); | |
| Clazz.prepareFields (c$, function () { | |
| this.indices = Clazz.newIntArray (4, 0); | |
| this.points = new Array (4); | |
| }); | |
| Clazz.makeConstructor (c$, | |
| function (search, index, type, isNot, minmax) { | |
| this.search = search; | |
| this.type = Math.min (4, Math.max (type, 2)); | |
| this.index = index; | |
| this.isNot = isNot; | |
| this.minmax = minmax; | |
| for (var i = minmax.length - 2; i >= 0; i -= 2) if (minmax[i] > minmax[i + 1]) { | |
| var min = minmax[i + 1]; | |
| minmax[i + 1] = minmax[i]; | |
| minmax[i] = min; | |
| } | |
| }, "JS.SmilesSearch,~N,~N,~B,~A"); | |
| Clazz.defineMethod (c$, "addPoint", | |
| function (index) { | |
| if (this.nPoints == this.type) return false; | |
| if (this.nPoints == 0) for (var i = 1; i < this.type; i++) this.indices[i] = index + i; | |
| this.indices[this.nPoints++] = index; | |
| return true; | |
| }, "~N"); | |
| Clazz.defineMethod (c$, "check", | |
| function () { | |
| for (var i = 0; i < this.type; i++) { | |
| var iAtom = this.search.patternAtoms[this.indices[i]].getMatchingAtomIndex (); | |
| this.points[i] = this.search.targetAtoms[iAtom]; | |
| } | |
| var d = 0; | |
| switch (this.type) { | |
| case 2: | |
| d = this.points[0].distance (this.points[1]); | |
| break; | |
| case 3: | |
| this.search.v.vA.sub2 (this.points[0], this.points[1]); | |
| this.search.v.vB.sub2 (this.points[2], this.points[1]); | |
| d = this.search.v.vA.angle (this.search.v.vB) / 0.017453292; | |
| break; | |
| case 4: | |
| d = JS.SmilesMeasure.setTorsionData (this.points[0], this.points[1], this.points[2], this.points[3], this.search.v, true); | |
| break; | |
| } | |
| for (var i = this.minmax.length - 2; i >= 0; i -= 2) if (d >= this.minmax[i] && d <= this.minmax[i + 1]) return !this.isNot; | |
| return this.isNot; | |
| }); | |
| c$.setTorsionData = Clazz.defineMethod (c$, "setTorsionData", | |
| function (pt1a, pt1, pt2, pt2a, v, withDihedral) { | |
| v.vTemp1.sub2 (pt1a, pt1); | |
| v.vTemp2.sub2 (pt2a, pt2); | |
| if (!withDihedral) return 0; | |
| v.vNorm2.sub2 (pt1, pt2); | |
| v.vNorm2.normalize (); | |
| v.vTemp1.cross (v.vTemp1, v.vNorm2); | |
| v.vTemp1.normalize (); | |
| v.vTemp2.cross (v.vTemp2, v.vNorm2); | |
| v.vTemp2.normalize (); | |
| v.vNorm3.cross (v.vTemp1, v.vTemp2); | |
| return v.vTemp1.angle (v.vTemp2) / 0.017453292 * (v.vNorm2.dot (v.vNorm3) < 0 ? 1 : -1); | |
| }, "JU.T3,JU.T3,JU.T3,JU.T3,JS.VTemp,~B"); | |
| Clazz.overrideMethod (c$, "toString", | |
| function () { | |
| var s = "(." + "__dat".charAt (this.type) + this.index + ":" + JU.PT.toJSON (null, this.minmax) + ") for"; | |
| for (var i = 0; i < this.type; i++) s += " " + (i >= this.nPoints ? "?" : "" + this.indices[i]); | |
| return s; | |
| }); | |
| Clazz.defineStatics (c$, | |
| "TYPES", "__dat", | |
| "radiansPerDegree", (0.017453292519943295)); | |
| }); | |