From 3d9c485cf1b23d1836e20903a3b0b58c500012f3 Mon Sep 17 00:00:00 2001 From: Alexander Rose <alexander.rose@weirdbyte.de> Date: Tue, 26 Feb 2019 22:52:10 -0800 Subject: [PATCH] improved coarse backbone trace, e.g. 1jgq --- .../structure/visual/polymer-trace-mesh.ts | 2 +- .../visual/util/polymer/trace-iterator.ts | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/mol-repr/structure/visual/polymer-trace-mesh.ts b/src/mol-repr/structure/visual/polymer-trace-mesh.ts index 11ef2c8a6..c30503dc1 100644 --- a/src/mol-repr/structure/visual/polymer-trace-mesh.ts +++ b/src/mol-repr/structure/visual/polymer-trace-mesh.ts @@ -89,7 +89,7 @@ function createPolymerTraceMesh(ctx: VisualContext, unit: Unit, structure: Struc h2 = w2 } interpolateSizes(state, w0, w1, w2, h0, h1, h2, shift) - addTube(builderState, curvePoints, normalVectors, binormalVectors, linearSegments, radialSegments, widthValues, heightValues, 1, v.secStrucFirst, v.secStrucLast) + addTube(builderState, curvePoints, normalVectors, binormalVectors, linearSegments, radialSegments, widthValues, heightValues, 1, v.secStrucFirst || v.coarseBackboneFirst, v.secStrucLast || v.coarseBackboneLast) } ++i 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 9099462cd..6216c5307 100644 --- a/src/mol-repr/structure/visual/util/polymer/trace-iterator.ts +++ b/src/mol-repr/structure/visual/util/polymer/trace-iterator.ts @@ -36,6 +36,7 @@ interface PolymerTraceElement { secStrucType: SecondaryStructureType moleculeType: MoleculeType isCoarseBackbone: boolean + coarseBackboneFirst: boolean, coarseBackboneLast: boolean p0: Vec3, p1: Vec3, p2: Vec3, p3: Vec3, p4: Vec3 d12: Vec3, d23: Vec3 @@ -52,6 +53,7 @@ function createPolymerTraceElement (unit: Unit): PolymerTraceElement { secStrucFirst: false, secStrucLast: false, secStrucType: SecStrucTypeNA, moleculeType: MoleculeType.unknown, + coarseBackboneFirst: false, coarseBackboneLast: false, isCoarseBackbone: false, p0: Vec3.zero(), p1: Vec3.zero(), p2: Vec3.zero(), p3: Vec3.zero(), p4: Vec3.zero(), d12: Vec3.create(1, 0, 0), d23: Vec3.create(1, 0, 0), @@ -72,6 +74,9 @@ export class AtomicPolymerTraceIterator implements Iterator<PolymerTraceElement> private prevSecStrucType: SecondaryStructureType private currSecStrucType: SecondaryStructureType private nextSecStrucType: SecondaryStructureType + private prevCoarseBackbone: boolean + private currCoarseBackbone: boolean + private nextCoarseBackbone: boolean private state: AtomicPolymerTraceIteratorState = AtomicPolymerTraceIteratorState.nextPolymer private residueAtomSegments: Segmentation<ElementIndex, ResidueIndex> private traceElementIndex: ArrayLike<ElementIndex> @@ -148,6 +153,8 @@ export class AtomicPolymerTraceIterator implements Iterator<PolymerTraceElement> this.state = AtomicPolymerTraceIteratorState.nextResidue this.currSecStrucType = SecStrucTypeNA this.nextSecStrucType = this.secondaryStructureType[this.residueSegmentMin] + this.currCoarseBackbone = false + this.nextCoarseBackbone = this.directionElementIndex[this.residueSegmentMin] === -1 break } } @@ -159,11 +166,18 @@ export class AtomicPolymerTraceIterator implements Iterator<PolymerTraceElement> this.currSecStrucType = this.nextSecStrucType this.nextSecStrucType = residueIt.hasNext ? this.secondaryStructureType[residueIndex + 1] : SecStrucTypeNA + this.prevCoarseBackbone = this.currCoarseBackbone + this.currCoarseBackbone = this.nextCoarseBackbone + this.nextCoarseBackbone = residueIt.hasNext ? this.directionElementIndex[residueIndex + 1] === -1 : false + value.secStrucType = this.currSecStrucType - value.first = residueIndex === this.residueSegmentMin - value.last = residueIndex === this.residueSegmentMax value.secStrucFirst = this.prevSecStrucType !== this.currSecStrucType value.secStrucLast = this.currSecStrucType !== this.nextSecStrucType + value.isCoarseBackbone = this.currCoarseBackbone + value.coarseBackboneFirst = this.prevCoarseBackbone !== this.currCoarseBackbone + value.coarseBackboneLast = this.currCoarseBackbone !== this.nextCoarseBackbone + value.first = residueIndex === this.residueSegmentMin + value.last = residueIndex === this.residueSegmentMax value.moleculeType = this.moleculeType[residueIndex] const residueIndexPrev3 = this.getResidueIndex(residueIndex - 3) -- GitLab