Teaching

ONA 4 – przetwarzanie sygnałów

Dziś zajmujemy się przetwarzaniem sygnałów, slajdy są dostępne tu: ONA4-DSP

Interesują nas przede wszystkim biblioteki scipy.signal i scipy.fftpack

1. Wygeneruj sygnał funkcji wielomianowej o zaburzeniu Gaussowskim, dla 10000 punktów. Wykonaj uśrednienia tego sygnału przy pomocy średniej kroczącej, albo splotu przy pomocy filtru kwadratowego, trójkątnego lub Gaussowskiego. WYniki zaprezentuj na wykresie

2. Pobierz sygnał o zajętości nukleosomowej z plików pochodzących z eksperymentu MNase-Seq ( dane tu w formacie bedgraph ) . Wczytaj go do numpy jako wektor. Przedstaw go na wykresie. Używając szybkiej trasformaty fouriera oblicz widmo Fourierowskie tego sygnału. Przedstaw je na innym wykresie. Wyzeruj część widma wysokich częstotliwości i dokonaj odwrotnej transformaty Fouriera, aby uzyskać wygładzony sygnał zajętości nukleosomami. Spróbuj tak dobrać parametry filtra, aby wykres po odwrotnej transformacie Fouriera miał okres zbliżony do 160-200 par zasad.

WBO – plan wykładów

W związku z prośbami o plan tematów na kolejnych wykładach i ew. lektury podaję tu plan na dotychczasowe i planowane zajęcia do kolokwium:

Sekwencje DNA i komplementarność, grafy – z książki Pevznera “Computational Molecular Biology”)

Modele ewolucji DNA – część z notatek N. Dojera , część z książki Felsensteina  “inferring phylogenies”)

Porównania par sekwencji – (wg książki Durbina “biological sequence analysis”)

Budowa drzew filogenetycznych – (z książki Felsensteina “inferring phylogenies”)

Uliniowienia wielu sekwencji (z książki Durbin’a – biological sequence analysis)

Ukryte modele Markowa (HMM) – (z książki Durbin’a j.w.)

Zastosowania HMM do modelowania domen białkowych

Wyszukiwanie sekwencji podobnych i algorytm BLAST (część notatek na stronie N. Dojera )

Rodziny i funkcje genów

Uzgadnianie drzew

 

 

WBO – 3 – uliniowienie par sekwencji

Dziś zajmujemy się uliniawianiem par sekwencji – wyk3

Zadania na laboratorium:

  1. Zapoznaj się z modułem Bio.pairwise2 i klasą align oraz funkcją format_alignment()
  2. Wczytaj sekwencje DNA histonów histones.fa i czynników bZIP bzips.fa do pamięci.
  3. Dokonaj porównań pomiędzy sekwencjami DNA białek histonowych i bzip – dla każdej pary policz oceny dla najlepszych globalnych i lokalnych uliniowień z afiniczną funkcją kary. Wylicz średnią ocenę w ramach grupy bzip, w ramach grupy histonów i pomiędzy grupami.
  4. Dokonaj tłumaczenia sekwencji DNA na białka, powtórz obliczenia używając macierzy substutucji BLOSUM 50

Praca domowa:

Napisz program, który wylicza optymalne lokalne uliniowienie dla sekwencji DNA dla różnych możliwych tłumaczeń na białka (tzn zakładając standardową tablicę kodonów ) ale możliwe różne ramki odczytu w obu sekwencjach. Dla uproszczenia załóżmy, że insercje i delecje powinny występować tylko “trójkami” nukleotydów. Zastanów się, jakby wyglądał algorytm programowania dynamicznego, gdybysmy rozważali ogólną postać insercji i delecji

ONA – zadanie 1 – fraktale Mandelbrota i Julii

Naszym zadaniem będzie napisanie programu, który oblicza kolejne przybliżenia zbiorów fraktalnych. Inspiracją będą dla nas zbiory Julii  i Mandelbrota, ale nasz program będzie bardziej ogólny.

Podstawową funkcją naszego programu, będzie funkcja:

M=approx(xrange,yrange,max_iter,max_value,f),

która zwraca macierz wyników iteracji funkcji f dla wszystkich par wartości z wektorów xrange  i yrange, interpretowanych jako liczby zespolone.

M[a,b] = liczba iteracji funkcji f dla wartości xrange[a]+j*yrange[b], dla których wartość funkcji nie wykracza poza max_value, przy czym przybliżamy wynik poprzez wykonanie maksymalnie max_iter iteracji. Tzn jeśli po wykonaniu max_iter iteracji nigdy nie wykroczyliśmy poza zakres max_value, to zwracamy max_iter, w przeciwnym wypadku zwracamy ten numer iteracji, dla którego nasza wartość f(z,n) przekroczyla max_value. argument f powinien być funkcją przyjmującą 2 argumenty: z i n, gdzie z to liczba zespolona a n to stopień iteracji.

Oprócz funkcji approx(..), powinnismy zaimplementować funkcje Mandelbrot(z,n) i Julia(z,n), implementujące iterację dla zbioru Julii i Mandelbrota.

Nasz program powinien umożliwiać:

  • Wywołanie z linii komend i podawanie parametrów: zakresy x,y, n, typ funkcji, typ wyjścia, dodatkowe parametry (np. c dla zbioru Julii)
  • Wyświetlanie wyniku przy pomocy  funkcji imshow() wg wybranej skali kolorów
  • zapisywanie obrazka w pliku png, pdf lub macierzy w pliku  (przy pomocy operacji np.save())

Punktacja:

  • funkcja approx – 3 pkt
  • funkcje mandelbrot, julia – 2 pkt
  • obsługa z linii komend – 2 pkt
  • wyswietlanie – 2 pkt
  • zapis do pliku – 1 pkt

Rozwiązania wysyłamy do 25 III na adres e-mail wykładowcy z dopiskiem [ONA-1-2018]- w tytule 

ONA 3 – Wykresy

Dzisiaj zajmujemy się wykresami.

Slajdy są tu ONA3-wykresy

Zadania na dziś:

1. Narysuj wykres podobny do tego ze slajdu nr. 14  z wykładu. Uwzględnij opisy osi, zakresy wartości, kolory, znaczniki wartości, legendę i tytuły osi oraz wykresów.

2. Narysuj wykres 10*sin(x)+normal(0,1) dla 1000 punktów w zakresie 0,10. Przyda się funkcja normal().

3. Napisz program, który wykona 1000 prób rzutu 10 kostkami. Narysuj na jednym wykresie 3 przenikające się histogramy (alpha=0.25): suma oczek na kościach parzystych (0,2,4,6,8), suma oczek na kościach nieparzystych (1,3,5,7,9), suma oczek na wszystkich kościach. Może przydać się funkcja randint().

4. Przedstaw dane z wykresu 3. w postaci 3 wykresów pudełkowych (boxplot)

5. Narysuj powierzchnię 3d (x,y,z) in linspace(0,1,100) gdzie z=y*cos(x)+(1-y)*sin(x), Może być przydatny ten przykład

5. Narysuj mapę ciepła dla tej samej powierzchni. Użyj różnych map kolorów.

 

WBO-2: Ewolucja sekwencji DNA

Dziś będziemy mówić o modelach ewolucji sekwencji.

Slajdy do wykładu są tu: wyk2.

Podczas labów mogą Państwo korzystać z serwera Jupyter, który ma zainstalowany pakiet biopython. (kilka porad jak używać jupyter’a tu )

Zadania do wykonania na dziś:

1. Obejrzyj moduł Bio.SubsMat.MatrixInfo, gdzie zdefiniowane są modele PAM i BLOSUM

2. Zaimplementuj prosty łańcuch Markowa, który pozwoli na symulowanie mutacji w czasie dyskretnym, zgodnie z macierzami przejścia zdefiniowanymi wykorzystując moduł SubsMat (substitution table). Rozważ model analogiczny do modelu Kimury i Felsensteina

3. Rozważ sekwencje z pliku fasta z poprzednich zajęć. Zbadaj ile mutacji losowych potrzeba aby Łańcuch Markowa “przeszedł” pomiędzy dwiema sekwencjami bez selekcji.

4. Zaimplementuj prosty proces Markowa z selekcją – jeśli mutacja zbliża nas do “celu” w sensie odległości Hamminga, to ją akceptuj, w przeciwnym razie wracaj do punktu wyjścia.

 

ONA 2 – Macierze i NumPy

Slajdy do wykładu – ONA2-Macierze

Jako interpretera pythona mogą Państwo użyć tego (Trochę porad jak używać tu )

Ćwiczenia:

  1. Stwórz macierze A i B o wymiarach  1000×1000 zawierające wartości A[i,j]==i*3-j*5 i B[i,j]==np.sqrt(A[i,j]) (Zauważ, że to wymaga wartości urojonych, a więc macierzy typu complex64 i wartość sqrt(-1) ->.j)
  2. Napisz funkcję poz(indeksy, shape), która dla zadanej krotki indeksów zwraca liniową pozycję elementu o zadanych indeksach w wielowymiarowaj macierzy o kształcie shape.
  3. Korzystając z broadcastingu i mnożenia macierzy zmień znak elementów w macierzy B, których suma indeksów jest nieparzysta
  4. korzystając z metody sort() , posortuj macierz 3-wymiarową wg. drugiej współrzędnej i obejrzyj wynik.
  5. Korzystając z funkcji frompyfunc() napisz funkcje wektorowe, które liczą a) sumę kwadratów dwóch macierzy  (dwie macierze do jednej)
    b) iloraz i resztę z dzielenia całkowitoliczbowego przez 17 (jedna macierz wejściowa i dwie macierze wyjściowe)
  6. Korzystając z modułu time, porównaj prędkość funkcji liczących N potęg dwójki – na liście i w wektorze. Dla jakich wartości N warto używać macierzy?