diff --git a/src/mol-model/structure/model/formats/gro.ts b/src/mol-model/structure/model/formats/gro.ts index cad8c441a624c1401684d7b8f285d78259908d60..cb868ff96ee01927a9fb29f36640b62967e549bc 100644 --- a/src/mol-model/structure/model/formats/gro.ts +++ b/src/mol-model/structure/model/formats/gro.ts @@ -11,7 +11,7 @@ import { Atoms } from 'mol-io/reader/gro/schema' import Format from '../format' import Model from '../model' import * as Hierarchy from '../properties/hierarchy' -import Conformation from '../properties/conformation' +import AtomSiteConformation from '../properties/atom-site-conformation' import CoarseGrained from '../properties/coarse-grained' import findHierarchyKeys from '../utils/hierarchy-keys' import { guessElement } from '../utils/guess-element' @@ -77,7 +77,7 @@ function createHierarchyData(atomsData: Atoms, offsets: HierarchyOffsets): Hiera return { atoms, residues, chains }; } -function getConformation(atoms: Atoms): Conformation { +function getConformation(atoms: Atoms): AtomSiteConformation { return { id: UUID.create(), atomId: atoms.atomNumber, @@ -105,7 +105,7 @@ function createModel(format: gro_Format, modelNum: number, previous?: Model): Mo if (previous && isHierarchyDataEqual(previous.hierarchy, hierarchyData)) { return { ...previous, - conformation: getConformation(structure.atoms) + atomSiteConformation: getConformation(structure.atoms) }; } @@ -133,7 +133,7 @@ function createModel(format: gro_Format, modelNum: number, previous?: Model): Mo hierarchy, entities, sequence: Sequence.fromHierarchy(hierarchy), - conformation: getConformation(structure.atoms), + atomSiteConformation: getConformation(structure.atoms), coarseGrained: CoarseGrained.Empty, symmetry: { assemblies: [] }, atomCount: structure.atoms.count diff --git a/src/mol-model/structure/model/formats/mmcif.ts b/src/mol-model/structure/model/formats/mmcif.ts index d88ca8ac714ff7ec3a1b37f667870f00d65313bc..dddb046275d41d5d8a553eb49b92c22e34d696e3 100644 --- a/src/mol-model/structure/model/formats/mmcif.ts +++ b/src/mol-model/structure/model/formats/mmcif.ts @@ -10,7 +10,7 @@ import { Interval, Segmentation } from 'mol-data/int' import Format from '../format' import Model from '../model' import * as Hierarchy from '../properties/hierarchy' -import Conformation from '../properties/conformation' +import AtomSiteConformation from '../properties/atom-site-conformation' import CoarseGrained from '../properties/coarse-grained' import Symmetry from '../properties/symmetry' import findHierarchyKeys from '../utils/hierarchy-keys' @@ -67,7 +67,7 @@ function createHierarchyData({ data }: mmCIF_Format, bounds: Interval, offsets: return { atoms, residues, chains }; } -function getConformation({ data }: mmCIF_Format, bounds: Interval): Conformation { +function getConformation({ data }: mmCIF_Format, bounds: Interval): AtomSiteConformation { const start = Interval.start(bounds), end = Interval.end(bounds); const { atom_site } = data; return { @@ -99,7 +99,7 @@ function createModel(format: mmCIF_Format, bounds: Interval, previous?: Model): if (previous && isHierarchyDataEqual(previous.hierarchy, hierarchyData)) { return { ...previous, - conformation: getConformation(format, bounds) + atomSiteConformation: getConformation(format, bounds) }; } @@ -121,7 +121,7 @@ function createModel(format: mmCIF_Format, bounds: Interval, previous?: Model): entities, hierarchy, sequence: getSequence(format.data, entities, hierarchy), - conformation: getConformation(format, bounds), + atomSiteConformation: getConformation(format, bounds), coarseGrained: CoarseGrained.Empty, symmetry: getSymmetry(format), atomCount: Interval.size(bounds) diff --git a/src/mol-model/structure/model/model.ts b/src/mol-model/structure/model/model.ts index 9652cf5b18c8c4c5fe20f7d717d1720b954b640e..e685af863b4467eeb50f4668607cff258db6c3f2 100644 --- a/src/mol-model/structure/model/model.ts +++ b/src/mol-model/structure/model/model.ts @@ -8,7 +8,7 @@ import UUID from 'mol-util/uuid' import Format from './format' import Sequence from './properties/sequence' import Hierarchy from './properties/hierarchy' -import Conformation from './properties/conformation' +import AtomSiteConformation from './properties/atom-site-conformation' import Symmetry from './properties/symmetry' import CoarseGrained from './properties/coarse-grained' import { Entities } from './properties/common'; @@ -32,7 +32,7 @@ interface Model extends Readonly<{ sequence: Sequence, hierarchy: Hierarchy, - conformation: Conformation, + atomSiteConformation: AtomSiteConformation, symmetry: Symmetry, coarseGrained: CoarseGrained, diff --git a/src/mol-model/structure/model/properties/conformation.ts b/src/mol-model/structure/model/properties/atom-site-conformation.ts similarity index 100% rename from src/mol-model/structure/model/properties/conformation.ts rename to src/mol-model/structure/model/properties/atom-site-conformation.ts diff --git a/src/mol-model/structure/model/properties/coarse-grained.ts b/src/mol-model/structure/model/properties/coarse-grained.ts index 730724114f5e94809911a5b36d3042a9a6292c94..5787428eee35eb546b682f2320bd54e7873a2d4c 100644 --- a/src/mol-model/structure/model/properties/coarse-grained.ts +++ b/src/mol-model/structure/model/properties/coarse-grained.ts @@ -9,13 +9,14 @@ import { Tensor } from 'mol-math/linear-algebra'; import { Column } from 'mol-data/db'; interface CoarseGrained { + isDefined: boolean, modelList: mmCIF['ihm_model_list'], - spheres: { [P in keyof CoarseGrained.Sphere]: Column<CoarseGrained.Sphere[P]> }, - gaussians: { [P in keyof CoarseGrained.Gaussian]: Column<CoarseGrained.Gaussian[P]> } + spheres: CoarseGrained.Spheres, + gaussians: CoarseGrained.Gaussians } namespace CoarseGrained { - export const Empty: CoarseGrained = { } as any; + export const Empty: CoarseGrained = { isDefined: false } as any; interface Site { // index to the Model.hierarchy.entities table @@ -40,6 +41,9 @@ namespace CoarseGrained { weight: number, covarianceMatrix: Tensor.Data } + + export type Spheres = { count: number} & { [P in keyof Sphere]: Column<Sphere[P]> } + export type Gaussians = { count: number} & { [P in keyof Gaussian]: Column<Gaussian[P]> } } export default CoarseGrained; \ No newline at end of file diff --git a/src/mol-model/structure/model/properties/hierarchy.ts b/src/mol-model/structure/model/properties/hierarchy.ts index 8987e070d05fedebd486019339635772bc04d96c..d25903d95d0e4bd865b1969152902deea071c966 100644 --- a/src/mol-model/structure/model/properties/hierarchy.ts +++ b/src/mol-model/structure/model/properties/hierarchy.ts @@ -40,15 +40,10 @@ export const ChainsSchema = { export type ChainsSchema = typeof ChainsSchema export interface Chains extends Table<ChainsSchema> { } -// export const EntitySchema = mmCIF['entity'] -// export type EntitySchema = typeof EntitySchema -// export interface Entities extends Table<EntitySchema> { } - export interface Data { atoms: Atoms, residues: Residues, - chains: Chains, - //entities: Entities + chains: Chains } export interface Segments { diff --git a/src/mol-model/structure/structure/element/properties/bonds/group-compute.ts b/src/mol-model/structure/structure/element/properties/bonds/group-compute.ts index fb078c889fb924c543659b995eb6b6eea3e28eba..a75540509204cff433c98804911a2cb9bfe7961a 100644 --- a/src/mol-model/structure/structure/element/properties/bonds/group-compute.ts +++ b/src/mol-model/structure/structure/element/properties/bonds/group-compute.ts @@ -110,7 +110,7 @@ function computePerAtomBonds(atomA: number[], atomB: number[], _order: number[], function _computeBonds(unit: Unit.Atomic, atoms: ElementGroup, params: BondComputationParameters): GroupBonds { const MAX_RADIUS = 3; - const { x, y, z } = unit.model.conformation; + const { x, y, z } = unit.model.atomSiteConformation; const atomCount = ElementGroup.size(atoms); const { residueIndex } = unit; const { type_symbol, label_atom_id, label_alt_id } = unit.model.hierarchy.atoms; diff --git a/src/mol-model/structure/structure/unit.ts b/src/mol-model/structure/structure/unit.ts index 2109cc10b299b6932a99f05acf410f86abdb45f9..201002b587112b3e1aaef72bf7385dd984c86596 100644 --- a/src/mol-model/structure/structure/unit.ts +++ b/src/mol-model/structure/structure/unit.ts @@ -47,7 +47,7 @@ namespace Unit { // Reference some commonly accessed things for faster access. readonly residueIndex: ArrayLike<number>, readonly chainIndex: ArrayLike<number>, - readonly conformation: Model['conformation'] + readonly conformation: Model['atomSiteConformation'] } // Coarse grained representations. @@ -58,7 +58,7 @@ namespace Unit { export function createAtomic(model: Model, operator: SymmetryOperator, fullGroup: ElementGroup): Unit { const h = model.hierarchy; - const { invariantPosition, position, x, y, z } = SymmetryOperator.createMapping(operator, model.conformation); + const { invariantPosition, position, x, y, z } = SymmetryOperator.createMapping(operator, model.atomSiteConformation); return { model, @@ -68,7 +68,7 @@ namespace Unit { residueIndex: h.residueSegments.segmentMap, chainIndex: h.chainSegments.segmentMap, hierarchy: model.hierarchy, - conformation: model.conformation, + conformation: model.atomSiteConformation, invariantPosition, position, x, y, z @@ -89,7 +89,7 @@ namespace Unit { export function getLookup3d(unit: Unit, group: ElementGroup) { if (group.__lookup3d__) return group.__lookup3d__; if (Unit.isAtomic(unit)) { - const { x, y, z } = unit.model.conformation; + const { x, y, z } = unit.model.atomSiteConformation; group.__lookup3d__ = GridLookup3D({ x, y, z, indices: group.elements }); return group.__lookup3d__; } diff --git a/src/perf-tests/structure.ts b/src/perf-tests/structure.ts index 57a23cec6d93ba453392cf2c4bdb2fb1feb29f3c..1e0a9b9725c12a5a619167527f061837e70d6b18 100644 --- a/src/perf-tests/structure.ts +++ b/src/perf-tests/structure.ts @@ -356,11 +356,11 @@ export namespace PropertyAccess { // return; console.log('bs', baseline(models[0])); - console.log('sp', sumProperty(structures[0], l => l.unit.model.conformation.atomId.value(l.element))); - console.log(sumPropertySegmented(structures[0], l => l.unit.model.conformation.atomId.value(l.element))); + console.log('sp', sumProperty(structures[0], l => l.unit.model.atomSiteConformation.atomId.value(l.element))); + console.log(sumPropertySegmented(structures[0], l => l.unit.model.atomSiteConformation.atomId.value(l.element))); //console.log(sumPropertySegmentedMutable(structures[0], l => l.unit.model.conformation.atomId.value(l.element)); - console.log(sumPropertyAtomSetIt(structures[0], l => l.unit.model.conformation.atomId.value(l.element))); + console.log(sumPropertyAtomSetIt(structures[0], l => l.unit.model.atomSiteConformation.atomId.value(l.element))); //console.log(sumProperty(structures[0], Property.cachedAtomColumn(m => m.conformation.atomId))); //console.log(sumDirect(structures[0])); //console.log('r', sumPropertyResidue(structures[0], l => l.unit.hierarchy.residues.auth_seq_id.value(l.unit.residueIndex[l.atom])));