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