Laboratorium 4 - Instytutu Informatyki UJ

Transkrypt

Laboratorium 4 - Instytutu Informatyki UJ
Bioinformatyka, edycja 2016/2017, laboratorium 4
23.11.2016
Instytut Informatyki i Matematyki Komputerowej UJ,
opracowanie: mgr Ewa Matczyńska, dr Jacek Śmietański
Przyrównywanie sekwencji
1.
Algorytm Smitha-Watermana – dopasowanie lokalne
Aby utworzyć algorytm dopasowania lokalnego na podstawie powyższego wzoru na
dopasowanie globalne, należy dołożyć jeszcze jedną możliwość.
 s[i − 1][ j − 1] + δ (V [i ], W [ j ]), gdy dopasowanie lub substytucja

s[i − 1][ j ], gdy przerwa w V

s[i ][ j ] = max 
s[i ][ j − 1], gdy przerwa w W


0, gdy zaczynamy nowe loka ln e dopasowanie
Rysunek 4: Z materiałów do kursu „Computational Biology: Genomes, Networks, Evolution”, MIT OpenCourseWare
Dopasowanie lokalne metodą programowania dynamicznego możemy obliczyć w sposób
podobny do dopasowania globalnego, z tą różnicą, że pozwalamy aby dopasowanie zaczynało
i kończyło się w dowolnym miejscu (wstawiamy zero tam gdzie mutacja i indel dałyby
1
Bioinformatyka, edycja 2016/2017, laboratorium 4
23.11.2016
punktację ujemną), tzn. rekonstrukcji dopasowania nie musimy zaczynać od prawego dolnego
rogu, ale od dowolnego miejsca tablicy, które jest najlepiej punktowane. Rekonstruujemy
dopasowanie aż do miejsca, gdzie natrafimy na punktację zerową, bądź lewy górny róg
tablicy. Algorytm dynamiczny dopasowania lokalnego został przedstawiony przez Temple F.
Smith'a and Michael S. Waterman'a w 1981 roku.
Porównanie tych dwóch strategii dla programowania dynamicznego jest widoczne na
poniższym rysunku poniżej (rys. 2). Algorytmy te mają jedną podstawową wadę - za cenę
dokładnego i z pewnością optymalnego dopasowania płaci się złożonością czasową i
pamięciową - O(n*m), co sprawia, że zastosowanie tych algorytmów dla długich sekwencji
(rzędu milionów bądź miliardów nukleotydów, a takie porównania robi się najczęściej) jest
mocno ograniczone. Dlatego poszukiwano szybszych metod, które pozwoliłyby np. na
dopasowanie lokalne nieznanego fragmentu sekwencji do całego genomu organizmu we
względnie krótkim czasie.
Rysunek 1: Z materiałów do kursu „Computational Biology: Genomes, Networks, Evolution”, MIT OpenCourseWare
Zadanie 1.
Wykorzystując program NW-align (http://zhanglab.ccmb.med.umich.edu/NW-align/)
porównaj ze sobą sekwencje aminokwasowe (w nawiasach podano identyfikatory sekwencji
w bazie Protein):
- hemoglobiny beta u człowieka (GI:40886941) i szczura (GI:34849618)
- hemoglobiny beta u człowieka (GI:40886941) i mioglobiny ludzkiej (GI: 44955888)
2
Bioinformatyka, edycja 2016/2017, laboratorium 4
23.11.2016
- dowolnych dwóch cytochromów P450 człowieka (hasło do wyszukiwania: cytochrome P450
homo sapiens)
Jakie wnioski możesz wyciągnąć z dokonanych przyrównań?
Jakie znaczenie ma zastosowanie w porównaniach macierzy substytucji?
2.
Dopasowania sekwencji – biopython
Zadanie 2
Porównaj sekwencje aminokwasowe podjednostek alfa i beta hemoglobiny (odpowiednie
pliki pobierz z bazy danych):
>>>
>>>
>>>
>>>
>>>
from Bio import pairwise2
from Bio import SeqIO
seq1 = SeqIO.read("alpha.faa", "fasta")
seq2 = SeqIO.read("beta.faa", "fasta")
alignments = pairwise2.align.globalxx(seq1.seq, seq2.seq)
globalXX to rodzina funkcji, gdzie pierwszy symbol X oznacza sposób punktowania
dopasowań / niedopasowań, a drugi X – sposób punktowania przerw:
Punktacja dopasowań:
x
No parameters. Identical characters have score of 1, otherwise 0.
m
A match score is the score of identical chars, otherwise mismatch
score.
d
A dictionary returns the score of any pair of characters.
c
A callback function returns scores.
Punktacja przerw:
x
No gap penalties.
s
Same open and extend gap penalties for both sequences.
d
The sequences have different open and extend gap penalties.
c
A callback function returns the gap penalties.
Gdy istnieje więcej dopasowań optymalnych, biopython zwraca wszystkie (max. 1000):
>>> len(alignments)
80
>>> print(alignments[0])
('MV-LSPADKTNV---K-A--A-WGKVGAHAG...YR-', 'MVHL-----T-PEEKSAVTALWGKV----...Y-H',
72.0, 0, 217)
Dopasowanie sformatowane:
>>> print(pairwise2.format_alignment(*alignment[0]))
MV-LSPADKTNV---K-A--A-WGKVGAHAG---EY-GA-EALE-RMFLSF----PTTK-TY--F...YR|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||...|||
MVHL-----T--PEEKSAVTALWGKV-----NVDE-VG-GEAL-GR--L--LVVYP---WT-QRF...Y-H
Score=72
3
Bioinformatyka, edycja 2016/2017, laboratorium 4
3.
23.11.2016
Macierze substytucji
Biopython posiada zaimplementowane różne macierze substytucji:
>>> from Bio.SubsMat import MatrixInfo as mi
>>> mi.blosum62
Dopasowanie z powyższego przykładu z wykorzystaniem macierzy substytucji:
>>> from Bio import pairwise2
>>> from Bio import SeqIO
>>> from Bio.SubsMat.MatrixInfo import blosum62
>>> seq1 = SeqIO.read("alpha.faa", "fasta")
>>> seq2 = SeqIO.read("beta.faa", "fasta")
>>> alignments = pairwise2.align.globalds(seq1.seq, seq2.seq, blosum62,
-10, -0.5)
>>> len(alignments)
2
>>> print(pairwise2.format_alignment(*alignments[0]))
MV-LSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTY...KYR
||||||||||||||||||||||||||||||||||||||||||||...|||
MVHLTPEEKSAVTALWGKV-NVDEVGGEALGRLLVVYPWTQRFF...KYH
Score=292.5
4.
Dopasowanie lokalne
Analogicznie jak dla dopasowania globalnego mamy funkcję localXX:
>>> from Bio import pairwise2
>>> from Bio.SubsMat.MatrixInfo import blosum62
>>> alignments = pairwise2.align.localds("LSPADKTNVKAA", "PEEKSAV",
blosum62, -10, -1)
>>> print(pairwise2.format_alignment(*alignments[0]))
LSPADKTNVKAA
|||||||
--PEEKSAV--Score=16
<BLANKLINE>
Konkretne wartości punktacji: dopasowanie +5, niedopasowanie: -4, otwarcie przerwy: -2,
rozszerzenie przerwy: -0.5
>>> alignments = pairwise2.align.localms("AGAACT", "GAC", 5, -4, -2, -0.5)
>>> print(pairwise2.format_alignment(*alignments[0]))
AGAACT
||||
-G-ACScore=13
<BLANKLINE>
Zadanie 3
Zaimplementuj algorytm Needlemana-Wunscha dopasowania globalnego par sekwencji
w modelu liniowym i afinicznym.
4
Bioinformatyka, edycja 2016/2017, laboratorium 4
23.11.2016
Dla uproszczenia można przyjąć, że rozważane będą wyłącznie sekwencje aminokwasowe
(wykorzystaj macierz substytucji, np. BLOSUM62), kara za przerwę: -7 pkt.
Gdy istnieje więcej niż jedno optymalne dopasowanie, program powinien wypisać wszystkie.
Przetestuj swój algorytm porównując sekwencje hemoglobiny beta
(GI:40886941) i szczura (GI:34849618) z bazy Protein (użyj Bio.Entrez).
5.
u człowieka
Blast on-line
Zadanie 4.
1. wejdź na główną stronę NCBI, po prawej w dziale popular resources wybierz BLAST,
2. zobacz jakie główne odmiany blasta mamy do dyspozycji (sekcja Basic BLAST). Do czego
służą? Jakie sekwencje porównują ze sobą?
3. poszukaj z jakiego genu pochodzi następująca sekwencja:
GTACCTTGATTTCGTATTCTGAGAGGCTGCTGCTTAGCGGTAGCCCCTTGGTTTCCGTGGCAACGGAAAA
GCGCGGGAATTACAGATAAATTAAAACTGCGACTGCGCGGCGTGAGCTCGCTGAGACTTCCTGGACGGGG
GACAGGCTGTGGGGTTTCTCAGATAACTGGGCCCCTGCGCTCAGGAGGCCTTCACCCTCTGCTCTGGGTA
AAGTTCATTGGAACAGAAAGAAATGGATTTATCTGCTCTTCGCGTTGAAGAAGTACAAAATGTCATTAAT
GCTATGCAGAAAATCTTAGAGTGTCCCATCTGTCTGGAGTTGATCAAGGAACCTGTCTCCACAAAGTGTG
ACCACATATTTTGCAAATTTTGCATGCTGAAACTTCTCAACCAGAAGAAAGGGCCTTCACAGTGTCCTTT
ATGTAAGAATGATATAACCAAAAGGAGCCTACAAGAAAGTACGAGATTTAGTCAACTTGTTGAAGAGCTA
TTGAAAATCATTTGTGCTTTTCAGCTTGACACAGGTTTGGAGTATGCAAACAGCTATAATTTTGCAAAAA
AGGAAAATAACTCTCCTGAACATCTAAAAGATGAAGTTTCTATCATCCAAAGTATGGGCTACAGAAACCG
TGCCAAAAGACTTCTACAGAGTGAACCCGAAAATCCTTCCTTGCAGGAAACCAGTCTCAGTGTCCAACTC
TCTAACCTTGGAACTGTGAGAACTCTGAGGACAAAGCAGCGGATACAACCTCAAAAGACGTCTGTCTACA
TTGAATTGGGATCTGATTCTTCTGAAGATACCGTTAATAAGGCAACTTATTGCAGTGTGGGAGATCAAGA
ATTGTTACAAATCACCCCTCAAGGAACCAGGGATGAAATCAGTTTGGATTCTGCAAAAAAGGCTGCTTGT
GAATTTTCTGAGACGGATGTAACAAATACTGAACATCATCAACCCAGTAATAATGATTTGAACACCACTG
AGAAGCGTGCAGCTGAGAGGCATCCAGAAAAGTATCAGGGTAGTTCTGTTTCAAACTTGCATGTGGAGCC
ATGTGGCACAAATACTCATGCCAGCTCATTACAGCATGAGAACAGCAGTTTATTACTCACTAAAGACAGA
ATGAATGTAGAAAAGGCTGAATTCTGTAATAAAAGCAAACAGCCTGGCTTAGCAAGGAGCCAACATAACA
GATGGGCTGGAAGTAAGGAAACATGTAATGATAGGCGGACTCCCAGCACAGAAAAAAAGGTAGATCTGAA
TGCTGATCCCCTGTGTGAGAGAAAAGAATGGAATAAGCAGAAACTGCCATGCTCAGAGAATCCTAGAGAT
ACTGAAGATGTTCCTTGGATAACACTAAATAGCAGCATTCAGAAAGTTAATGAGTGGTTTTCCAGAAGTG
ATGAACTGTTAGGTTCTGATGACTCACATGATGGGGAGTCTGAATCAAATGCCAAAGTAGCTGATGTATT
GGACGTTCTAAATGAGGTAGATGAATATTCTGGTTCTTCAGAGAAAATAGACTTACTGGCCAGTGATCCT
CATGAGGCTTTAATATGTAAAAGTGAAAGAGTTCACTCCAAATCAGTAGAGAGTAATATTGAAGACAAAA
TATTTGGGAAAACCTATCGGAAGAAGGCAAGCCTCCCCAACTTAAGCCATGTAACTGAAAATCTAATTAT
AGGAGCATTTGTTACTGAGCCACAGATAATACAAGAGCGTCCCCTC
Jako bazę do przeszukania wybierz Human genomic plus transcript. Obejrzyj wyniki, zwróć
uwagę na klikalne podsumowanie graficzne wyszukanych dopasowań, obejrzyj wyszukane
dopasowania, zwróć uwagę na wartości score, e-value, identities, gaps.
4. wyszukaj tą samą sekwencję, tym razem w genomie myszy (mouse genomic plus
transcript), zobacz jakie parametry algorytmu można zmieniać (Algorithm parameters), jaki
gen u myszy jest najbliższy tej sekwencji? Jak dobre jest to dopasowanie?
5. wyszukaj białko o następującej sekwencji:
5
Bioinformatyka, edycja 2016/2017, laboratorium 4
23.11.2016
MKSILDGLADTTFRTITTDLLGSPFQEKMTAGDNPQLVPADQVNITEFYNKSLSSFKENEENIQCGENFM
DIECFMVLNPSQQLAIAVLSLTLGTFTVLENLLVLCVILHSRSLRCRPSYHFIGSLAVADLLGSVIFVYS
FIDFHVFHRKDSRNVFLFKLGGVTASFTASVGSLFLTAIDRYISIHRPLAYKRIVTRPKAVVAFCLMWTI
AIVIAVLPLLGWNCEKLQSVCSDIFPHIDETYLMFWIGVTSVLLLFIVYAYMYILWKAHSHAVRMIQRGT
QKSIIIHTSEDGKVQVTRPDQARMDIRLAKTLVLILVVLIICWGPLLAIMVYDVFGKMNKLIKTVFAFCS
MLCLLNSTVNPIIYALRSKDLRHAFRSMFPSCEGTAQPLDNSMGDSDCLHKHANNAASVHRAAESCIKST
VKIAKVTMSVSTDTSAEAL
Rozwiń menu Algorithm parameters, zobacz jak można zmieniać macierze substytucji, dla
jakiej macierzy domyślnie wykonywany jest algorytm?
Jaka jest rola tego białka w organizmie człowieka? Na którym chromosomie występuje? Jakie
inne zwierzęta posiadają dokładnie taką samą, bądź bardzo zbliżoną sekwencję tego białka?
(nazwy organizmów łacińskie są w nawiasach kwadratowych w tabelce podsumowującej
przeszukiwanie, zobacz w google co to za organizmy)
6. użyjemy jeszcze jednej odmiany BLASTA: tblastx, który może odnaleźć bardzo odległe
ewolucyjnie powiązania, ponieważ tłumaczy sekwencję zapytania (query) w 6 ramkach
odczytu i dopasowuje ją względem bazy danych również przetłumaczonej w 6 ramkach
odczytu, stąd jest to najwolniejsza z odmian BLASTA
Znajdź poprzez Entrez sekwencję rhodopsyny - światłoczułego barwnika występującego w
siatkówce oka u człowieka (NM_000539.3), dla tej sekwencji użyj tblastx do znalezienia
sekwencji podobnych – może to trwać dość długo, nawet kilka minut, w wynikach zwróć
uwagę na wypisaną ramkę odczytu dla dopasowania.
6.
BLAST w biopythonie
Zadanie 5.
from Bio.Blast import NCBIWWW
print(help(NCBIWWW.qblast))
Musimy podać jakiego typu BLASTA chcemy użyć, bazę, względem której będziemy
przeszukiwać, oraz sekwencję, względnie numer identyfikacyjny GI:
from Bio import SeqIO
result_handle = NCBIWWW.qblast("blastn", "nr", "23527284")
print(result_handle.read())
s = SeqIO.read(open("sequence.fa"), format="fasta")
result_handle = NCBIWWW.qblast("blastn", "nt", s.seq)
Aby ograniczyć liczbę zwracanych wyników można ustawić parametr hitlist_size
:
s = SeqIO.read(open("sequence.fa"), format="fasta")
result_handle = NCBIWWW.qblast("blastn", "nr", s.seq, hitlist_size=1)
Podstawowe bazy:
nr - dla sekwencji białkowych,
nt dla nukleotydowych
(inne możliwe bazy – opis blast.ncbi.nlm.nih.gov/Blast.cgi?CMD=Web&PAGE_TYPE=
6
Bioinformatyka, edycja 2016/2017, laboratorium 4
23.11.2016
BlastDocs&DOC_TYPE =ProgSelectionGuide#db$)$
Domyślnie wynik zwracany jest w postaci XML'a. Możemy go sparsować przygotowanym do
tego narzędziem.
from Bio.Blast import NCBIXML
blast_records = NCBIXML.parse(result_handle)
blast_record = blast_records.next()
Jeśli wyszukiwaliśmy większą liczbę sekwencji, będziemy mieć dla każdej sekwencji jeden
wynik blasta, jeśli szukaliśmy tylko jednej to bierzemy pierwszy obiekt zwrócony przez
iterator blast_records.
Blast record jest klasą stworzoną do obsługi wyników blasta :
biopython.org/DIST/docs/api/Bio.Blast.Record-module.html
Przeglądnijmy uzyskane dopasowania :
for alignment in blast_record.alignments:
print('Alignment----------------------------------')
print('title:', alignment.title)
print('length:', alignment.length)
for hsp in alignment.hsps:
print('HSP : ')
print('e value:', hsp.expect)
print(hsp.query[0:75] + '...')
print(hsp.match[0:75] + '...')
print(hsp.sbjct[0:75] + '...')
Można również uruchamiać BLASTA lokalnie, trzeba do tego ściagnąć z NCBI binarkę. Do
komunikacji z lokalnym blastem można użyć wrappera z Biopython'a: Bio.Blast.Applications
(dokumentacja biopython.org=DIST=docs=api=Bio.Blast.Applications-module.html).
Lokalny BLAST będzie na pewno szybszy, możemy dla niego tworzyć również własne bazy
danych do przeszukania.
7

Podobne dokumenty