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