From bf0b37895d5512f83836add8f5890058796d216f Mon Sep 17 00:00:00 2001
From: Alexander Rose <alex.rose@rcsb.org>
Date: Tue, 23 Jul 2019 15:51:17 -0700
Subject: [PATCH] handle modified base rings (DP, DZ)

---
 .../structure/visual/nucleotide-block-mesh.ts        |  4 ++++
 .../structure/visual/nucleotide-ring-mesh.ts         | 12 ++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/src/mol-repr/structure/visual/nucleotide-block-mesh.ts b/src/mol-repr/structure/visual/nucleotide-block-mesh.ts
index 36f7dc6f0..55c8dfa68 100644
--- a/src/mol-repr/structure/visual/nucleotide-block-mesh.ts
+++ b/src/mol-repr/structure/visual/nucleotide-block-mesh.ts
@@ -107,6 +107,10 @@ function createNucleotideBlockMesh(ctx: VisualContext, unit: Unit, structure: St
                     idx3 = atomicIndex.findAtomOnResidue(residueIndex, 'C4')
                     idx4 = atomicIndex.findAtomOnResidue(residueIndex, 'C2')
                     idx5 = atomicIndex.findAtomOnResidue(residueIndex, 'N1')
+                    if (idx5 === -1) {
+                        // modified ring, e.g. DZ
+                        idx5 = atomicIndex.findAtomOnResidue(residueIndex, 'C1')
+                    }
                     idx6 = traceElementIndex[residueIndex]
                 }
 
diff --git a/src/mol-repr/structure/visual/nucleotide-ring-mesh.ts b/src/mol-repr/structure/visual/nucleotide-ring-mesh.ts
index 8a1e82017..871fe5364 100644
--- a/src/mol-repr/structure/visual/nucleotide-ring-mesh.ts
+++ b/src/mol-repr/structure/visual/nucleotide-ring-mesh.ts
@@ -122,8 +122,16 @@ function createNucleotideRingMesh(ctx: VisualContext, unit: Unit, structure: Str
                     idxN3 = atomicIndex.findAtomOnResidue(residueIndex, 'N3')
                     idxC4 = atomicIndex.findAtomOnResidue(residueIndex, 'C4')
                     idxC5 = atomicIndex.findAtomOnResidue(residueIndex, 'C5')
+                    if (idxC5 === -1) {
+                        // modified ring, e.g. DP
+                        idxC5 = atomicIndex.findAtomOnResidue(residueIndex, 'N5')
+                    }
                     idxC6 = atomicIndex.findAtomOnResidue(residueIndex, 'C6')
                     idxN7 = atomicIndex.findAtomOnResidue(residueIndex, 'N7')
+                    if (idxN7 === -1) {
+                        // modified ring, e.g. DP
+                        idxN7 = atomicIndex.findAtomOnResidue(residueIndex, 'C7')
+                    }
                     idxC8 = atomicIndex.findAtomOnResidue(residueIndex, 'C8')
                     idxN9 = atomicIndex.findAtomOnResidue(residueIndex, 'N9')
 
@@ -148,6 +156,10 @@ function createNucleotideRingMesh(ctx: VisualContext, unit: Unit, structure: Str
                 } else if (isPyrimidine) {
                     idxTrace = traceElementIndex[residueIndex]
                     idxN1 = atomicIndex.findAtomOnResidue(residueIndex, 'N1')
+                    if (idxN1 === -1) {
+                        // modified ring, e.g. DZ
+                        idxN1 = atomicIndex.findAtomOnResidue(residueIndex, 'C1')
+                    }
                     idxC2 = atomicIndex.findAtomOnResidue(residueIndex, 'C2')
                     idxN3 = atomicIndex.findAtomOnResidue(residueIndex, 'N3')
                     idxC4 = atomicIndex.findAtomOnResidue(residueIndex, 'C4')
-- 
GitLab