From a819835984d4703d1abdba535b70db11c8703d4b Mon Sep 17 00:00:00 2001 From: Alexander Rose <alexander.rose@weirdbyte.de> Date: Wed, 15 Jan 2020 14:58:03 -0500 Subject: [PATCH] add AtomicConformation.xyzDefined & improve getAtomicRanges --- src/mol-model-formats/structure/mmcif/atomic.ts | 3 ++- .../structure/model/properties/atomic/conformation.ts | 4 ++++ .../structure/model/properties/utils/atomic-ranges.ts | 4 ++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/mol-model-formats/structure/mmcif/atomic.ts b/src/mol-model-formats/structure/mmcif/atomic.ts index 85f28233d..9cedc4019 100644 --- a/src/mol-model-formats/structure/mmcif/atomic.ts +++ b/src/mol-model-formats/structure/mmcif/atomic.ts @@ -69,8 +69,8 @@ function createHierarchyData(atom_site: AtomSite, sourceIndex: Column<number>, o const chains = Table.view(atom_site, ChainsSchema, offsets.chains); // Fix possibly missing auth_/label_ columns - substUndefinedColumn(residues, 'label_seq_id', 'auth_seq_id'); substUndefinedColumn(atoms, 'label_atom_id', 'auth_atom_id'); + substUndefinedColumn(residues, 'label_seq_id', 'auth_seq_id'); substUndefinedColumn(residues, 'label_comp_id', 'auth_comp_id'); substUndefinedColumn(chains, 'label_asym_id', 'auth_asym_id'); @@ -83,6 +83,7 @@ function getConformation(atom_site: AtomSite): AtomicConformation { atomId: atom_site.id, occupancy: atom_site.occupancy, B_iso_or_equiv: atom_site.B_iso_or_equiv, + xyzDefined: atom_site.Cartn_x.isDefined && atom_site.Cartn_y.isDefined && atom_site.Cartn_z.isDefined, x: atom_site.Cartn_x.toArray({ array: Float32Array }), y: atom_site.Cartn_y.toArray({ array: Float32Array }), z: atom_site.Cartn_z.toArray({ array: Float32Array }), diff --git a/src/mol-model/structure/model/properties/atomic/conformation.ts b/src/mol-model/structure/model/properties/atomic/conformation.ts index 984697b02..27dbfcae3 100644 --- a/src/mol-model/structure/model/properties/atomic/conformation.ts +++ b/src/mol-model/structure/model/properties/atomic/conformation.ts @@ -34,6 +34,10 @@ export interface AtomicConformation { // Coordinates. Generally, not to be accessed directly because the coordinate might be // transformed by an operator. Use Unit.getPosition instead. + /** + * Are xyz coordinates defined? + */ + xyzDefined: boolean, /** * The x coordinate in angstroms specified according to a set of orthogonal Cartesian axes. */ diff --git a/src/mol-model/structure/model/properties/utils/atomic-ranges.ts b/src/mol-model/structure/model/properties/utils/atomic-ranges.ts index 52d414c22..19fc6abe6 100644 --- a/src/mol-model/structure/model/properties/utils/atomic-ranges.ts +++ b/src/mol-model/structure/model/properties/utils/atomic-ranges.ts @@ -70,7 +70,7 @@ export function getAtomicRanges(hierarchy: AtomicHierarchy, entities: Entities, const riEnd = hierarchy.residueAtomSegments.index[chainSegment.end - 1] const seqIdStart = label_seq_id.value(riStart) const seqIdEnd = label_seq_id.value(riEnd) - if (seqIdStart === 1 && seqIdEnd === maxSeqId && areBackboneConnected(riStart, riEnd, conformation, index, derived)) { + if (seqIdStart === 1 && seqIdEnd === maxSeqId && conformation.xyzDefined && areBackboneConnected(riStart, riEnd, conformation, index, derived)) { cyclicPolymerMap.set(riStart, riEnd) cyclicPolymerMap.set(riEnd, riStart) } @@ -95,7 +95,7 @@ export function getAtomicRanges(hierarchy: AtomicHierarchy, entities: Entities, } else { const riStart = hierarchy.residueAtomSegments.index[residueSegment.start] const riEnd = hierarchy.residueAtomSegments.index[prevEnd - 1] - if (!areBackboneConnected(riStart, riEnd, conformation, hierarchy.index, derived)) { + if (conformation.xyzDefined && !areBackboneConnected(riStart, riEnd, conformation, hierarchy.index, derived)) { polymerRanges.push(startIndex, prevEnd - 1) startIndex = residueSegment.start } -- GitLab