From fe3c314c02288c17cbb1feb26b9c33c45dc1f83f Mon Sep 17 00:00:00 2001 From: Alexander Rose <alex.rose@rcsb.org> Date: Thu, 14 Feb 2019 17:12:18 -0800 Subject: [PATCH] use memoize1 for getOperatorsCached333 --- src/mol-model/structure/structure/symmetry.ts | 32 +++++++++---------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/src/mol-model/structure/structure/symmetry.ts b/src/mol-model/structure/structure/symmetry.ts index e5ba4aed6..80d80984c 100644 --- a/src/mol-model/structure/structure/symmetry.ts +++ b/src/mol-model/structure/structure/symmetry.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2017-2018 mol* contributors, licensed under MIT, See LICENSE file for more info. + * Copyright (c) 2017-2019 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> * @author Alexander Rose <alexander.rose@weirdbyte.de> @@ -14,6 +14,7 @@ import Unit from './unit'; import { EquivalenceClasses } from 'mol-data/util'; import { Vec3 } from 'mol-math/linear-algebra'; import { SymmetryOperator, Spacegroup, SpacegroupCell } from 'mol-math/geometry'; +import { memoize1 } from 'mol-util/memoize'; namespace StructureSymmetry { export function buildAssembly(structure: Structure, asmName: string) { @@ -106,28 +107,25 @@ function getOperators(symmetry: ModelSymmetry, ijkMin: Vec3, ijkMax: Vec3) { return operators; } -function getOperatorsCached333(symmetry: ModelSymmetry) { - const operators: SymmetryOperator[] = symmetry._operators_333 || []; +const getOperatorsCached333 = memoize1((symmetry: ModelSymmetry) => { + const ijkMin = Vec3.create(-3, -3, -3) + const ijkMax = Vec3.create(3, 3, 3) + const operators: SymmetryOperator[] = []; 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++) { - for (let j = ijkMin[1]; j < ijkMax[1]; j++) { - for (let k = ijkMin[2]; k < ijkMax[2]; k++) { - // we have added identity as the 1st operator. - if (op === 0 && i === 0 && j === 0 && k === 0) continue; - operators[operators.length] = Spacegroup.getSymmetryOperator(spacegroup, op, i, j, k); - } + 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++) { + for (let j = ijkMin[1]; j < ijkMax[1]; j++) { + for (let k = ijkMin[2]; k < ijkMax[2]; k++) { + // we have added identity as the 1st operator. + if (op === 0 && i === 0 && j === 0 && k === 0) continue; + operators[operators.length] = Spacegroup.getSymmetryOperator(spacegroup, op, i, j, k); } } } - symmetry._operators_333 = operators; } return operators; -} +}) function assembleOperators(structure: Structure, operators: ReadonlyArray<SymmetryOperator>) { const assembler = Structure.Builder(); -- GitLab