From 96523e7696cb7305e88894e94aeb27bbdaf368cb Mon Sep 17 00:00:00 2001
From: David Sehnal <david.sehnal@gmail.com>
Date: Mon, 30 Jul 2018 17:37:31 +0200
Subject: [PATCH] Updated carbohydrate detection in mol-model

---
 package-lock.json                             | Bin 430530 -> 428456 bytes
 .../structure/carbohydrates/compute.ts        |  94 +++++++++++-------
 2 files changed, 59 insertions(+), 35 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 10f412c6ca50a3948a9b53e7181e5a2d6aea4540..fe9ae5131f7aa0dec8396c1e51568b125de9fc70 100644
GIT binary patch
delta 28568
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

delta 27156
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
FE&$JWs4)Nl

diff --git a/src/mol-model/structure/structure/carbohydrates/compute.ts b/src/mol-model/structure/structure/carbohydrates/compute.ts
index 2e0ac1168..501494553 100644
--- a/src/mol-model/structure/structure/carbohydrates/compute.ts
+++ b/src/mol-model/structure/structure/carbohydrates/compute.ts
@@ -4,45 +4,57 @@
  * @author Alexander Rose <alexander.rose@weirdbyte.de>
  */
 
-import Unit from '../unit';
+import { Segmentation } from 'mol-data/int';
+import { combinations } from 'mol-data/util/combination';
+import { areConnected } from 'mol-math/graph';
+import { Vec3 } from 'mol-math/linear-algebra';
+import PrincipalAxes from 'mol-math/linear-algebra/matrix/principal-axes';
+import { fillSerial } from 'mol-util/array';
 import { ResidueIndex } from '../../model';
-import { Interval, Segmentation } from 'mol-data/int';
+import { ElementSymbol, MoleculeType } from '../../model/types';
+import { getMoleculeType, getPositionMatrix } from '../../util';
+import StructureElement from '../element';
 import Structure from '../structure';
-import { Carbohydrates, CarbohydrateLink, CarbohydrateTerminalLink, CarbohydrateElement } from './data';
+import Unit from '../unit';
 import { SaccharideNameMap, UnknownSaccharideComponent } from './constants';
-import { Vec3 } from 'mol-math/linear-algebra';
-import { getMoleculeType, getPositionMatrix } from '../../util';
-import { MoleculeType, ElementSymbol } from '../../model/types';
-import { areConnected } from 'mol-math/graph';
-import { combinations } from 'mol-data/util/combination';
-import { fillSerial } from 'mol-util/array';
-import PrincipalAxes from 'mol-math/linear-algebra/matrix/principal-axes';
+import { CarbohydrateElement, CarbohydrateLink, Carbohydrates, CarbohydrateTerminalLink } from './data';
 
 function getResidueIndex(elementIndex: number, unit: Unit.Atomic) {
     return unit.model.atomicHierarchy.residueAtomSegments.index[unit.elements[elementIndex]]
 }
 
-function getRingIndices(unit: Unit.Atomic, rI: ResidueIndex) {
-    const { offsets } = unit.model.atomicHierarchy.residueAtomSegments
-    const { elements } = unit
-    const interval = Interval.ofBounds(offsets[rI], offsets[rI + 1])
-    const rings: number[] = []
-    rings.push(...unit.rings.byFingerprint.get('C-C-C-C-C-O') || [])
-    rings.push(...unit.rings.byFingerprint.get('C-C-C-C-O') || [])
-    const sugarRings: ReadonlyArray<number>[] = []
-    for (let i = 0, il = rings.length; i < il; ++i) {
-        let withinIntervalCount = 0
-        const ring = unit.rings.all[rings[i]]
-        for (let j = 0, jl = ring.length; j < jl; ++j) {
-            if (Interval.has(interval, elements[ring[j]])) ++withinIntervalCount
+function sugarResidueIdx(unit: Unit.Atomic, ring: ArrayLike<StructureElement.UnitIndex>): ResidueIndex {
+    const { elements } = unit;
+    const residueIndex = unit.model.atomicHierarchy.residueAtomSegments.index;
+    const idx = residueIndex[elements[ring[0]]];
+    for (let rI = 1, _rI = ring.length; rI < _rI; rI++) {
+        if (idx !== residueIndex[elements[ring[rI]]]) return -1 as ResidueIndex;
+    }
+    return idx;
+}
+
+function addSugarRings(unit: Unit.Atomic, fp: string, sugarResidues: Map<ResidueIndex, number[]>) {
+    const rings = unit.rings;
+    const byFp = rings.byFingerprint.get(fp);
+    if (!byFp) return;
+    for (const r of byFp) {
+        const idx = sugarResidueIdx(unit, rings.all[r]);
+        if (idx >= 0) {
+            if (sugarResidues.has(idx)) sugarResidues.get(idx)!.push(r);
+            else sugarResidues.set(idx, [r]);
         }
-        if (withinIntervalCount === ring.length) sugarRings.push(ring)
     }
-    return sugarRings
+}
+
+function getSugarRingIndices(unit: Unit.Atomic) {
+    const sugarResidues = new Map<ResidueIndex, number[]>();
+    addSugarRings(unit, 'C-C-C-C-C-O', sugarResidues);
+    addSugarRings(unit, 'C-C-C-C-O', sugarResidues);
+    return sugarResidues;
 }
 
 const C = ElementSymbol('C')
-function getDirection(direction: Vec3, unit: Unit.Atomic, indices: ReadonlyArray<number>, center: Vec3) {
+function getDirection(direction: Vec3, unit: Unit.Atomic, indices: ReadonlyArray<StructureElement.UnitIndex>, center: Vec3) {
     let indexC1 = -1, indexC1X = -1, indexC = -1
     const { elements } = unit
     const { position } = unit.conformation
@@ -108,6 +120,8 @@ export function computeCarbohydrates(structure: Structure): Carbohydrates {
         const chainIt = Segmentation.transientSegments(chainAtomSegments, unit.elements)
         const residueIt = Segmentation.transientSegments(residueAtomSegments, unit.elements)
 
+        let sugarResidueMap: Map<ResidueIndex, number[]> | undefined = void 0;
+
         while (chainIt.hasNext) {
             residueIt.setSegment(chainIt.move());
 
@@ -119,14 +133,27 @@ export function computeCarbohydrates(structure: Structure): Carbohydrates {
                     if (getMoleculeType(unit.model, residueIndex) !== MoleculeType.saccharide) continue
                 }
 
-                const sugarRings = getRingIndices(unit, residueIndex)
+                if (!sugarResidueMap) {
+                    sugarResidueMap = getSugarRingIndices(unit);
+                }
+
+                const sugarRings = sugarResidueMap.get(residueIndex);
+
+                if (!sugarRings || !sugarRings.length) {
+                    console.warn(`No ring found for carbohydrate on residue with index ${residueIndex}, unit ${unit.id}. Residue skipped.`);
+                    continue;
+                }
+
+                const rings = unit.rings;
                 const ringElements: number[] = []
 
                 for (let j = 0, jl = sugarRings.length; j < jl; ++j) {
-                    const pa = new PrincipalAxes(getPositionMatrix(unit, sugarRings[j]))
+                    const ringAtoms = rings.all[sugarRings[j]];
+
+                    const pa = new PrincipalAxes(getPositionMatrix(unit, ringAtoms))
                     const center = Vec3.copy(Vec3.zero(), pa.center)
                     const normal = Vec3.copy(Vec3.zero(), pa.normVecC)
-                    const direction = getDirection(Vec3.zero(), unit, sugarRings[j], center)
+                    const direction = getDirection(Vec3.zero(), unit, ringAtoms, center)
                     Vec3.orthogonalize(direction, normal, direction)
 
                     const elementIndex = elements.length
@@ -138,8 +165,9 @@ export function computeCarbohydrates(structure: Structure): Carbohydrates {
                 // add carbohydrate links induced by intra-residue bonds
                 const ringCombinations = combinations(fillSerial(new Array(sugarRings.length)), 2)
                 for (let j = 0, jl = ringCombinations.length; j < jl; ++j) {
-                    const rc = ringCombinations[j]
-                    if (areConnected(sugarRings[rc[0]], sugarRings[rc[1]], unit.links, 2)) {
+                    const rc = ringCombinations[j];
+                    const r0 = rings.all[sugarRings[rc[0]]], r1 = rings.all[sugarRings[rc[1]]];
+                    if (areConnected(r0, r1, unit.links, 2)) {
                         // fix both directions as it is unlcear where the C1 atom is
                         fixLinkDirection(ringElements[rc[0]], ringElements[rc[1]])
                         fixLinkDirection(ringElements[rc[1]], ringElements[rc[0]])
@@ -153,10 +181,6 @@ export function computeCarbohydrates(structure: Structure): Carbohydrates {
                         })
                     }
                 }
-
-                if (!sugarRings.length) {
-                    console.warn('No ring found for carbohydrate')
-                }
             }
         }
     }
-- 
GitLab