Browse Source

avoid using lookup3d when boundary is sufficient

Alexander Rose 4 years ago
parent
commit
459cfd7ab8

+ 2 - 2
src/mol-model/structure/structure/unit/bonds/inter-compute.ts

@@ -47,7 +47,6 @@ function findPairBonds(unitA: Unit.Atomic, unitB: Unit.Atomic, props: BondComput
     const { occupancy: occupancyB } = unitB.model.atomicConformation;
     const hasOccupancy = occupancyA.isDefined && occupancyB.isDefined;
 
-    const { lookup3d } = unitB;
     const structConn = unitA.model === unitB.model && StructConn.Provider.get(unitA.model);
     const indexPairs = unitA.model === unitB.model && IndexPairBonds.Provider.get(unitA.model);
 
@@ -56,7 +55,7 @@ function findPairBonds(unitA: Unit.Atomic, unitB: Unit.Atomic, props: BondComput
     const imageTransform = Mat4.mul(_imageTransform, unitB.conformation.operator.inverse, unitA.conformation.operator.matrix);
     const isNotIdentity = !Mat4.isIdentity(imageTransform);
 
-    const { center: bCenter, radius: bRadius } = lookup3d.boundary.sphere;
+    const { center: bCenter, radius: bRadius } = unitB.boundary.sphere;
     const testDistanceSq = (bRadius + MAX_RADIUS) * (bRadius + MAX_RADIUS);
 
     builder.startUnitPair(unitA, unitB);
@@ -107,6 +106,7 @@ function findPairBonds(unitA: Unit.Atomic, unitB: Unit.Atomic, props: BondComput
 
         const occA = occupancyA.value(aI);
 
+        const { lookup3d } = unitB;
         const { indices, count, squaredDistances } = lookup3d.find(_imageA[0], _imageA[1], _imageA[2], MAX_RADIUS);
         if (count === 0) continue;
 

+ 3 - 4
src/mol-model/structure/structure/util/lookup3d.ts

@@ -42,7 +42,7 @@ export namespace StructureResult {
 
 export class StructureLookup3D {
     private unitLookup: Lookup3D;
-    private pivot = Vec3.zero();
+    private pivot = Vec3();
 
     findUnitIndices(x: number, y: number, z: number, radius: number): Result<number> {
         return this.unitLookup.find(x, y, z, radius);
@@ -155,11 +155,10 @@ export class StructureLookup3D {
         const zs = new Float32Array(unitCount);
         const radius = new Float32Array(unitCount);
 
-        const center = Vec3.zero();
+        const center = Vec3();
         for (let i = 0; i < unitCount; i++) {
             const unit = units[i];
-            const lookup = unit.lookup3d;
-            const s = lookup.boundary.sphere;
+            const s = unit.boundary.sphere;
 
             Vec3.transformMat4(center, s.center, unit.conformation.operator.matrix);