Bioinformatyka, edycja 2016/2017, laboratorium 1 5.10.2016 Instytut Informatyki i Matematyki Komputerowej UJ opracowanie: Ewa Matczyńska, Jacek Śmietański Zadania bioinformatyki 1. Program kursu i zasady zaliczenia Strona przedmiotu: http://jaceksmietanski.net/bioinformatyka Program kursu przedstawiony został na pierwszym wykładzie. Tematyka laboratoriów będzie się mniej więcej pokrywać z tematyką wykładów. Szczegółowe zasady zaliczenia dostępne są w osobnym dokumencie na stronie przedmiotu. Na stronie przedmiotu będą również umieszczane prezentacje z wykładów oraz materiały z laboratoriów. 2. Budowa nici DNA Organizmy zbudowane są z komórek. Każda komórka to skomplikowany system współdziałających ze sobą elementów. Szacuje się, że ciało człowieka zawiera ok 6*1023 komórek różnych typów. Istnieją organizmy jednokomórkowe, np. bakterie czy drożdże jak i wielokomórkowe, np. człowiek. Cała informacja potrzebna do konstrukcji i funkcjonowania komórki zakodowana jest w DNA znajdującym się w jądrze komórkowym. DNA (Deoxyribonucleic acid) jest nośnikiem informacji genetycznej u niemal wszystkich znanych organizmów żywych, ma strukturę podwójnej helisy. Helisa jest zbudowana z dwóch nici, z których każda składa się z powtarzalnych elementów tzw. nukleotydów, które są zbudowane z cukru, reszty fosforanowej i zasady azotowej. W DNA mamy 4 rodzaje zasad azotowych, są to adenina (A), guanina (G), cytozyna (C) i tymina (T). Z powodu struktury chemicznej zasady azotowe mogą łączyć się w ściśle określone pary: A łączy się z T, a C łączy się z G, jest to tzw. zasada komplementarności. Wiązania wodorowe, które wytwarzają się między komplementarnymi zasadami stabilizują helisę. Zróćmy uwagę, że obydwie nici tworzące helisę są w pewien sposób zorientowane. Na schematycznym rysunku można zauważyć tzw. końce 5' i 3' – pochodzą one z nazewnictwa chemicznego i informują jaka grupa jest dołączona na końcu nici. Jeśli jest to grupa fosforanowa to mamy koniec 5', jeśli hydroksylowa (-OH) to mamy koniec 3'. Komórka zawsze „czyta” sekwencję od końca 5' do końca 3' i domyślnie wszystkie sekwencje w bazach danych zapisywane są w tą stronę. Długość nici DNA mierzona jest w ilości zasad azotowych, ang. base pairs (bp). Zadanie 1. Obejrzyj jak wygląda struktura DNA w trójwymiarze: http://www.rcsb.org/pdb/explore/jmol.do?structureId=1BNA 1 Bioinformatyka, edycja 2016/2017, laboratorium 1 5.10.2016 - najlepiej ustaw display options: Style - Ball and Stick, Color - By Element, zaznacz checkbox H-bonds. Jakie kolory odpowiadają poszczególnym atomom? Autorami modelu podwójnej helisy są James Watson i Francis Crick, zaproponowali oni tą strukturę w 1953 roku, otrzymując za nią później nagrodę Nobla. W komórce organizmów eukariotycznych DNA zorganizowane jest w chromosomy, które są bardzo dobrze widoczne podczas podziału komórki, gdyż wtedy DNA jest w nich bardzo ciasno upakowane. Gdy komórka nie podlega podziałowi, DNA jest w luźnej postaci. U człowieka mamy 23 pary chromosomów. Gdyby rozwinąć DNA z 23 par chromosomów i połączyć, uzyskalibyśmy podwójną helisę długości ok.2m. Genomem nazywamy całą sekwencję DNA zawartą w pojedynczym zestawie chromosomów. U człowieka genom ma długość ok 3.2 mld bp, przy czym sekwencja genomu jest w 99.9% taka sama dla wszystkich ludzi. Natomiast 98% sekwencji jest identyczne jak u szympansa. Wydawać by się mogło, że im bardziej skomplikowany organizm tym dłuższy powinien być genom, jednak znane są genomy organizmów wiele razy dłuższe niż genom człowieka. Rysunek 1. Wielkość wybranych genomów (źródło: http://blogs.biomedcentral.com/on-biology/wpcontent/uploads/sites/5/2014/03/genomelog030.jpg) Zadanie 2. Jakie dostrzegasz korzyści z tego, że DNA ma budowę podwójnej helisy? (w stosunku do nici pojedynczej; weź pod uwagę, że DNA jest nośnikiem informacji) Zadanie 3. Odległość między nukleotydami na helisie DNA wynosi 0:34nm = 0:34 * 109m. Oblicz ile bajtów można zapisać na 1 cm DNA? 3. Budowa i znaczenie białek 2 Bioinformatyka, edycja 2016/2017, laboratorium 1 5.10.2016 Instrukcje zawarte w genomie potrzebne do funkcjonowania komórki jak i całego organizmu to w istocie przepisy na budowę odpowiednich białek. Białka są kluczowe dla działania naszego organizmu: - katalizują reakcje chemiczne: enzymy - odpowiadają za układ odpornościowy - regulują pracę organizmu: hormony, np. insulina - są receptorami światła, neuroprzekaźników - pełnią funkcje transportowe, np. hemoglobina - budują mięśnie, ścięgna, włosy Białka są zbudowane z aminokwasów, których mamy 20 rodzajów oznaczanych przez litery alfabetu: A R N D C E Q G H I L K M F P S T W Y V. Proces budowy białka polega na sekwencyjnym dołączaniu kolejnych aminokwasów, które tworzą łańcuch. Na skutek oddziaływań fizycznych, łańcuch aminokwasów zwija się i formuje strukturę przestrzenną białka. Sekwencja aminokwasów determinuje strukturę 3D białka, a co za tym idzie, jego funkcję. Zadanie 4. Obejrzyj strukturę białka. Struktury przechowywane są w bazie PDB (Protein Data Bank): http://www.pdb.org Możesz wybrać sobie np. hemoglobinę: nieutlenowana, id: 2HHB; utlenowana, id: 1HHO. Dla zainteresowanych lektura: http://www.pdb.org/pdb/101/motm.do?momID=41 4. Kod genetyczny i centralny dogmat Instrukcja budowy każdego białka czyli sekwencja aminokwasów białka jest zakodowana w genomie. Fragment DNA, który zawiera przepis na taką sekwencję nazywamy genem. Geny stanowią ok. 2% genomu człowieka, a ich liczbę szacuje się na ok. 20 tysięcy. Komórka „wie” gdzie w genomie znajduje się gen danego białka, przepisuje tą instrukcję na chwilową, jednoniciową kopię nazywaną mRNA. Cząsteczka mRNA jest bardzo podobna do DNA, z tą różnicą, że zamiast nukleotydu z tyminą (T), mamy nukleotyd z uracylem (U). Pozostaje pytanie, jak zakodowana jest sekwencja 20 aminokwasów za pomocą 4 nukleotydów. Tłumaczenie sekwencji mRNA na sekwencję aminokwasów odbywa się za pomocą kodu genetycznego, który jest uniwersalny dla wszystkich organizmów. Każde 3 nukleotydy kodują aminokwas, bądź oznaczają koniec tłumaczenia, są to tzw. kodony stop. Ponieważ mamy 43 = 64 możliwości na zakodowanie 20 aminokwasów, niektóre aminokwasy są kodowane przez więcej niż jedną trójkę nukleotydów, jest to tzw. degeneracja kodu. 3 Bioinformatyka, edycja 2016/2017, laboratorium 1 5.10.2016 Rysunek 2. Kod genetyczny (źródło: http://adegene.com/content/standard-genetic-code) Podsumowując, otrzymujemy tzw. centralny dogmat biologii molekularnej, który określa przepływ informacji w komórce. Sekwencja genu w DNA jest przepisywana na mRNA, na którego podstawie tworzone jest białko. Jeśli w danej chwili na podstawie genu produkowane jest białko to mówimy, że ulega on ekspresji. Każda komórka organizmu posiada ten sam genom, jednak różnią się one od siebie dlatego, że w komórkach różnych typów ekspresji ulegają różne białka. Bioinformatyka zajmuje się stosowaniem narzędzi matematycznych i informatycznych do rozwiązywania problemów z nauk biologicznych. Obejmuje takie zagadnienia jak badanie struktury, funkcji, ewolucji genów, białek, całych genomów. Podstawowe problemy to analiza sekwencji, analiza struktur 3D białek, analiza ekspresji, interakcje molekularne, projektowanie leków, modelowanie systemów biologicznych, analiza obrazów z wysokoprzepustowych technik eksperymentalnych, obrazów medycznych i wiele innych. Zadanie 5: Jak sądzisz, dlaczego kod genetyczny jest zdegenerowany? 5. Wprowadzenie do Pythona Python to interpretowany, interaktywny język programowania stworzony przez Guido van Rossuma w 1990. Nazwa pochodzi od Monty Pythona. Główne cechy: - dynamiczny system typów - zmienne nie mają przypisanych na sztywno typów, typ zmiennej wynika z wartości jaką dana zmienna przechowuje; 4 Bioinformatyka, edycja 2016/2017, laboratorium 1 5.10.2016 - automatyczne zarządzanie pamięcią - garbage collector; - wszystko jest obiektem: system typów w pythonie jest silnie powiązany z systemem klas, klasa może dziedziczyć z dowolnego typu. Można więc dziedziczyć klasy z napisów czy słowników, a nawet z liczb całkowitych, możliwe jest dziedziczenie wielokrotne; - wszystkie wartości przekazywane są przez referencję; - bloki kodu są wydzielane przez wcięcia, trzeba zwracać na to szczególną uwagę! Na zajęciach będziemy korzystać również z pakietu biopython: http://biopython.org/ 1. Podstawowe typy danych: (a) logiczny (b) liczby : int, float, long i complex np. compl = 3+2.7j (c) string str = 'Hello World!' (d) lista np. list = ['banana', 'apple', 'mango'] (e) krotka, ang. tuple - w pewnym stopniu podobna do listy, ale dostęp do jej elementów jest szybszy, jest niemodyfikowalna tuple = ('abcd', 786 , 2.23, 'john', 70.2) (f) słownik np. dict = {'name': 'john', 'code':6734, 'dept': 'sales'} 2. Instrukcja warunkowa if expression: statement(s) else: statement(s) --if expression1: statement(s) elif expression2: statement(s) elif expression3: statement(s) else: statement(s) --if n>0: n+=2 else: n-=2 5 Bioinformatyka, edycja 2016/2017, laboratorium 1 5.10.2016 3. Pętla while: while expression: statement(s) --while n>0: n-=1 4. Pętla for for iterating_var in sequence: statement(s) else: statement(s) --for n in range(1, 10): print(n) else: print("done") --fruits = ['banana', 'apple', 'mango'] for fruit in fruits: print('Current fruit :', fruit) 5. Definiowanie funkcji def functionname(parameters): ... return [expression] --def fibonacci(n): a, b = 0, 1 while a < n: print(a) a, b = b, a+b return b Zadanie 6: Co wypisuje wskazana wyżej funkcja „fibonacci” i jaką wartość zwraca? 6. Importowanie modułów: import module1[, module2[,... moduleN] --- 6 Bioinformatyka, edycja 2016/2017, laboratorium 1 5.10.2016 import math from math import sin,cos 7. Podstawowe operacje na plikach: file_object = open(file_name [, access_mode][, buffering])) file_object.write(string) file_object.read([count]) file_object.readline() fileobject.close() --for line in file_object: print(line) 8. Standardowe wejście i wyjście import sys parameter = sys.argv[0] s = sys.stdin.readline() name = input("What is your name? ") print(name) 9. „Hello world” print("Hello protein world!") w funkcji: def hello(): print("Hello protein world!") 10. Proste operacje na stringach, listach i słownikach str = 'AGGTTACT ' print(str) # complete string print(str[0]) # first character of the string print(str[2:5]) # characters starting from 3rd to 6th print(str[2:]) # string starting from 3rd character print(str[-1]) # last character print(str[0:len(str):2])# starting from first to last character with step 2 print(str[::-1]) # reverse string print(str * 2) # string two times print(str + "TEST") # concatenated string print(len(str)) # length of string print(min(str)) # smallest item print(max(str)) # largest item print(str.index("G")) #index of the first occurence of G in string print(str.count("T")) #total number of occurences of T in string print(str.rstrip()) #trailing whitespaces removed print(str.split('A')) #split using a delimeter #i dużo innych 7 Bioinformatyka, edycja 2016/2017, laboratorium 1 5.10.2016 --list = [ 'ACCTGC', 786 , 3.14, 'Adenine' ] tinylist = [123, 'DNA'] print(list) # complete list print(list[0]) # first element of the list print(list[1:3]) # elements starting from 2nd to 4th print(list[2:]) # elements starting from 3rd element print(tinylist * 2) # list two times print(list + tinylist) # concatenated lists print(list.append('1234')) # appends new element print(list.insert(2, "new")) #inserts new element print(list.extend(["two", "elements"])) # extends with elements --complementary_bases = {'A':'T', 'T':'A', 'C':'G', 'G':'C'} print(complementary_bases['A']) # value for 'A' key print(complementary_bases) # complete dictionary print(complementary_bases.keys()) # all the keys print(complementary_bases.values()) # all the values #adds pair to the dictionary: complementary_bases['human DNA length in bp'] = 3.2*10**9 Zadanie 7: Niech a będzie dowolna sekwencją DNA (ciąg niezerowej długości, składający się z liter A, C, G i T), np.: a=’TATATAAAAAAAAGGGGGAT”. Wypisz: a) ciąg w odwróconej kolejności; b) pierwsze pięć nukleotydów w sekwencji c) co trzeci nukleotyd d) kolejne fragmenty ciągu pogrupowane po trzy znaki w jednym wierszu Zadanie 8: (4 pkt) Zarejestruj (zaloguj) się na portalu http://rosalind.info i dołącz do klasy „bioinformatyka”. Wykonaj zadania oznaczone dzisiejszą datą. Funkcję translate(sequence) zwracającą sekwencję aminokwasów, przetłumaczoną zgodnie z kodem genetycznym wywołaj dla sekwencji z załączonego pliku (hemoglobin.txt). Wykonaj tłumaczenie, rozpoczynając również od drugiego i od trzeciego nukleotydu, zobacz jak wpływa to na zmianę wyprodukowanego białka. 8 Bioinformatyka, edycja 2016/2017, laboratorium 1 5.10.2016 Wskazówki: 1. Tabela kodu genetycznego: gencode = { 'ATA':'I', 'ACA':'T', 'AAC':'N', 'AGC':'S', ‘CTA':'L', 'CCA':'P', 'CAC':'H', 'CGA':'R', 'GTA':'V', 'GCA':'A', 'GAC':'D', 'GGA':'G', 'TCA':'S', 'TTC':'F', 'TAC':'Y', 'TGC':'C', 'ATC':'I', 'ACC':'T', 'AAT':'N', 'AGT':'S', 'CTC':'L', 'CCC':'P', 'CAT':'H', 'CGC':'R', 'GTC':'V', 'GCC':'A', 'GAT':'D', 'GGC':'G', 'TCC':'S', 'TTT':'F', 'TAT':'Y', 'TGT':'C', 'ATT':'I', 'ACG':'T', 'AAA':'K', 'AGA':'R', 'CTG':'L', 'CCG':'P', 'CAA':'Q', 'CGG':'R', 'GTG':'V', 'GCG':'A', 'GAA':'E', 'GGG':'G', 'TCG':'S', 'TTA':'L', 'TAA':'*', 'TGA':'*', 'ATG':'M', 'ACT':'T', 'AAG':'K', 'AGG':'R', 'CTT':'L', 'CCT':'P', 'CAG':'Q', 'CGT':'R', 'GTT':'V', 'GCT':'A', 'GAG':'E', 'GGT':'G', 'TCT':'S', 'TTG':'L', 'TAG':'*', 'TGG':'W' } Gwiazdka (*) oznacza kodon STOP. Po jego przeczytaniu, translacja powinna się zakończyć. 2. Funkcja line.rstrip() usunie znaki końca linii z pliku. 3. Funkcja range(start, stop, step) ułatwi iterowanie po sekwencji 4. Instrukcje testowe wykonywane poza zdefiniowanymi funkcjami, warto zawrzeć wewnątrz konstrukcji: if __name__ == "__main__": Konstrukcja ta będzie wykonana tylko gdy plik będzie uruchamiany bezpośrednio (nie będzie wykonywana, jeżeli nasz moduł zostanie zaimportowany przez inny program). (więcej informacji tutaj: http://pl.wikibooks.org/wiki/Zanurkuj_w_Pythonie/Testowanie_modu%C5%82%C3%B3w) 9