Monthly Archives: March 2018

WBO – zadanie 1 – uliniowienie progresywne

Naszym zadaniem jest elegancka implementacja progresywnego uliniowienia wg następujących wytycznych

1) Zaimplementuj klasę profile, która zachowuje się podobnie do multiple alignment, ale kiedy żądamy indeksu a[i], to dostajemy i-tą kolumnę uliniowienia, zamiast wiersza (w Multiple Alignment z Biopythona mamy a[i] = wiersz, a[:,i]=kolumna)  (2 pkt)

2) zaimplementuj funkcje callback dla metody Bio.pairwise2.globalcc dla afinicznej kary za przerwę (parametryzowalnej 2 parametrami) i oceny substytucji profili, dla funkcji oceny sumy par (3 pkt)

3) zaimplementuj metodę obliczającą odległości sekwencji białkowych według prostego modelu estymacji odległości, gdzie d= -19/20 * ln (1 – (20/19)*p), dla p=procent zmienionych aminokwasów w globalnym uliniowieniu pary, oraz pozwalającą wyliczać macierz odległości parami (2 pkt)

4) Zaimplementuj metodę konstruującą uliniowienie progresywne korzystającą z drzewa stworzonego metodą neighbor joining (nj w Biopythonie) dla macierzy odległości uzyskanej metodą z p.3) i uliniowienie profili metodą z punktu 1) i 2). (3 pkt)

Wszystko to powinno być włożone do udokumentowanego modułu python’a i wysłane do mnie w emailu z “[WBO-1-2018]” w temacie do 16. IV 2018.

WBO-5 – Uliniowienie wielu sekwencji

Dzisiaj mówiliśmy o metodach uliniowienia wielu sekwencji. Slajdy są tu: wyk5

Na zajęciach naszym celem jest zapoznanie się z metodami uliniowienia wielu sekwencji w pakiecie Biopython oraz metodami uliniowienia progresywnego. Warto przeczytać odpowiedni rozdział tutorialu biopythona

0. Tutaj warto, aby każdy z Państwa założył sobie na serwerze Jupyter własny folder, żeby pliki nam się nie mieszały. Proponuję numer indeksu, albo inny identyfikator jednoznaczny.

1.Weźmy na początek naszą rodzinę sekwencji białek histonowych. Jest dostępna na naszym serwerze jupyter w pliku histones.fa_ Na początek potrzebujemy wczytać je z pliku (SeqIO.parse ) przetłumaczyć je na sekwencje białkowe (metoda translate()) i zapisać do pliku fasta (SeqIO.write) wraz z odpowiednimi identyfikatorami i usuniętymi kodonami stopu (*, która powstaje w wyniku translate)

2. Wykorzystajmy program clustalw (Bio.Align.Applications.ClustalwCommandline) do wykonania mulituliniowienia tych sekwencji na naszym serwerze plik wykonywalny jest zainstalowany w katalogu /usr/bin. Po wykonaniu zadania wczytaj uliniowienie z pliku .aln (AlignIO.read format “clustal”) oraz drzewo filogenetyczne z pliku .dnd (Phylo.read format=”newick”)

3. Wykorzystaj teraz program muscle (Bio.Align.Applications.MuscleCommandline) do wykonania multiuliniowienia tych samych sekwencji. Wczytaj je z pliku w formacie fasta

4. Stwórz drzewo filogenetyczne na podstawie uzyskanego uliniowienia metodą neighbor joining jak na poprzednich zajęciach. Porównaj to drzewo do drzewa otrzymanego z programu clustalw

5. Powtórz ćwiczenia 2-4 dla większego zbioru sekwencji (np. Human_PAH_homologs). Czy tutaj widoczne są większe różnice między metodami?

6(*). Napisz prostą implementację uliniowienia progresywnego, która wykorzystuje globalne uliniowienie z modułu Bio.pairwise2 i funkcje “callback”

 

ONA – 5 – Analiza obrazu

Dzisiejsze zajęcia poświęcimy na analizę obrazów 2d. Slajdy są tu ONA5-Obrazy

Przydać mogą się pakiety: scipy.ndimage i matplotlib

Zadania na dziś:

0. Pozyskaj przy pomocy kinect swoje zdjęcie w pracowni komputerowej zarówno w postaci macierzy głebokości, jak i obrazów rgb (przyklady tu i tu)

1. Przekształć obraz RGB do skali szarości poprzez uśrednienie składowych.

2. Wyświetl te obrazy na swoim komputerze przy pomocy biblioteki matplotlib

3. Wyświetl histogram obrazu i dokonaj jego “wyrównania” pisząc program w  języku python

f(x) = (x-min)/(max-min)*255 dla parametrów min i max będących maksymalną i minimalną jasnością punktu.

4. Zastosuj filtr Gaussowski rozmiaru k, aby “wygładzić” obraz i obejrzyj wyniki dla różnych k (3,5,7,9,11,…)

5. Napisz program wykrywający krawędzie przy pomocy filtru Sobel’a

6(*). Napisz program wykrywający cienie na obrazie z miernika odległości.

7(*). Użyj biblioteki pydicom do wczytania przekrojów przez głowę z projektu visible human. Napisz program, który zamieni te przekroje poziome na prekroje pionowe. Użyj wygładzania krawędzi.

 

WBO 4 – drzewa filogenetyczne

Dziś rozmawiamy o prostych metodach kostrukcji drzew na podstawie macierzy odległości. Slajdy na dzis wyk4

Na laboratorium będziemy konstruować drzewa w praktyce.

Warto zapoznać się z dokumentacją modułu Bio.Phylo w tutorialu jak i na stronie wiki.

1. Na początek ustalmy dwie listy sekwencji. Rozważmy sekwencje paralogiczne histonów z drożdży z poprzednich zajęć oraz ortologi ludzkiej hydroksylazy fenyloalaniny   Human_PAH_orthologues.fa. Dla histonów musimy je najpierw przetłumaczyć na białka (s.translate()), a dla drugiego zbioru mamy już sekwencje aminokwasowe.

2. Wylicz macierze odległości dla tych grup sekwencji przy pomocy klasy Bio.Phylo.TreeConstruction.DistanceCalculator  (dla macierzy BLOSUM62, osobno dla histonów, i osobno dla genów PAH – to  zajmie chwilę). Można użyć plików  Human_PAH_orthologues i Human_PAH_paralogues oraz Human_H2BFS_paralogues i duży plik Human_PAH_orthologues-91.

3. Stwórz drzewa filogenetyczne na podstawie macierzy przy pomocy klasy Bio.Phylo.TreeConstruction.DistanceTreeConstructor zarówno metodą UPGMA – hierarchiczną jak i nj (neighbor joining)

4. Wyświetl uzyskane drzewa przy pomocy metody draw_ascii() i draw()

5. Zapisz uzyskane drzewa do formatów newick i phyloxml. obejrzyj wyniki.

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

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