Clazz.declarePackage ("JM"); Clazz.load (["J.api.AtomIndexIterator"], "JM.AtomIteratorWithinModel", ["J.atomdata.RadiusData"], function () { c$ = Clazz.decorateAsClass (function () { this.cubeIterator = null; this.bspf = null; this.threadSafe = false; this.hemisphereOnly = false; this.isZeroBased = false; this.modelIndex = 2147483647; this.atomIndex = -1; this.zeroBase = 0; this.distanceSquared = 0; this.bsSelected = null; this.isGreaterOnly = false; this.checkGreater = false; this.radiusData = null; this.vdw1 = 0; this.isVdw = false; this.atoms = null; this.vwr = null; this.iNext = 0; Clazz.instantialize (this, arguments); }, JM, "AtomIteratorWithinModel", null, J.api.AtomIndexIterator); Clazz.makeConstructor (c$, function () { }); Clazz.defineMethod (c$, "initialize", function (bspf, bsSelected, isGreaterOnly, isZeroBased, hemisphereOnly, threadSafe) { this.bspf = bspf; this.bsSelected = bsSelected; this.isGreaterOnly = isGreaterOnly; this.isZeroBased = isZeroBased; this.hemisphereOnly = hemisphereOnly; this.threadSafe = threadSafe; this.cubeIterator = null; }, "J.bspt.Bspf,JU.BS,~B,~B,~B,~B"); Clazz.overrideMethod (c$, "setModel", function (modelSet, modelIndex, firstModelAtom, atomIndex, center, distance, rd) { if (this.threadSafe) modelIndex = -1 - modelIndex; if (modelIndex != this.modelIndex || this.cubeIterator == null) { this.cubeIterator = this.bspf.getCubeIterator (modelIndex); this.modelIndex = modelIndex; }this.zeroBase = (this.isZeroBased ? firstModelAtom : 0); if (distance == -2147483648) return; this.atomIndex = (distance < 0 ? -1 : atomIndex); this.isVdw = (rd != null); if (this.isVdw) { this.radiusData = rd; this.atoms = modelSet.at; this.vwr = modelSet.vwr; distance = (rd.factorType === J.atomdata.RadiusData.EnumType.OFFSET ? 5 + rd.value : 5 * rd.value); this.vdw1 = this.atoms[atomIndex].getVanderwaalsRadiusFloat (this.vwr, rd.vdwType); }this.checkGreater = (this.isGreaterOnly && atomIndex != 2147483647); this.setCenter (center, distance); }, "JM.ModelSet,~N,~N,~N,JU.T3,~N,J.atomdata.RadiusData"); Clazz.overrideMethod (c$, "setCenter", function (center, distance) { this.setCenter2 (center, distance); }, "JU.T3,~N"); Clazz.defineMethod (c$, "setCenter2", function (center, distance) { if (this.cubeIterator == null) return; this.cubeIterator.initialize (center, distance, this.hemisphereOnly); this.distanceSquared = distance * distance; }, "JU.T3,~N"); Clazz.overrideMethod (c$, "hasNext", function () { return this.hasNext2 (); }); Clazz.defineMethod (c$, "hasNext2", function () { if (this.atomIndex >= 0) while (this.cubeIterator.hasMoreElements ()) { var a = this.cubeIterator.nextElement (); if ((this.iNext = a.i) != this.atomIndex && (!this.checkGreater || this.iNext > this.atomIndex) && (this.bsSelected == null || this.bsSelected.get (this.iNext))) { return true; }} else if (this.cubeIterator.hasMoreElements ()) { var a = this.cubeIterator.nextElement (); this.iNext = a.i; return true; }this.iNext = -1; return false; }); Clazz.overrideMethod (c$, "next", function () { return this.iNext - this.zeroBase; }); Clazz.overrideMethod (c$, "foundDistance2", function () { return (this.cubeIterator == null ? -1 : this.cubeIterator.foundDistance2 ()); }); Clazz.overrideMethod (c$, "addAtoms", function (bsResult) { var iAtom; while (this.hasNext ()) if ((iAtom = this.next ()) >= 0) { var d; if (this.isVdw) { d = this.atoms[iAtom].getVanderwaalsRadiusFloat (this.vwr, this.radiusData.vdwType) + this.vdw1; switch (this.radiusData.factorType) { case J.atomdata.RadiusData.EnumType.OFFSET: d += this.radiusData.value * 2; break; case J.atomdata.RadiusData.EnumType.FACTOR: d *= this.radiusData.value; break; } d *= d; } else { d = this.distanceSquared; }if (this.foundDistance2 () <= d) bsResult.set (iAtom); } }, "JU.BS"); Clazz.overrideMethod (c$, "release", function () { if (this.cubeIterator != null) { this.cubeIterator.release (); this.cubeIterator = null; }}); Clazz.overrideMethod (c$, "getPosition", function () { return null; }); });