Browse Source

tweaked getOperators

Alexander Rose 6 years ago
parent
commit
a1eb58822b
1 changed files with 20 additions and 1 deletions
  1. 20 1
      src/mol-model/structure/structure/symmetry.ts

+ 20 - 1
src/mol-model/structure/structure/symmetry.ts

@@ -90,9 +90,28 @@ namespace StructureSymmetry {
 }
 
 function getOperators(symmetry: ModelSymmetry, ijkMin: Vec3, ijkMax: Vec3) {
+    const operators: SymmetryOperator[] = [];
+    const { spacegroup } = symmetry;
+    if (operators.length === 0) {
+        for (let op = 0; op < spacegroup.operators.length; op++) {
+            for (let i = ijkMin[0]; i < ijkMax[0]; i++) {
+                for (let j = ijkMin[1]; j < ijkMax[1]; j++) {
+                    for (let k = ijkMin[2]; k < ijkMax[2]; k++) {
+                        operators[operators.length] = Spacegroup.getSymmetryOperator(spacegroup, op, i, j, k);
+                    }
+                }
+            }
+        }
+    }
+    return operators;
+}
+
+function getOperatorsCached333(symmetry: ModelSymmetry) {
     const operators: SymmetryOperator[] = symmetry._operators_333 || [];
     const { spacegroup } = symmetry;
     if (operators.length === 0) {
+        const ijkMin = Vec3.create(-3, -3, -3)
+        const ijkMax = Vec3.create(3, 3, 3)
         operators[0] = Spacegroup.getSymmetryOperator(spacegroup, 0, 0, 0, 0)
         for (let op = 0; op < spacegroup.operators.length; op++) {
             for (let i = ijkMin[0]; i < ijkMax[0]; i++) {
@@ -150,7 +169,7 @@ async function findMatesRadius(ctx: RuntimeContext, structure: Structure, radius
     if (SpacegroupCell.isZero(spacegroup.cell)) return structure;
 
     if (ctx.shouldUpdate) await ctx.update('Initialing...');
-    const operators = getOperators(symmetry, Vec3.create(-3, -3, -3), Vec3.create(3, 3, 3));
+    const operators = getOperatorsCached333(symmetry);
     const lookup = structure.lookup3d;
 
     const assembler = Structure.Builder();