From 8a47dff6c59a77ca5e072bfdafcab9aff808efff Mon Sep 17 00:00:00 2001
From: Gabriel Studer <gabriel.studer@unibas.ch>
Date: Thu, 6 Aug 2020 13:46:14 +0200
Subject: [PATCH] Residue numbers must be unique when using them to align
 residues to a SEQRES

---
 modules/seq/alg/pymod/__init__.py | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/modules/seq/alg/pymod/__init__.py b/modules/seq/alg/pymod/__init__.py
index f97771723..3be1b5845 100644
--- a/modules/seq/alg/pymod/__init__.py
+++ b/modules/seq/alg/pymod/__init__.py
@@ -100,10 +100,17 @@ def AlignToSEQRES(chain, seqres, try_resnum_first=False, validate=True):
     return seq.CreateAlignment()
   if try_resnum_first:
     aln_seq = seq.CreateSequence('atoms', '-'*len(seqres))
+    aligned_resnums = set()
     for r1 in residues:
+      if r1.number.num in aligned_resnums:
+        LogWarning('Residue numbers must be unique. Already observed %i, ' \
+                   'cannot align %s anymore.'%(r1.number.num, r1.qualified_name))
+        try_resnum_first = False
+        break
       if r1.number.num <= len(seqres) and r1.number.num > 0:
         if IsEqual(seqres[r1.number.num - 1], r1.one_letter_code):
           aln_seq[r1.number.num - 1] = r1.one_letter_code
+          aligned_resnums.add(r1.number.num)
         else:
           LogWarning('Sequence mismatch: chain has "' + r1.one_letter_code +
                      '", while SEQRES is "' + seqres[r1.number.num - 1] +
-- 
GitLab