Schrift
[thread]7779[/thread]

needelman wunsch/smith waterman (Seite 3)

Leser: 1


<< |< 1 2 3 4 >| >> 35 Einträge, 4 Seiten
lichtkind
 2006-03-09 19:44
#63703 #63703
User since
2004-03-22
5708 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
Deine Berechnung:
Code: (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
@xSeq=("A","A","G","G","C","C","T","T");
@ySeq=("A","C","G","T","A","C","T","T");

$LM[0][0]=0;
$x=@xSeq;
$y=@ySeq;

#### x-Achse mit 0 füllen ####
for ($i=1;$i<=$x;$i++)
{
$LM[$i][0]=0;
}

#### y-Achse mit 0 füllen ####
for ($j=1;$j<=$y;$j++)
{
$LM[0][$j]=0;
print $LM[0][$j];
}


print "\n";

for ($i=1;$i<=$x;$i++)
{
print $ySeq[$i-1]."0";
#### wert ermitteln ####
for ($j=1;$j<=$y;$j++)
{
$a=$j-1;
$s=$i-1;
if ($xSeq[$a] eq $ySeq[$s])
{
$tauscher[0]=$LM[$i-1][$j-1]+2;
}
else
{
$tauscher[0]=$LM[$i-1][$j-1]-1;
}
$tauscher[1]=$LM[$i-1][$j]-1;
$tauscher[2]=$LM[$i][$j-1]-1;
$tauscher[3]=-1000;

#### höchsten wert ermitteln ####
for ($v=0;$v<3;$v++)
{
if ($tauscher[$v] > $tauscher[$v+1])
{
$tauscher[$v+1]=$tauscher[$v]
}
else{}
}

#### wert einsetzen ####
if ($tauscher[$v] > 0)
{
$LM[$i][$j]=$tauscher[$v];
}
else
{
$LM[$i][$j]=0
}

print $LM[$i][$j];
}
print "\n";
}


meine berechnung:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$x = @xSeq = qw (A A G G C C T T);
$y = @ySeq = qw (A C G T A C T T);

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

for my $i (1..$x) {
#### wert ermitteln ####
for my $j (1..$y) {
if ($xSeq[$j-1] eq $ySeq[$i-1]) { $tauscher = $LM[$i-1][$j-1] + 2 }
else { $tauscher = $LM[$i-1][$j-1] - 1 }
#### höchsten wert ermitteln ####
for ($LM[$i-1][$j]-1, $LM[$i][$j-1]-1, 0) {
$tauscher = $_ if $_ > $tauscher
}
$LM[$i][$j] = $tauscher;
}
}
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
lichtkind
 2006-03-09 19:46
#63704 #63704
User since
2004-03-22
5708 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
wenns nur optik dann fügen wir die | zum schluss zu
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
lichtkind
 2006-03-09 19:52
#63705 #63705
User since
2004-03-22
5708 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
wofür steh die 1 und 2 in dem alignment?
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
stef23
 2006-03-09 19:56
#63706 #63706
User since
2006-03-09
14 Artikel
BenutzerIn
[default_avatar]
achja die 1 bzw. 2 waren nur für mich da damit ich sehe in welche if anweisung er gegangen ist. die sollen schlußendlich sowieso raus
lichtkind
 2006-03-09 19:56
#63707 #63707
User since
2004-03-22
5708 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
und was willst du mit:

if ($w eq 0){$k=10000;}else{} ?

du willst doch in wirklichkeit die k-schleife verlassen oder?
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
lichtkind
 2006-03-09 19:57
#63708 #63708
User since
2004-03-22
5708 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
hast du icq das wäre schneller glaub ich?

wozu zählst du $o hoch es wird nie verwendet?\n\n

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

Es beginnt immer mit einer Entscheidung.
stef23
 2006-03-09 20:07
#63709 #63709
User since
2006-03-09
14 Artikel
BenutzerIn
[default_avatar]
du hast in beiden fällen recht. das k ist nur zum verlassen der schleife und deswegen auf 10000 weil irgendwann für denn align sein ende erreicht ist.

das $o war für mich auch wieder nur ein test parameter damit ich sehe wie oft er in die eine anweisung reingeht.

achja meine icq nummer habe ich dir per pm geschickt
lichtkind
 2006-03-09 20:11
#63710 #63710
User since
2004-03-22
5708 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
nimm einfach meine icq nummer siehe unten in mein post die pm sind manchmal zu lagsam
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
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.
lichtkind
 2006-03-14 15:32
#63712 #63712
User since
2004-03-22
5708 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
nochmal komplette Lösung mit berechnugnaller möglichen pfade.
daraus könnte man shcon fast ein modul machen (wenn nicht schon eins gäbe)
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
use strict;
use warnings;

my $xLength = my @xSeq = qw (A A G G C C T T);
my $yLength = my @ySeq = qw (A C G T A C T T);

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


#### Längenmatrix berechnen ####
my $tauscher = 0;
for my $x (1..$xLength) {
    for my $y (1..$yLength) {
        if ($xSeq[$x-1] eq $ySeq[$y-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 ####
my ($Hochw, $Hochx, $Hochy) = (0, 0, 0);
for my $x (0..$xLength) {
    for my $y (0..$yLength) {
        if ($Hochw < $LM[$x][$y]) {
            $Hochw = $LM[$x][$y];
            $Hochx = $x;
            $Hochy = $y;
        }
    }
}

#### Wegematrix berechnen ####
my @WM;               
;          #### Wegematrix
my @WStack = ([$Hochx, $Hochy]);#### Wegestack
my ($w, $x, $y, $z);
while (@WStack) {
    ($x, $y) = @{pop @WStack};
    next if $WM[$x][$y];
    $z = $LM[$x][$y];
    $w = 0;
    if  (    (( $z == $LM[$x-1][$y-1] + 2 ) or ( $z == $LM[$x-1][$y-1] - 1 ))
         and ($x > 1 and $y > 1)              &nbs

p;              &nbs

p;            ) {
        $w |= 1;
        push @WStack, [$x-1, $y-1];
    }
    if ( $z == $LM[$x-1][$y] - 1 ) {
        $w |= 2;
        push @WStack, [$x-1, $y];
    }
    if ( $z == $LM[$x][$y-1] - 1 ) {
        $w |= 4;
        push @WStack, [$x, $y-1];
    }
    $WM[$x][$y] = $w;
}

#### Optimalen Pfad (align) ####
($x, $y) = ($Hochx, $Hochy);
my @oPfad = ($xSeq[$x-1].$ySeq[$y-1]) ; 
while ($WM[$x][$y]) {
    $w = $WM[$x][$y];
    if    ($w & 0b001) { unshift @oPfad, $xSeq[--$x-1].$ySeq[--$y-1] }
    elsif ($w & 0b010) { unshift @oPfad, $xSeq[--$x-1]."-"           }
    elsif ($w & 0b100) { unshift @oPfad,           "-".$ySeq[--$y-1] }
}

#### allePfade ####
my (@allePfade, @CPfad, @abzw);    #### Pfade, aktueller Pfad(cursor), Abzweigungen
my @PQueue = ([$Hochx, $Hochy, $xSeq[$Hochx-1].$ySeq[$Hochy-1]]);
while (@PQueue) {
    ($x, $y, @CPfad) = @{shift @PQueue};
    while ($WM[$x][$y]){
        $w = $WM[$x][$y];
             @abzw = ();
        push @abzw, [$x-1, $y-1, $xSeq[$x-2].$ySeq[$y-2]] if $w & 0b001;
        push @abzw, [$x-1, $y  , $xSeq[$x-2]."-"        ] if $w & 0b010;
        push @abzw, [$x  , $y-1,         "-".$ySeq[$y-2]] if $w & 0b100;
        push @PQueue, [@{$abzw[$_]}, @CPfad ] for 1 .. $#abzw;
        unshift @CPfad, $abzw[0][2];
        ($x, $y) = @{$abzw[0]};
    }
    push @allePfade, [@CPfad];
}

# Ausgabe :
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 "\n  @ySeq\n @{$LM[0]}\n";
print "$xSeq[$_-1]@{$LM[$_]}\n" for 1..$xLength;
print "\nHochwert: $Hochw\n\n";
$" = "|";
print "1 opt. Pfad: @oPfad\n\nAlle Pfade:\n\n";
print "@{@allePfade[$_]}\n" for 0..$#allePfade;
\n\n

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

Es beginnt immer mit einer Entscheidung.
<< |< 1 2 3 4 >| >> 35 Einträge, 4 Seiten



View all threads created 2006-03-09 15:01.