diff --git a/modules/seq/alg/pymod/__init__.py b/modules/seq/alg/pymod/__init__.py index f97771723b2f0fc1f15954cd22ec1e487197176e..3be1b5845184ad08c6284694a9410427909888dd 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] +