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