1. Ручное выравнивание в GeneDoc
Посчитаем вес выравнивания, полученного в упражнении 1 прошлого задания:
Сумма — 47.
2. stretcher
10 20
seq1 ISM-PGGFGTYEELFEVLCWAQIGI
::. :::::... :: :: :::
seq2 ISLVPGGFGSFDLLF-VLGMEQIGY
10 20
Вес такой же: 47, выравнивания совпадают.
3. needle и water
needle построила полное выравнивание, его вес — 50.5. Плохие, очень плохие из них гомологи:
YVDD_BACSU 0 -------------------------------------------------- 0
MPRF_BACSU 1 MLIKKNALSILKIVFPIAVLLFVIYQSKKELTNLSFKRTLMVINGLERTD 50
YVDD_BACSU 1 --------------------------------------------MKTICV 6
...:..
MPRF_BACSU 51 LFMLVLIGLLAVAAMSLYDYVLKYSLRLSITNGKVFRVSWIANSFNNVLG 100
YVDD_BACSU 7 FAGSNPGGNEA--YK-----RKAAELGVYMAEQGIGLVYGGSRVGLMGTI 49
|.|....|... || .||...|:......: |:|..
MPRF_BACSU 101 FGGLAGVGLRMMFYKEHTKDHKALVKGIAWLTSSM----------LLGLS 140
YVDD_BACSU 50 ADAIMENGGTAIGVMPSGLFSGEVVHQN-------------LTELIEVNG 86
..:|. .|..|:| ..||:|:. |...:.|:.
MPRF_BACSU 141 VFSIF----VAARVLP----VDEVIHEKPWLWAVVIGFALILPLSLAVSK 182
YVDD_BACSU 87 MHERKAKMSELAD------------------------------------- 99
:.:|||...|.||
MPRF_BACSU 183 IKDRKAGDEENADKVKNPIFAYIGASVVEWLMAGTVIYFALFAMGIHADI 232
YVDD_BACSU 100 -------------GFISM-PGGFGTYEELFEVLCWAQIGIHQK----PIG 131
|.||: |||||:::.|| :|...|:|.||: .|.
MPRF_BACSU 233 RYVFGVFVIAAIGGMISLVPGGFGSFDLLF-LLGMEQLGYHQEAIVTSIV 281
YVDD_BACSU 132 LYNVNGYFEPMMKMVKYSIQEGFSNESHLKLIHSSSRPDELIEQMQNYSY 181
||.:...|.|.:..:.:: .|...|:.:|.:.::.|....||.
MPRF_BACSU 282 LYRLAYSFIPFILGLFFA--AGDLTENTMKRLETNPRIAPAIET------ 323
YVDD_BACSU 182 PILEKKWTEI---------------------------------------- 191
|.:
MPRF_BACSU 324 -------TNVLLVVQRAVLVRILQGSLSLIVFVAGLIVLASVSLPIDRLT 366
YVDD_BACSU 191 -------------------------------------------------- 191
MPRF_BACSU 367 VIPHIPRPALLLFNGLSLSSALILLILPIELYKRTKRSYTMAITALVGGF 416
[гэпы-гэпы-гэпы — skip]
YVDD_BACSU 191 ---------------------------------------- 191
MPRF_BACSU 817 KEKYKPEWRGKYLAYRKNRSLSVTMFLVTRLIGKSKKDSV 856
water построил частичное выравнивание:
YVDD_BACSU 100 GFISM-PGGFGTYEELFEVLCWAQIGIHQK----PIGLYNVNGYFEPMMK 144
|.||: |||||:::.|| :|...|:|.||: .|.||.:...|.|.:.
MPRF_BACSU 246 GMISLVPGGFGSFDLLF-LLGMEQLGYHQEAIVTSIVLYRLAYSFIPFIL 294
YVDD_BACSU 145 MVKYSIQEGFSNESHLKLIHSSSRPDELIE 174
.:.:: .|...|:.:|.:.::.|....||
MPRF_BACSU 295 GLFFA--AGDLTENTMKRLETNPRIAPAIE 322
Его вес — 76. Как мы видим, вес полного выравнивания (при одинаковых параметрах) как раз меньше веса частичного выравнивания. Это происходит потому, что совпадает лишь не очень большая часть последовательностей, в остальном белки очень не похожи, и этот фактор перевешивает.
4. dotmatcher
Карта локального сходства (вектор):
5. matcher
100 110 120 130
YVDD_B GFISM-PGGFGTYEELFEVLCWAQIGIHQKPI
: ::. :::::... :: .: :.: ::. :
MPRF_B GMISLVPGGFGSFDLLF-LLGMEQLGYHQEAI
250 260 270
Как я не устаю повторять, гомологи такие плохие, что бедный matcher даже не смог подобрать второе и третье частичное выравнивания, как положено.
6. Программа для построения оптимального глобального выравнивания
Вот (за подсветку спасибо SHJS, рекомендую):
#!/usr/bin/perl
#You may distribute and modify this file following the terms of WTFPL 2.0
@r = qw/A R N D C Q E G H I L K M F P S T W Y V B Z X -/;
for (split "\n",
'A 4 -1 -2 -2 0 -1 -1 0 -2 -1 -1 -1 -1 -2 -1 1 0 -3 -2 0 -2 -1 0 -4
R -1 5 0 -2 -3 1 0 -2 0 -3 -2 2 -1 -3 -2 -1 -1 -3 -2 -3 -1 0 -1 -4
N -2 0 6 1 -3 0 0 0 1 -3 -3 0 -2 -3 -2 1 0 -4 -2 -3 3 0 -1 -4
D -2 -2 1 6 -3 0 2 -1 -1 -3 -4 -1 -3 -3 -1 0 -1 -4 -3 -3 4 1 -1 -4
C 0 -3 -3 -3 9 -3 -4 -3 -3 -1 -1 -3 -1 -2 -3 -1 -1 -2 -2 -1 -3 -3 -2 -4
Q -1 1 0 0 -3 5 2 -2 0 -3 -2 1 0 -3 -1 0 -1 -2 -1 -2 0 3 -1 -4
E -1 0 0 2 -4 2 5 -2 0 -3 -3 1 -2 -3 -1 0 -1 -3 -2 -2 1 4 -1 -4
G 0 -2 0 -1 -3 -2 -2 6 -2 -4 -4 -2 -3 -3 -2 0 -2 -2 -3 -3 -1 -2 -1 -4
H -2 0 1 -1 -3 0 0 -2 8 -3 -3 -1 -2 -1 -2 -1 -2 -2 2 -3 0 0 -1 -4
I -1 -3 -3 -3 -1 -3 -3 -4 -3 4 2 -3 1 0 -3 -2 -1 -3 -1 3 -3 -3 -1 -4
L -1 -2 -3 -4 -1 -2 -3 -4 -3 2 4 -2 2 0 -3 -2 -1 -2 -1 1 -4 -3 -1 -4
K -1 2 0 -1 -3 1 1 -2 -1 -3 -2 5 -1 -3 -1 0 -1 -3 -2 -2 0 1 -1 -4
M -1 -1 -2 -3 -1 0 -2 -3 -2 1 2 -1 5 0 -2 -1 -1 -1 -1 1 -3 -1 -1 -4
F -2 -3 -3 -3 -2 -3 -3 -3 -1 0 0 -3 0 6 -4 -2 -2 1 3 -1 -3 -3 -1 -4
P -1 -2 -2 -1 -3 -1 -1 -2 -2 -3 -3 -1 -2 -4 7 -1 -1 -4 -3 -2 -2 -1 -2 -4
S 1 -1 1 0 -1 0 0 0 -1 -2 -2 0 -1 -2 -1 4 1 -3 -2 -2 0 0 0 -4
T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1 1 5 -2 -2 0 -1 -1 0 -4
W -3 -3 -4 -4 -2 -2 -3 -2 -2 -3 -2 -3 -1 1 -4 -3 -2 11 2 -3 -4 -3 -2 -4
Y -2 -2 -2 -3 -2 -1 -2 -3 2 -1 -1 -2 -1 3 -3 -2 -2 2 7 -1 -3 -2 -1 -4
V 0 -3 -3 -3 -1 -2 -2 -3 -3 3 1 -2 1 -1 -2 -2 0 -3 -1 4 -3 -2 -1 -4
B -2 -1 3 4 -3 0 1 -1 0 -3 -4 0 -3 -3 -2 0 -1 -4 -3 -3 4 0 -1 -4
Z -1 0 0 1 -3 3 4 -2 0 -3 -3 1 -1 -3 -1 0 -1 -3 -2 -2 0 4 -1 -4
X 0 -1 -1 -1 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -2 0 0 -2 -1 -1 -1 -1 -1 -4')
{ @_ = split; $_ = shift @_; @{$b{$_}}{@r} = @_ }; #magic ^___^
$g = 4; $l = `tput cols`; #you have unix of course, right?
if (!defined $l) {$l = 80}; #these are the defaults: gap score and output line length
@s1 = split //, shift; unshift @s1, undef;
@s2 = split //, shift; unshift @s2, undef; #not very pretty, but well...
$w[0][0] = 0; $q[0][0] = 0; #here the dynamic algorithm begins
for (1..$#s1) { $w[$_][0] = -$_*$g; $q[$_][0] = 2 }
for (1..$#s2) { $w[0][$_] = -$_*$g; $q[0][$_] = 1 }
for $i (1..$#s1) { for $j (1..$#s2) { #this is quite dirty, will clean later
$t1 = $w[$i][$j-1]-$g; $t2 = $w[$i-1][$j]-$g;
$w[$i][$j] = $w[$i-1][$j-1] + $b{$s1[$i]}{$s2[$j]}; $q[$i][$j] = -1;
if ($t1>$w[$i][$j]) {$w[$i][$j] = $t1; $q[$i][$j] = 1};
if ($t2>$w[$i][$j]) {$w[$i][$j] = $t2; $q[$i][$j] = 2};
}}
print "Alignment score: $w[$#s1][$#s2]\nOptimal alignment is as follows:";
$i = $#s1; $j = $#s2; #this sucks, i know
while ($q[$i][$j]) { #actually this entire part is a bit creepy, will clean later too
unshift @a1, $q[$i][$j]==1 ? "-" : $s1[$i];
unshift @a2, $q[$i][$j]==2 ? "-" : $s2[$j];
unshift @a3, ($a1[0] eq $a2[0]) & ($a1[0] ne "-") ? $a1[0] : $b{$a1[0]}{$a2[0]}>0 ? "+" : " ";
if ($q[$i][$j]==1) {$j--} elsif ($q[$i][$j]==2) {$i--} else {$i--; $j--} #what a shame... i know...
}
while (@a1) {
$s1=''; $s2=''; $s3='';
for (1..$l) {
if (@a1) { $s1 .= shift @a1; $s2 .= shift @a2; $s3 .= shift @a3 } else {break};
}
if ($s1) { print "\n$s1\n$s3\n$s2\n" }
}
Синтаксис: ./align.pl seq1 seq2. Если натравить ее на последовательности из handout, то будет вот:
Alignment score: 14 Optimal alignment is as follows: LILEPSHFQ LE SH Q --LELSHVQ