Учебный сайт Кирилла Цуканова → Второй семестр

Парные выравнивания

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