diff --git a/src/mol-model/structure/query/generators.ts b/src/mol-model/structure/query/generators.ts index e8d8ab6469692124e43ac8eaf7a846b612e4ac2f..305488104df685fbfc81f9779cc712d0970e7bc2 100644 --- a/src/mol-model/structure/query/generators.ts +++ b/src/mol-model/structure/query/generators.ts @@ -45,7 +45,7 @@ function atomGroupsLinear(atomTest: Atom.Predicate): Query { for (let i = 0, _i = unitIds.length; i < _i; i++) { const unitId = unitIds[i]; - l.unit = units.get(unitId); + l.unit = units[unitId]; const set = AtomSet.unitGetByIndex(atoms, i); builder.beginUnit(); @@ -69,7 +69,7 @@ function atomGroupsSegmented({ entityTest, chainTest, residueTest, atomTest }: A for (let i = 0, _i = unitIds.length; i < _i; i++) { const unitId = unitIds[i]; - const unit = units.get(unitId); + const unit = units[unitId]; l.unit = unit; const set = AtomSet.unitGetByIndex(atoms, i); @@ -160,7 +160,7 @@ function atomGroupsGrouped({ entityTest, chainTest, residueTest, atomTest, group for (let i = 0, _i = unitIds.length; i < _i; i++) { const unitId = unitIds[i]; - const unit = units.get(unitId); + const unit = units[unitId]; l.unit = unit; const set = AtomSet.unitGetByIndex(atoms, i); diff --git a/src/mol-model/structure/query/selection.ts b/src/mol-model/structure/query/selection.ts index 54eef86038f21229801286ba6dd8c5628b808758..3f568b501a55d72bdf4d17bca5e2a2789e2a3552 100644 --- a/src/mol-model/structure/query/selection.ts +++ b/src/mol-model/structure/query/selection.ts @@ -6,7 +6,6 @@ import Iterator from 'mol-data/iterator' import { HashSet } from 'mol-data/util' -import { IntMap } from 'mol-data/int' import { Structure, Atom, AtomSet } from '../structure' type Selection = @@ -116,19 +115,20 @@ namespace Selection { export default Selection function unionUnits(xs: Structure[]): Structure['units'] { - let prev = xs[0].units; - let sameUnits = true; - for (let i = 1, _i = xs.length; i < _i; i++) { - if (xs[i].units !== prev) sameUnits = false; - } - if (sameUnits) return prev; - - const ret = IntMap.copy(prev); - for (let i = 1, _i = xs.length; i < _i; i++) { - const units = xs[i].units; - if (units !== prev) IntMap.addFrom(ret, units); - prev = units; - } - - return ret; + return xs[0].units; +// let prev = xs[0].units; + // let sameUnits = true; + // for (let i = 1, _i = xs.length; i < _i; i++) { + // if (xs[i].units !== prev) sameUnits = false; + // } + // if (sameUnits) return prev; + + // const ret = [...prev]; + // for (let i = 1, _i = xs.length; i < _i; i++) { + // const units = xs[i].units; + // if (units !== prev) IntMap.addFrom(ret, units); + // prev = units; + // } + + //return ret; } diff --git a/src/mol-model/structure/structure/atom.ts b/src/mol-model/structure/structure/atom.ts index 55a88dcb633af95e0242d38dae0750397e6c708a..217bbb1eb581c5d869c3c91f70d100e8c598fa8f 100644 --- a/src/mol-model/structure/structure/atom.ts +++ b/src/mol-model/structure/structure/atom.ts @@ -29,7 +29,7 @@ namespace Atom { export interface Predicate extends Property<boolean> { } export function updateLocation(structure: Structure, l: Location, atom: Atom) { - l.unit = structure.units.get(unit(atom)); + l.unit = structure.units[unit(atom)]; l.atom = index(atom); return l; } diff --git a/src/mol-model/structure/structure/structure.ts b/src/mol-model/structure/structure/structure.ts index da8546c2cf24c4d8d6ec76ac2cdc9d0bd60cd88e..77c37e9ad366fa983db1f3290fd1560d786bc3ce 100644 --- a/src/mol-model/structure/structure/structure.ts +++ b/src/mol-model/structure/structure/structure.ts @@ -4,7 +4,7 @@ * @author David Sehnal <david.sehnal@gmail.com> */ -import { OrderedSet, Iterator, IntMap } from 'mol-data/int' +import { OrderedSet, Iterator } from 'mol-data/int' import { UniqueArray } from 'mol-data/util' import SymmetryOperator from 'mol-math/geometry/symmetry-operator' import { Model, Format } from '../model' @@ -15,14 +15,14 @@ import Atom from './atom' interface Structure extends Readonly<{ - units: IntMap<Unit>, + units: Unit[], atoms: AtomSet }> { } namespace Structure { - export const Empty: Structure = { units: IntMap.Empty, atoms: AtomSet.Empty }; + export const Empty: Structure = { units: [], atoms: AtomSet.Empty }; - export function create(units: IntMap<Unit>, atoms: AtomSet): Structure { + export function create(units: Unit[], atoms: AtomSet): Structure { return { units, atoms }; } @@ -54,12 +54,12 @@ namespace Structure { class BuilderImpl implements Builder { private _unitId = 0; - private units = IntMap.Mutable<Unit>(); + private units: Unit[] = []; private atoms = AtomSet.Generator(); atomCount = 0; add(unit: Unit, atoms: OrderedSet) { const id = this.addUnit(unit); this.setAtoms(id, atoms); } - addUnit(unit: Unit) { const id = this._unitId++; this.units.set(id, unit); return id; } + addUnit(unit: Unit) { const id = this._unitId++; this.units[id] = unit; return id; } setAtoms(unitId: number, atoms: OrderedSet) { this.atoms.add(unitId, atoms); this.atomCount += OrderedSet.size(atoms); } getStructure(): Structure { return this.atomCount > 0 ? Structure.create(this.units, this.atoms.getSet()) : Empty; } } @@ -78,7 +78,7 @@ namespace Structure { const arr = UniqueArray.create<Model['id'], Model>(); const ids = AtomSet.unitIds(atoms); for (let i = 0; i < ids.length; i++) { - const u = units.get(ids[i]); + const u = units[ids[i]]; UniqueArray.add(arr, u.model.id, u.model); } return arr.array; diff --git a/src/mol-model/structure/structure/symmetry.ts b/src/mol-model/structure/structure/symmetry.ts index a0348b6745dc02f4ba01c20542fdaa30d6cabf86..115a372b3dee129e335893f24a6dbda41eaede2a 100644 --- a/src/mol-model/structure/structure/symmetry.ts +++ b/src/mol-model/structure/structure/symmetry.ts @@ -34,7 +34,7 @@ function buildAssemblyImpl(structure: Structure, name: string) { for (const oper of g.operators) { for (let uI = 0, _uI = unitIds.length; uI < _uI; uI++) { - const unit = units.get(unitIds[uI]); + const unit = units[unitIds[uI]]; assembler.add(Unit.withOperator(unit, oper), AtomSet.unitGetByIndex(atoms, uI)); } } diff --git a/src/perf-tests/structure.ts b/src/perf-tests/structure.ts index 204ac9df92c9617de2cf7bb227e0d7d7d9b33208..d0f9286bcfa152dfd8dc521708c4659546d53e0a 100644 --- a/src/perf-tests/structure.ts +++ b/src/perf-tests/structure.ts @@ -74,7 +74,7 @@ export namespace PropertyAccess { let s = 0; for (let i = 0, _i = unitIds.length; i < _i; i++) { - l.unit = units.get(unitIds[i]); + l.unit = units[unitIds[i]]; const set = AtomSet.unitGetByIndex(atoms, i); @@ -96,7 +96,7 @@ export namespace PropertyAccess { let vA = 0, cC = 0, rC = 0; for (let i = 0, _i = unitIds.length; i < _i; i++) { - const unit = units.get(unitIds[i]); + const unit = units[unitIds[i]]; l.unit = unit; const set = AtomSet.unitGetByIndex(atoms, i); @@ -134,7 +134,7 @@ export namespace PropertyAccess { let s = 0; for (let i = 0, _i = unitIds.length; i < _i; i++) { - const unit = units.get(unitIds[i]); + const unit = units[unitIds[i]]; l.unit = unit; const set = AtomSet.unitGetByIndex(atoms, i); const residuesIt = Segmentation.transientSegments(unit.hierarchy.residueSegments, set); @@ -155,7 +155,7 @@ export namespace PropertyAccess { const l = Atom.Location(); while (atomsIt.hasNext) { const a = atomsIt.move(); - l.unit = units.get(Atom.unit(a)); + l.unit = units[Atom.unit(a)]; l.atom = Atom.index(a); s += p(l); } @@ -200,7 +200,7 @@ export namespace PropertyAccess { for (let i = 0, _i = unitIds.length; i < _i; i++) { const unitId = unitIds[i]; - const unit = units.get(unitId); + const unit = units[unitId]; const set = AtomSet.unitGetByIndex(atoms, i); //const { residueIndex, chainIndex } = unit; const p = unit.conformation.atomId.value;