From 719f8f06ae626888c10ef5b9999c4e1e9ab59bee Mon Sep 17 00:00:00 2001
From: Gabriel Studer <gabriel.studer@stud.unibas.ch>
Date: Thu, 26 Sep 2013 12:18:04 +0200
Subject: [PATCH] make sure ClustalW gets sequences with unique identifiers

---
 modules/bindings/pymod/clustalw.py      | 8 ++++++++
 modules/bindings/tests/test_clustalw.py | 7 +++++++
 2 files changed, 15 insertions(+)

diff --git a/modules/bindings/pymod/clustalw.py b/modules/bindings/pymod/clustalw.py
index 084fe8d33..e5400d1ac 100644
--- a/modules/bindings/pymod/clustalw.py
+++ b/modules/bindings/pymod/clustalw.py
@@ -92,6 +92,13 @@ def ClustalW(seq1, seq2=None, clustalw=None, keep_files=False, nopgap=False,
     LogError("WARNING: Specify either two SequenceHandles or one SequenceList")
     return
 
+  sequence_names = set()
+  for s in seq_list:
+    sequence_names.add(s.GetName())
+  if len(sequence_names) < len(seq_list):
+    raise ValueError("ClustalW can only process sequences with unique identifiers!")
+
+
   new_list = seq.CreateSequenceList()
   for s in seq_list:
     ss = s.Copy()
@@ -101,6 +108,7 @@ def ClustalW(seq1, seq2=None, clustalw=None, keep_files=False, nopgap=False,
     new_list.AddSequence(ss)
 
   seq_list = new_list
+
   
   temp_dir=utils.TempDirWithFiles((seq_list,))
   out=os.path.join(temp_dir.dirname, 'out.fasta')
diff --git a/modules/bindings/tests/test_clustalw.py b/modules/bindings/tests/test_clustalw.py
index 9aaf210f8..f5625ce9b 100644
--- a/modules/bindings/tests/test_clustalw.py
+++ b/modules/bindings/tests/test_clustalw.py
@@ -62,6 +62,13 @@ class TestClustalWBindings(unittest.TestCase):
     assert self.seq1_seq2_alignment_options_changed.ToString(80) == aln.ToString(80), \
            "Pairwise alignment with modified gap penalties differs from precomputed one"
 
+  def testUniqueIdentifier(self):
+    seq1 = seq.CreateSequence('heelloo','AWESOME')
+    seq2 = seq.CreateSequence('heelloo','AWESOME')
+
+    self.assertRaises(ValueError,clustalw.ClustalW,seq1,seq2)
+
+
 if __name__ == "__main__":
   # test if clustalw package is available on system, otherwise ignore tests
   try:
-- 
GitLab