Thread needelman wunsch/smith waterman (34 answers)
Opened by Gast at 2006-03-09 15:01

lichtkind
 2006-03-10 00:11
#63711 #63711
User since
2004-03-22
5708 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
wen es interessiert die lösung:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
$xLength = @xSeq = qw (A A G G C C T T);
$yLength = @ySeq = qw (A C G T A C T T);

$LM[$_][0] = 0 for 0..$xLength; #### x-Achse mit 0 füllen ####
$LM[0][$_] = 0 for 0..$yLength; #### y-Achse mit 0 füllen ####

#### wert ermitteln ####
for my $x (1..$xLength) {
    for my $y (1..$yLength) {
        if ($xSeq[$y-1] eq $ySeq[$x-1]) { $tauscher = $LM[$x-1][$y-1] + 2 }
        else               
             { $tauscher = $LM[$x-1][$y-1] - 1 }
        for ($LM[$x-1][$y]-1, $LM[$x][$y-1]-1, 0) {
            $tauscher = $_ if $_ > $tauscher
        }
        $LM[$x][$y] = $tauscher;
    }
}

#### höchsten Wert finden ####
$Hochw = 0;
for my $x (0..$xLength) {
    for my $y (0..$yLength) {
        if ($Hochw < $LM[$x][$y]) {
            $Hochw = $LM[$x][$y];
            $Hochx = $x;
            $Hochy = $y;
        }
    }
}

#### Optimale align ####
($CursorWert, $x, $y, @align) = ($Hochw, $Hochx, $Hochy);
while() {
    if  (( $CursorWert == $LM[$x-1][$y-1] + 2 ) or
         ( $CursorWert == $LM[$x-1][$y-1] - 1 )    ) {
        $x--;
        $y--;
        push @align, "$xSeq[$x]$ySeq[$y]";
    } elsif ( $CursorWert == $LM[$x-1][$y] - 1 ) {
        $x--;
        push @align, "-$ySeq[$y]";
    } elsif ( $CursorWert == $LM[$x][$y-1] - 1 ) {
        $y--;
        push @align, "$xSeq[$x]-";
    } else { last }
    $CursorWert=$LM[$x][$y];
    last if $x == 0 or $y == 0;
}

print <<EOP;
Zugrunde liegende Aehnlichkeitsmatrix

  | A  C  G  T | -
------------------
A | 2 -1 -1 -1 |-1
C |-1  2 -1 -1 |-1
G |-1 -1  2 -1 |-1
T |-1 -1 -1  2 |-1
------------------
- |-1 -1 -1 -1 |-1
EOP

$" = "";
print "
  @xSeq
 @{$LM[0]}
";
print "$ySeq[$_-1]@{$LM[$_]}
" for 1..$xLength;
print "
$Hochw

";
$" = "|";
print"@align";
\n\n

<!--EDIT|lichtkind|1142197940-->
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.

View full thread needelman wunsch/smith waterman