diff --git a/src/mol-data/sequence/TODO b/src/mol-data/sequence/TODO new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/mol-data/structure.ts b/src/mol-data/structure.ts deleted file mode 100644 index cc8bf49f34d41cddcc8c0333a9125dcf4a69137b..0000000000000000000000000000000000000000 --- a/src/mol-data/structure.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Copyright (c) 2017 molio contributors, licensed under MIT, See LICENSE file for more info. - * - * @author David Sehnal <david.sehnal@gmail.com> - */ - -import Atom from './structure/atom' -import AtomSet from './structure/atom/set' -import Structure from './structure/structure' -import Operator from './structure/operator' -import Unit from './structure/unit' - -export { Atom, AtomSet, Structure, Operator, Unit } \ No newline at end of file diff --git a/src/mol-data/_spec/atom-set.spec.ts b/src/mol-data/structure/_spec/atom-set.spec.ts similarity index 99% rename from src/mol-data/_spec/atom-set.spec.ts rename to src/mol-data/structure/_spec/atom-set.spec.ts index 62e5ea804532c83350c71907521a0bf514baea98..2ca79d8f9ff0ec27aa76da76ed11563fe2c5f5a1 100644 --- a/src/mol-data/_spec/atom-set.spec.ts +++ b/src/mol-data/structure/_spec/atom-set.spec.ts @@ -4,7 +4,7 @@ * @author David Sehnal <david.sehnal@gmail.com> */ -import { OrderedSet } from '../../mol-base/collections/integer' +import { OrderedSet } from '../../../mol-base/collections/integer' import AtomSet from '../structure/atom/set' import Atom from '../structure/atom' diff --git a/src/mol-data/model.ts b/src/mol-data/structure/model.ts similarity index 100% rename from src/mol-data/model.ts rename to src/mol-data/structure/model.ts diff --git a/src/mol-data/model/builders/mmcif.ts b/src/mol-data/structure/model/builders/mmcif.ts similarity index 94% rename from src/mol-data/model/builders/mmcif.ts rename to src/mol-data/structure/model/builders/mmcif.ts index 4d92bbc56ad435cf453d6cfe13c23e12c7b30c2f..3fa96b0383d303dd6d67735ac9187901560dff4f 100644 --- a/src/mol-data/model/builders/mmcif.ts +++ b/src/mol-data/structure/model/builders/mmcif.ts @@ -5,12 +5,11 @@ */ import { mmCIF } from '../data-format' -//import { Frame as mmCIF } from '../../../mol-io/reader/cif/schema/mmcif' import Model from '../model' -import Column from '../../../mol-base/collections/column' -import Table from '../../../mol-base/collections/table' -import { Interval, Segmentation } from '../../../mol-base/collections/integer' -import { newUUID } from '../../../mol-base/utils/uuid' +import Column from '../../../../mol-base/collections/column' +import Table from '../../../../mol-base/collections/table' +import { Interval, Segmentation } from '../../../../mol-base/collections/integer' +import { newUUID } from '../../../../mol-base/utils/uuid' import * as Hierarchy from '../properties/hierarchy' import Conformation from '../properties/conformation' import findHierarchyKeys from '../utils/hierarchy-keys' diff --git a/src/mol-data/model/constants.ts b/src/mol-data/structure/model/constants.ts similarity index 99% rename from src/mol-data/model/constants.ts rename to src/mol-data/structure/model/constants.ts index 5db57c7337f329a7e8a2885d29e9e982af69591e..48c863c7f897d9caff9874496d8df8b05848135a 100644 --- a/src/mol-data/model/constants.ts +++ b/src/mol-data/structure/model/constants.ts @@ -5,7 +5,7 @@ * @author David Sehnal <david.sehnal@gmail.com> */ -import BitFlags from '../../mol-base/utils/bit-flags' +import BitFlags from '../../../mol-base/utils/bit-flags' export const enum EntityType { Unknown = 'unknown', diff --git a/src/mol-data/model/data-format.ts b/src/mol-data/structure/model/data-format.ts similarity index 77% rename from src/mol-data/model/data-format.ts rename to src/mol-data/structure/model/data-format.ts index 128136b8659d84b309895436b2de7d505d7f0289..c5c4aa2e7216b16d02be62de4e8f8cff21b85850 100644 --- a/src/mol-data/model/data-format.ts +++ b/src/mol-data/structure/model/data-format.ts @@ -4,7 +4,7 @@ * @author David Sehnal <david.sehnal@gmail.com> */ -import { Frame as mmCIF_Frame } from '../../mol-io/reader/cif/schema/mmcif' +import { Frame as mmCIF_Frame } from '../../../mol-io/reader/cif/schema/mmcif' export interface mmCIF { kind: 'mmCIF', data: mmCIF_Frame } diff --git a/src/mol-data/model/model.ts b/src/mol-data/structure/model/model.ts similarity index 94% rename from src/mol-data/model/model.ts rename to src/mol-data/structure/model/model.ts index 12c5fe73ad01b26690a1dc6266baa404e6d04d49..b2dbf68fc8d59c0320ccdcfb237f4987cb30eb0b 100644 --- a/src/mol-data/model/model.ts +++ b/src/mol-data/structure/model/model.ts @@ -7,7 +7,7 @@ import DataFormat from './data-format' import HierarchyProperties from './properties/hierarchy' import ConformationProperties from './properties/conformation' -import UUID from '../../mol-base/utils/uuid' +import UUID from '../../../mol-base/utils/uuid' import buildMmCIF from './builders/mmcif' diff --git a/src/mol-data/model/properties/computed.ts b/src/mol-data/structure/model/properties/computed.ts similarity index 100% rename from src/mol-data/model/properties/computed.ts rename to src/mol-data/structure/model/properties/computed.ts diff --git a/src/mol-data/model/properties/conformation.ts b/src/mol-data/structure/model/properties/conformation.ts similarity index 86% rename from src/mol-data/model/properties/conformation.ts rename to src/mol-data/structure/model/properties/conformation.ts index 7ea3c52433d0e271961c193e3f64a7938d2a20d7..a80739667398ecff7735c4243cb30c0e6247a0c8 100644 --- a/src/mol-data/model/properties/conformation.ts +++ b/src/mol-data/structure/model/properties/conformation.ts @@ -4,8 +4,8 @@ * @author David Sehnal <david.sehnal@gmail.com> */ -import Column from '../../../mol-base/collections/column' -import UUID from '../../../mol-base/utils/uuid' +import Column from '../../../../mol-base/collections/column' +import UUID from '../../../../mol-base/utils/uuid' interface Conformation { id: UUID, diff --git a/src/mol-data/model/properties/format-specific.ts b/src/mol-data/structure/model/properties/format-specific.ts similarity index 100% rename from src/mol-data/model/properties/format-specific.ts rename to src/mol-data/structure/model/properties/format-specific.ts diff --git a/src/mol-data/model/properties/hierarchy.ts b/src/mol-data/structure/model/properties/hierarchy.ts similarity index 91% rename from src/mol-data/model/properties/hierarchy.ts rename to src/mol-data/structure/model/properties/hierarchy.ts index e86fc8983c4b1683b2c4a3b446b42f058afea7a3..dceb055c4bb8b53a0c5940d0ea302f0b9dbbf59f 100644 --- a/src/mol-data/model/properties/hierarchy.ts +++ b/src/mol-data/structure/model/properties/hierarchy.ts @@ -4,10 +4,10 @@ * @author David Sehnal <david.sehnal@gmail.com> */ -import Column from '../../../mol-base/collections/column' -import Table from '../../../mol-base/collections/table' -import { Segmentation } from '../../../mol-base/collections/integer' -import { Schema as mmCIF } from '../../../mol-io/reader/cif/schema/mmcif' +import Column from '../../../../mol-base/collections/column' +import Table from '../../../../mol-base/collections/table' +import { Segmentation } from '../../../../mol-base/collections/integer' +import { Schema as mmCIF } from '../../../../mol-io/reader/cif/schema/mmcif' const _esCache = Object.create(null); export interface ElementSymbol extends String { '@type': 'element-symbol' } diff --git a/src/mol-data/model/properties/transforms.ts b/src/mol-data/structure/model/properties/transforms.ts similarity index 100% rename from src/mol-data/model/properties/transforms.ts rename to src/mol-data/structure/model/properties/transforms.ts diff --git a/src/mol-data/model/utils/hierarchy-keys.ts b/src/mol-data/structure/model/utils/hierarchy-keys.ts similarity index 96% rename from src/mol-data/model/utils/hierarchy-keys.ts rename to src/mol-data/structure/model/utils/hierarchy-keys.ts index 6bc5a4a8c22a3b474a0406fc5d3474cfb36150da..b99cec0699e788ea95f843d0dc0a9c28c53f82f1 100644 --- a/src/mol-data/model/utils/hierarchy-keys.ts +++ b/src/mol-data/structure/model/utils/hierarchy-keys.ts @@ -4,9 +4,9 @@ * @author David Sehnal <david.sehnal@gmail.com> */ -import Column from '../../../mol-base/collections/column' +import Column from '../../../../mol-base/collections/column' import { Data, Segments, Keys } from '../properties/hierarchy' -import { Interval, Segmentation } from '../../../mol-base/collections/integer' +import { Interval, Segmentation } from '../../../../mol-base/collections/integer' function getResidueId(comp_id: string, seq_id: number, ins_code: string) { return `${comp_id} ${seq_id} ${ins_code}`; diff --git a/src/mol-data/query.ts b/src/mol-data/structure/query.ts similarity index 100% rename from src/mol-data/query.ts rename to src/mol-data/structure/query.ts diff --git a/src/mol-data/query/generators.ts b/src/mol-data/structure/query/generators.ts similarity index 97% rename from src/mol-data/query/generators.ts rename to src/mol-data/structure/query/generators.ts index d90d9c3b9d83122846309b595bdb1ea7fb0aae40..a647260f6f091f31aa644970f5ffd4ceffc05b14 100644 --- a/src/mol-data/query/generators.ts +++ b/src/mol-data/structure/query/generators.ts @@ -8,7 +8,7 @@ import Query from './query' //import Selection from './selection' import * as P from './properties' import { AtomSet, Atom } from '../structure' -import { OrderedSet } from '../../mol-base/collections/integer' +import { OrderedSet } from '../../../mol-base/collections/integer' export interface AtomGroupsSpec { entityTest: Atom.Predicate, diff --git a/src/mol-data/query/properties.ts b/src/mol-data/structure/query/properties.ts similarity index 100% rename from src/mol-data/query/properties.ts rename to src/mol-data/structure/query/properties.ts diff --git a/src/mol-data/query/query.ts b/src/mol-data/structure/query/query.ts similarity index 100% rename from src/mol-data/query/query.ts rename to src/mol-data/structure/query/query.ts diff --git a/src/mol-data/query/selection.ts b/src/mol-data/structure/query/selection.ts similarity index 96% rename from src/mol-data/query/selection.ts rename to src/mol-data/structure/query/selection.ts index d2ef57dff8594e637dc26539ae6f80a0ce55cc42..8e46f0f36595a9d1a9572b3867a1e29bdf2db488 100644 --- a/src/mol-data/query/selection.ts +++ b/src/mol-data/structure/query/selection.ts @@ -4,8 +4,8 @@ * @author David Sehnal <david.sehnal@gmail.com> */ -import Iterator from '../../mol-base/collections/iterator' -import HashSet from '../../mol-base/collections/hash-set' +import Iterator from '../../../mol-base/collections/iterator' +import HashSet from '../../../mol-base/collections/hash-set' import { Structure, Atom, AtomSet } from '../structure' type Selection = diff --git a/src/mol-data/structure/structure.ts b/src/mol-data/structure/structure.ts index cc995ad2c0c3dfcf0ac7e0e0ababd9a3775f865c..cc8bf49f34d41cddcc8c0333a9125dcf4a69137b 100644 --- a/src/mol-data/structure/structure.ts +++ b/src/mol-data/structure/structure.ts @@ -4,55 +4,10 @@ * @author David Sehnal <david.sehnal@gmail.com> */ -import { Model } from '../model' -import Unit from './unit' -import Operator from './operator' -import AtomSet from './atom/set' -import { OrderedSet } from '../../mol-base/collections/integer' +import Atom from './structure/atom' +import AtomSet from './structure/atom/set' +import Structure from './structure/structure' +import Operator from './structure/operator' +import Unit from './structure/unit' -interface Structure extends Readonly<{ - units: { readonly [id: number]: Unit }, - atoms: AtomSet -}> { } - -namespace Structure { - export const Empty = { units: {}, atoms: AtomSet.Empty }; - - export function ofModel(model: Model): Structure { - const chains = model.hierarchy.chainSegments; - const builder = Builder(); - - for (let c = 0; c < chains.count; c++) { - const unit = Unit.create(model, Operator.Identity); - builder.addUnit(unit); - builder.addAtoms(unit.id, OrderedSet.ofBounds(chains.segments[c], chains.segments[c + 1])); - } - - return builder.getStructure(); - } - - export interface Builder { - addUnit(unit: Unit): void, - addAtoms(unitId: number, atoms: OrderedSet): void, - getStructure(): Structure, - readonly atomCount: number - } - - class BuilderImpl implements Builder { - private units = Object.create(null); - private atoms = Object.create(null); - atomCount = 0; - - addUnit(unit: Unit) { this.units[unit.id] = unit; } - addAtoms(unitId: number, atoms: OrderedSet) { this.atoms[unitId] = atoms; this.atomCount += OrderedSet.size(atoms); } - getStructure(): Structure { return this.atomCount > 0 ? { units: this.units, atoms: AtomSet.create(this.atoms) } : Empty; } - } - - export function Builder(): Builder { return new BuilderImpl(); } - - - // TODO: "lift" atom set operators? - // TODO: "diff" -} - -export default Structure \ No newline at end of file +export { Atom, AtomSet, Structure, Operator, Unit } \ No newline at end of file diff --git a/src/mol-data/structure/atom.ts b/src/mol-data/structure/structure/atom.ts similarity index 95% rename from src/mol-data/structure/atom.ts rename to src/mol-data/structure/structure/atom.ts index 34a38d16998716d77685705cc23880a953cede96..ddce507fd645be816f3640ca4baaf9d24594f6e8 100644 --- a/src/mol-data/structure/atom.ts +++ b/src/mol-data/structure/structure/atom.ts @@ -4,7 +4,7 @@ * @author David Sehnal <david.sehnal@gmail.com> */ -import { Tuple } from '../../mol-base/collections/integer' +import { Tuple } from '../../../mol-base/collections/integer' import Unit from './unit' import Structure from './structure' diff --git a/src/mol-data/structure/atom/set.ts b/src/mol-data/structure/structure/atom/set.ts similarity index 96% rename from src/mol-data/structure/atom/set.ts rename to src/mol-data/structure/structure/atom/set.ts index 92a04dc706abe177ac4da6495571d46e95a7e455..25a77f42359a2ead849437e7f7dcb0fe511c294b 100644 --- a/src/mol-data/structure/atom/set.ts +++ b/src/mol-data/structure/structure/atom/set.ts @@ -4,7 +4,7 @@ * @author David Sehnal <david.sehnal@gmail.com> */ -import { OrderedSet, SortedArray, Iterator } from '../../../mol-base/collections/integer' +import { OrderedSet, SortedArray, Iterator } from '../../../../mol-base/collections/integer' import Atom from '../atom' import * as Impl from './set/impl' import createBuilder from './set/builder' diff --git a/src/mol-data/structure/atom/set/builder.ts b/src/mol-data/structure/structure/atom/set/builder.ts similarity index 93% rename from src/mol-data/structure/atom/set/builder.ts rename to src/mol-data/structure/structure/atom/set/builder.ts index a1940c367658c00ffa90229677c52ff4cb2063ae..1e6c4beda2fbdd74bb0c4aa6f782afae65f50db3 100644 --- a/src/mol-data/structure/atom/set/builder.ts +++ b/src/mol-data/structure/structure/atom/set/builder.ts @@ -5,8 +5,8 @@ */ import AtomSet from '../set' -import { OrderedSet } from '../../../../mol-base/collections/integer' -import { sortArray } from '../../../../mol-base/collections/sort' +import { OrderedSet } from '../../../../../mol-base/collections/integer' +import { sortArray } from '../../../../../mol-base/collections/sort' class Builder { private keys: number[] = []; diff --git a/src/mol-data/structure/atom/set/impl.ts b/src/mol-data/structure/structure/atom/set/impl.ts similarity index 98% rename from src/mol-data/structure/atom/set/impl.ts rename to src/mol-data/structure/structure/atom/set/impl.ts index fab4133aa2c8893318f49812005e26aefa859aa0..7f2f2d15f29343fb78accfc0e2706578e2a28c39 100644 --- a/src/mol-data/structure/atom/set/impl.ts +++ b/src/mol-data/structure/structure/atom/set/impl.ts @@ -4,9 +4,9 @@ * @author David Sehnal <david.sehnal@gmail.com> */ -import { SortedArray, Interval, Iterator, OrderedSet } from '../../../../mol-base/collections/integer' -import { sortArray } from '../../../../mol-base/collections/sort' -import { hash1 } from '../../../../mol-base/collections/hash-functions' +import { SortedArray, Interval, Iterator, OrderedSet } from '../../../../../mol-base/collections/integer' +import { sortArray } from '../../../../../mol-base/collections/sort' +import { hash1 } from '../../../../../mol-base/collections/hash-functions' import Atom from '../../atom' /** Long and painful implementation starts here */ diff --git a/src/mol-data/structure/atom/set/properties.ts b/src/mol-data/structure/structure/atom/set/properties.ts similarity index 100% rename from src/mol-data/structure/atom/set/properties.ts rename to src/mol-data/structure/structure/atom/set/properties.ts diff --git a/src/mol-data/structure/operator.ts b/src/mol-data/structure/structure/operator.ts similarity index 91% rename from src/mol-data/structure/operator.ts rename to src/mol-data/structure/structure/operator.ts index 484dd7590ef02326b08e28fe1dd55cfdf4b25b34..363331f27decfc9a3cb09118c810a99fa42f015d 100644 --- a/src/mol-data/structure/operator.ts +++ b/src/mol-data/structure/structure/operator.ts @@ -4,7 +4,7 @@ * @author David Sehnal <david.sehnal@gmail.com> */ -import { Mat4 } from '../../mol-base/math/linear-algebra' +import { Mat4 } from '../../../mol-base/math/linear-algebra' interface Operator extends Readonly<{ name: string, diff --git a/src/mol-data/structure/structure/structure.ts b/src/mol-data/structure/structure/structure.ts new file mode 100644 index 0000000000000000000000000000000000000000..31e001a276ac19ddfb1bbd8f96bf06747d2b1af6 --- /dev/null +++ b/src/mol-data/structure/structure/structure.ts @@ -0,0 +1,58 @@ +/** + * Copyright (c) 2017 molio contributors, licensed under MIT, See LICENSE file for more info. + * + * @author David Sehnal <david.sehnal@gmail.com> + */ + +import { Model } from '../model' +import Unit from './unit' +import Operator from './operator' +import AtomSet from './atom/set' +import { OrderedSet } from '../../../mol-base/collections/integer' + +interface Structure extends Readonly<{ + units: { readonly [id: number]: Unit }, + atoms: AtomSet +}> { } + +namespace Structure { + export const Empty = { units: {}, atoms: AtomSet.Empty }; + + export function ofModel(model: Model): Structure { + const chains = model.hierarchy.chainSegments; + const builder = Builder(); + + for (let c = 0; c < chains.count; c++) { + const unit = Unit.create(model, Operator.Identity); + builder.addUnit(unit); + builder.addAtoms(unit.id, OrderedSet.ofBounds(chains.segments[c], chains.segments[c + 1])); + } + + return builder.getStructure(); + } + + export interface Builder { + addUnit(unit: Unit): void, + addAtoms(unitId: number, atoms: OrderedSet): void, + getStructure(): Structure, + readonly atomCount: number + } + + class BuilderImpl implements Builder { + private units = Object.create(null); + private atoms = Object.create(null); + atomCount = 0; + + addUnit(unit: Unit) { this.units[unit.id] = unit; } + addAtoms(unitId: number, atoms: OrderedSet) { this.atoms[unitId] = atoms; this.atomCount += OrderedSet.size(atoms); } + getStructure(): Structure { return this.atomCount > 0 ? { units: this.units, atoms: AtomSet.create(this.atoms) } : Empty; } + } + + export function Builder(): Builder { return new BuilderImpl(); } + + + // TODO: "lift" atom set operators? + // TODO: "diff" +} + +export default Structure \ No newline at end of file diff --git a/src/mol-data/structure/unit.ts b/src/mol-data/structure/structure/unit.ts similarity index 100% rename from src/mol-data/structure/unit.ts rename to src/mol-data/structure/structure/unit.ts diff --git a/src/mol-data/volume/TODO b/src/mol-data/volume/TODO new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/perf-tests/sets.ts b/src/perf-tests/sets.ts index e4f0670854dd9eeb97a2c0faf92797f1c6396e17..b499ae2a3e6a52cc857b33751280b9afd5259e3f 100644 --- a/src/perf-tests/sets.ts +++ b/src/perf-tests/sets.ts @@ -1,6 +1,6 @@ import * as B from 'benchmark' import { Tuple, Segmentation, OrderedSet as OrdSet } from '../mol-base/collections/integer' -import { AtomSet } from '../mol-data/structure' +import { AtomSet } from '../mol-data/structure/structure' export namespace Iteration { const U = 1000, V = 2500; diff --git a/src/perf-tests/structure.ts b/src/perf-tests/structure.ts index b066edf918f3c60defde1c005a54b5d68851aec1..7da905f45071fb7ce7fca58858fcbf6dfe269614 100644 --- a/src/perf-tests/structure.ts +++ b/src/perf-tests/structure.ts @@ -10,9 +10,9 @@ import * as util from 'util' import * as fs from 'fs' import CIF from '../mol-io/reader/cif' -import { Model } from '../mol-data/Model' -import { Structure, Atom, AtomSet } from '../mol-data/structure' -import * as Q from '../mol-data/query' +import { Model } from '../mol-data/structure/model' +import { Structure, Atom, AtomSet } from '../mol-data/structure/structure' +import * as Q from '../mol-data/structure/query' import { OrderedSet as OrdSet, Segmentation } from '../mol-base/collections/integer' require('util.promisify').shim(); diff --git a/src/script.ts b/src/script.ts index e42be6c0bde858119ffa4fee6c9aa6aa4acf2019..7408e72ea654670cc6c0c0a75ab2d98e7d43b0b5 100644 --- a/src/script.ts +++ b/src/script.ts @@ -17,7 +17,7 @@ import CIF from './mol-io/reader/cif' import Computation from './mol-base/computation' -import buildModels from './mol-data/model/builders/mmcif' +import buildModels from './mol-data/structure/model/builders/mmcif' // import { toTypedFrame as applySchema } from './reader/cif/schema' import { generateSchema } from './mol-io/reader/cif/schema/utils'