Author: bugman Date: Thu Jan 22 17:07:58 2015 New Revision: 27274 URL: http://svn.gna.org/viewcvs/relax?rev=27274&view=rev Log: Fix for the Needleman-Wunsch sequence alignment algorithm. The start of the sequences are no longer truncated when starting gaps are encountered. Modified: trunk/lib/sequence_alignment/needleman_wunsch.py Modified: trunk/lib/sequence_alignment/needleman_wunsch.py URL: http://svn.gna.org/viewcvs/relax/trunk/lib/sequence_alignment/needleman_wunsch.py?rev=27274&r1=27273&r2=27274&view=diff ============================================================================== --- trunk/lib/sequence_alignment/needleman_wunsch.py (original) +++ trunk/lib/sequence_alignment/needleman_wunsch.py Thu Jan 22 17:07:58 2015 @@ -26,7 +26,7 @@ from numpy import float32, int16, zeros # relax module imports. -from lib.errors import RelaxError +from lib.errors import RelaxError, RelaxFault # Default scores. @@ -84,28 +84,32 @@ alignment1 = "" alignment2 = "" while 1: - # Termination. - if i < 0 or j < 0: - break + # Top. + if j < 0 or traceback_matrix[i, j] == TRACEBACK_TOP: + alignment1 += sequence1[i] + alignment2 += '-' + i -= 1 + + # Left. + elif i < 0 or traceback_matrix[i, j] == TRACEBACK_LEFT: + alignment1 += '-' + alignment2 += sequence2[j] + j -= 1 # Diagonal. - if traceback_matrix[i, j] == TRACEBACK_DIAG: + elif traceback_matrix[i, j] == TRACEBACK_DIAG: alignment1 += sequence1[i] alignment2 += sequence2[j] i -= 1 j -= 1 - # Top. - elif traceback_matrix[i, j] == TRACEBACK_TOP: - alignment1 += sequence1[i] - alignment2 += '-' - i -= 1 - - # Left. - elif traceback_matrix[i, j] == TRACEBACK_LEFT: - alignment1 += '-' - alignment2 += sequence2[j] - j -= 1 + # Unknown behaviour. + else: + raise RelaxFault + + # Termination. + if i < 0 and j < 0: + break # Reverse the alignments. align1 = alignment1[::-1]