|
@@ -5,11 +5,10 @@
|
|
|
*/
|
|
|
|
|
|
import { Unit, StructureElement, ElementIndex, ResidueIndex } from 'mol-model/structure';
|
|
|
-import { Segmentation, SortedArray } from 'mol-data/int';
|
|
|
+import { Segmentation } from 'mol-data/int';
|
|
|
import Iterator from 'mol-data/iterator';
|
|
|
import SortedRanges from 'mol-data/int/sorted-ranges';
|
|
|
import { getElementIndexForAtomRole } from 'mol-model/structure/util';
|
|
|
-import { AtomRole } from 'mol-model/structure/model/types';
|
|
|
import { getPolymerRanges } from '../polymer';
|
|
|
|
|
|
/** Iterates over consecutive pairs of residues/coarse elements in polymers */
|
|
@@ -44,23 +43,13 @@ export class AtomicPolymerBackboneIterator implements Iterator<PolymerBackbonePa
|
|
|
private residueSegment: Segmentation.Segment<ResidueIndex>
|
|
|
hasNext: boolean = false;
|
|
|
|
|
|
- private getElementIndex(residueIndex: ResidueIndex, atomRole: AtomRole) {
|
|
|
- const index = getElementIndexForAtomRole(this.unit.model, residueIndex, atomRole)
|
|
|
- // TODO handle case when it returns -1
|
|
|
- const elementIndex = SortedArray.indexOf(this.unit.elements, index) as ElementIndex
|
|
|
- if (elementIndex === -1) {
|
|
|
- console.log('-1', residueIndex, atomRole, index)
|
|
|
- }
|
|
|
- return elementIndex === -1 ? 0 as ElementIndex : elementIndex
|
|
|
- }
|
|
|
-
|
|
|
move() {
|
|
|
if (this.state === AtomicPolymerBackboneIteratorState.nextPolymer) {
|
|
|
while (this.polymerIt.hasNext) {
|
|
|
this.residueIt.setSegment(this.polymerIt.move());
|
|
|
if (this.residueIt.hasNext) {
|
|
|
this.residueSegment = this.residueIt.move()
|
|
|
- this.value.centerB.element = this.getElementIndex(this.residueSegment.index, 'trace')
|
|
|
+ this.value.centerB.element = getElementIndexForAtomRole(this.unit.model, this.residueSegment.index, 'trace')
|
|
|
this.state = AtomicPolymerBackboneIteratorState.nextResidue
|
|
|
break
|
|
|
}
|
|
@@ -70,7 +59,7 @@ export class AtomicPolymerBackboneIterator implements Iterator<PolymerBackbonePa
|
|
|
if (this.state === AtomicPolymerBackboneIteratorState.nextResidue) {
|
|
|
this.residueSegment = this.residueIt.move()
|
|
|
this.value.centerA.element = this.value.centerB.element
|
|
|
- this.value.centerB.element = this.getElementIndex(this.residueSegment.index, 'trace')
|
|
|
+ this.value.centerB.element = getElementIndexForAtomRole(this.unit.model, this.residueSegment.index, 'trace')
|
|
|
if (!this.residueIt.hasNext) {
|
|
|
if (this.unit.model.atomicHierarchy.cyclicPolymerMap.has(this.residueSegment.index)) {
|
|
|
this.state = AtomicPolymerBackboneIteratorState.cycle
|
|
@@ -82,7 +71,7 @@ export class AtomicPolymerBackboneIterator implements Iterator<PolymerBackbonePa
|
|
|
} else if (this.state === AtomicPolymerBackboneIteratorState.cycle) {
|
|
|
const { cyclicPolymerMap } = this.unit.model.atomicHierarchy
|
|
|
this.value.centerA.element = this.value.centerB.element
|
|
|
- this.value.centerB.element = this.getElementIndex(cyclicPolymerMap.get(this.residueSegment.index)!, 'trace')
|
|
|
+ this.value.centerB.element = getElementIndexForAtomRole(this.unit.model, cyclicPolymerMap.get(this.residueSegment.index)!, 'trace')
|
|
|
// TODO need to advance to a polymer that has two or more residues (can't assume it has)
|
|
|
this.state = AtomicPolymerBackboneIteratorState.nextPolymer
|
|
|
}
|