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.
Zwrócono mi uwagę na fakt, że niestety funkcja pairwise2.globalcc sprawdza, jakiej klasy są obiekty podanych sekwencji. To niestety nie daje nam możliwościu użycia klasy “profile” bezpośrednio. W związku z tym proponuję dodać do klasy profile metode to_list(), która zwraca listę “kolumn” uliniowienia w liście i taką listę można podać do globalcc. Potem można też napisać funkcję “from_list”).