Tags:
Thanks! We'll email you
when relevant content is
added and updated.
Following
Follow
Bioinformatics
Thanks! We'll email you
when relevant content is
added and updated.
Following
Follow
sequence alignment
Thanks! We'll email you
when relevant content is
added and updated.
Following
Follow
Visual Basic
I am trying to implement Needleman-Wunsch algorithm in VB. unfortunately I get lot of runtime errors. could someone help me to solve this. The code is given below.
Public Class SequenceAlignment
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
'declare Score variables
Dim MatchScore As Integer = 5
Dim MisMatchScore As Integer = 0.5
Dim GapScore As Integer = -2
'+======================================================================================+
'initialization; set initial Score and get initial Pointer ‘left’ or ‘up’
'on top columns and Rows on the left respectively
'+======================================================================================+
Dim Matrix(,) As Integer = New Integer(,) {} 'Created a matrix to fill the score
Dim RowColpointer(,) As String = New String(,) {} 'Created another matrix
'for the pointer to the left and up
Dim J As Integer = 1 'matrix index j
Dim I As Integer = 1 'matrix index i
'(0, 0) of the matrix is score is set to 0 and pointer to ‘none’.
'This position is the end during trace back.
'Matrix(1, 0) = 0 'run time error
'RowColpointer(1, 0) = "none" ' I am getting run time error!!!
'Index was outside the bounds of the array!!!.
'creates values for each column on top of the matrix except the 0,0
For J = 1 To J <= Seq1.Text.Length
Matrix(0, J) = GapScore * J 'creates score on each column
RowColpointer(0, J) = "left" 'creates pointer on each column
Next J
'creates pointer for each row on the left except 0,0
For I = 1 To J <= Seq2.Text.Length
Matrix(I, 0) = GapScore * I 'creates score on each row
RowColpointer(I, 0) = "up" 'creates pointer on each column
Next I
'==============================================================================+
'fill matrix with scores and pointers
'==============================================================================+
Dim diagonal_score As Integer
Dim left_score As Integer
Dim up_score As Integer
Dim letter1 As Integer
Dim letter2 As Integer
For I = 1 To I <= Seq2.Text.Length 'looping through the entire matrix
For J = 1 To Seq1.Text.Length
'Calculate matchScore
letter1 = Mid(Seq1.Text, J - 1, 1)
letter2 = Mid(Seq2.Text, I - 1, 1)
'condition set to generate diagonal score
If letter1 = letter2 Then
diagonal_score = Matrix(I - 1, J - 1) + MatchScore
Else : diagonal_score = Matrix(I - 1, J - 1) + MisMatchScore
End If
'Calculate gap scores
up_score = Matrix(I - 1, J) + GapScore
left_score = Matrix(I, J - 1) + GapScore
'conditions to generate best score and pointers the entire matrix
If diagonal_score >= up_score Then
If diagonal_score >= left_score Then
Matrix(I, J) = diagonal_score
RowColpointer(I, J) = "diagonal"
Else : Matrix(I, J) = left_score
RowColpointer(I, J) = "left"
End If
If up_score >= left_score Then
Matrix(I, J) = up_score
RowColpointer(I, J) = "up"
Else : Matrix(I, J) = left_score
RowColpointer(I, J) = "left"
End If
End If
Next J
Next I
'=======================================================================================+
'trace back
'=======================================================================================+
Dim align1 As String = " "
Dim align2 As String = " "
'starts at the last cell of the matrix
J = Seq1.Text.Length '|
I = Seq2.Text.Length '| to select the last cell in the matrix
'when the trace back reaches 'none' it stops
While (1)
If RowColpointer(I, J) = "none" Then '//run time error
'//Index was outside the bounds of the array.
End If
End While
If RowColpointer(I, J) = "Diagonal" Then '//run time error
'//Index was outside the bounds of the array.
align1 = Mid(Seq1.Text, J - 1, 1)
align2 = Mid(Seq2.Text, I - 2, 1)
I -= 1
J -= 1
ElseIf RowColpointer(I, J) = "left" Then '//run time error
'//Index was outside the bounds of the array.
align1 = Mid(Seq1.Text, J - 1, 1)
align2 = "-"
J -= 1
ElseIf Matrix(I, J) = "up" Then '//run time error
'//Index was outside the bounds of the array.
align1 = "-"
align2 = Mid(Seq1.Text, I - 1, 1)
I -= 1
End If
'since the trace back is performed backwards thorugh the sequence, the string is
'generated in a reverse order. so the sequence should be arranged in a correct order
StrReverse(align1)
StrReverse(align2)
'Disply in message box
MessageBox.Show(align1 + "n", align2 + "n")
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e _
As System.EventArgs) Handles Button2.Click
Me.Close()
End Sub
End Class
Software/Hardware used:
Visual Studio
ASKED:
March 11, 2010 8:38 AM
UPDATED:
March 12, 2010 1:31 AM
Discuss This Question: 2 Replies