Browse Source

fixed cartoon visual for C-alpha only models

Alexander Rose 6 years ago
parent
commit
733df07e0e

+ 2 - 2
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>
     }
 }

+ 5 - 5
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>,
         }
     }

+ 1 - 1
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)

+ 1 - 1
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

+ 9 - 7
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