From 733df07e0ec381f15dc1cdb73bf8ab7db95110a7 Mon Sep 17 00:00:00 2001 From: Alexander Rose <alex.rose@rcsb.org> Date: Mon, 25 Feb 2019 14:23:41 -0800 Subject: [PATCH] fixed cartoon visual for C-alpha only models --- .../model/properties/atomic/hierarchy.ts | 4 ++-- .../model/properties/utils/atomic-derived.ts | 10 +++++----- .../visual/util/polymer/backbone-iterator.ts | 2 +- .../visual/util/polymer/gap-iterator.ts | 2 +- .../visual/util/polymer/trace-iterator.ts | 16 +++++++++------- 5 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/mol-model/structure/model/properties/atomic/hierarchy.ts b/src/mol-model/structure/model/properties/atomic/hierarchy.ts index 0b0d3c1e0..02bde17f0 100644 --- a/src/mol-model/structure/model/properties/atomic/hierarchy.ts +++ b/src/mol-model/structure/model/properties/atomic/hierarchy.ts @@ -105,8 +105,8 @@ export interface AtomicData { export interface AtomicDerivedData { readonly residue: { - readonly traceElementIndex: ArrayLike<ElementIndex> - readonly directionElementIndex: ArrayLike<ElementIndex> + readonly traceElementIndex: ArrayLike<ElementIndex | -1> + readonly directionElementIndex: ArrayLike<ElementIndex | -1> readonly moleculeType: ArrayLike<MoleculeType> } } diff --git a/src/mol-model/structure/model/properties/utils/atomic-derived.ts b/src/mol-model/structure/model/properties/utils/atomic-derived.ts index ffdfc9114..47daf9dff 100644 --- a/src/mol-model/structure/model/properties/utils/atomic-derived.ts +++ b/src/mol-model/structure/model/properties/utils/atomic-derived.ts @@ -14,8 +14,8 @@ import { getAtomIdForAtomRole } from 'mol-model/structure/util'; export function getAtomicDerivedData(data: AtomicData, index: AtomicIndex, chemicalComponentMap: ChemicalComponentMap): AtomicDerivedData { const { label_comp_id, _rowCount: n } = data.residues - const traceElementIndex = new Uint32Array(n) - const directionElementIndex = new Uint32Array(n) + const traceElementIndex = new Int32Array(n) + const directionElementIndex = new Int32Array(n) const moleculeType = new Uint8Array(n) const moleculeTypeMap = new Map<string, MoleculeType>() @@ -24,7 +24,7 @@ export function getAtomicDerivedData(data: AtomicData, index: AtomicIndex, chemi const compId = label_comp_id.value(i) const chemCompMap = chemicalComponentMap let molType: MoleculeType - if (moleculeTypeMap.has(compId)){ + if (moleculeTypeMap.has(compId)) { molType = moleculeTypeMap.get(compId)! } else if (chemCompMap.has(compId)) { molType = getMoleculeType(chemCompMap.get(compId)!.type, compId) @@ -45,8 +45,8 @@ export function getAtomicDerivedData(data: AtomicData, index: AtomicIndex, chemi return { residue: { - traceElementIndex: traceElementIndex as unknown as ArrayLike<ElementIndex>, // TODO maybe -1 - directionElementIndex: directionElementIndex as unknown as ArrayLike<ElementIndex>, // TODO maybe -1 + traceElementIndex: traceElementIndex as unknown as ArrayLike<ElementIndex | -1>, + directionElementIndex: directionElementIndex as unknown as ArrayLike<ElementIndex | -1>, moleculeType: moleculeType as unknown as ArrayLike<MoleculeType>, } } diff --git a/src/mol-repr/structure/visual/util/polymer/backbone-iterator.ts b/src/mol-repr/structure/visual/util/polymer/backbone-iterator.ts index f80b306af..103246a32 100644 --- a/src/mol-repr/structure/visual/util/polymer/backbone-iterator.ts +++ b/src/mol-repr/structure/visual/util/polymer/backbone-iterator.ts @@ -81,7 +81,7 @@ export class AtomicPolymerBackboneIterator implements Iterator<PolymerBackbonePa } constructor(private unit: Unit.Atomic) { - this.traceElementIndex = unit.model.atomicHierarchy.derived.residue.traceElementIndex + this.traceElementIndex = unit.model.atomicHierarchy.derived.residue.traceElementIndex as ArrayLike<ElementIndex> // can assume it won't be -1 for polymer residues this.polymerIt = SortedRanges.transientSegments(getPolymerRanges(unit), unit.elements) this.residueIt = Segmentation.transientSegments(unit.model.atomicHierarchy.residueAtomSegments, unit.elements) this.value = createPolymerBackbonePair(unit) diff --git a/src/mol-repr/structure/visual/util/polymer/gap-iterator.ts b/src/mol-repr/structure/visual/util/polymer/gap-iterator.ts index bc15bb9f5..6a612ab59 100644 --- a/src/mol-repr/structure/visual/util/polymer/gap-iterator.ts +++ b/src/mol-repr/structure/visual/util/polymer/gap-iterator.ts @@ -47,7 +47,7 @@ export class AtomicPolymerGapIterator implements Iterator<PolymerGapPair> { } constructor(private unit: Unit.Atomic) { - this.traceElementIndex = unit.model.atomicHierarchy.derived.residue.traceElementIndex + this.traceElementIndex = unit.model.atomicHierarchy.derived.residue.traceElementIndex as ArrayLike<ElementIndex> // can assume it won't be -1 for polymer residues this.gapIt = SortedRanges.transientSegments(getGapRanges(unit), unit.elements); this.value = createPolymerGapPair(unit) this.hasNext = this.gapIt.hasNext diff --git a/src/mol-repr/structure/visual/util/polymer/trace-iterator.ts b/src/mol-repr/structure/visual/util/polymer/trace-iterator.ts index e2c95b035..fa3d75555 100644 --- a/src/mol-repr/structure/visual/util/polymer/trace-iterator.ts +++ b/src/mol-repr/structure/visual/util/polymer/trace-iterator.ts @@ -69,7 +69,7 @@ export class AtomicPolymerTraceIterator implements Iterator<PolymerTraceElement> private state: AtomicPolymerTraceIteratorState = AtomicPolymerTraceIteratorState.nextPolymer private residueAtomSegments: Segmentation<ElementIndex, ResidueIndex> private traceElementIndex: ArrayLike<ElementIndex> - private directionElementIndex: ArrayLike<ElementIndex> + private directionElementIndex: ArrayLike<ElementIndex | -1> private moleculeType: ArrayLike<MoleculeType> private atomicConformation: AtomicConformation @@ -82,16 +82,18 @@ export class AtomicPolymerTraceIterator implements Iterator<PolymerTraceElement> private p6 = Vec3.zero(); // private v01 = Vec3.zero(); - private v12 = Vec3.zero(); - private v23 = Vec3.zero(); + private v12 = Vec3.create(1, 0, 0); + private v23 = Vec3.create(1, 0, 0); // private v34 = Vec3.zero(); hasNext: boolean = false; private pos(target: Vec3, index: number) { - target[0] = this.atomicConformation.x[index] - target[1] = this.atomicConformation.y[index] - target[2] = this.atomicConformation.z[index] + if (index !== -1) { + target[0] = this.atomicConformation.x[index] + target[1] = this.atomicConformation.y[index] + target[2] = this.atomicConformation.z[index] + } } private updateResidueSegmentRange(polymerSegment: Segmentation.Segment<ResidueIndex>) { @@ -203,7 +205,7 @@ export class AtomicPolymerTraceIterator implements Iterator<PolymerTraceElement> constructor(private unit: Unit.Atomic) { this.atomicConformation = unit.model.atomicConformation this.residueAtomSegments = unit.model.atomicHierarchy.residueAtomSegments - this.traceElementIndex = unit.model.atomicHierarchy.derived.residue.traceElementIndex + this.traceElementIndex = unit.model.atomicHierarchy.derived.residue.traceElementIndex as ArrayLike<ElementIndex> // can assume it won't be -1 for polymer residues this.directionElementIndex = unit.model.atomicHierarchy.derived.residue.directionElementIndex this.moleculeType = unit.model.atomicHierarchy.derived.residue.moleculeType this.cyclicPolymerMap = unit.model.atomicHierarchy.cyclicPolymerMap -- GitLab