WBO 6 – Searching for distant relatives- BLAST

The lecture is again online. I will send the link before. Labs are again after the lecture. English version below:

Dziś rozmawialiśmy o algorytmach przybliżonego wyszukiwania sekwencji w bazach danych. Slajdy są tu: wyk6-blast.

Na ćwiczeniach spróbujemy zająć się wykorzystaniem programu blast: 0. Wczytaj plik w formacie FastQ microbial_reads.fastq (jest już na naszym serwerze jupyter w katalogu WBO, nie trzeba go tam ładować), przy pomocy SeqIO.parse(). Są to odczyty z mikrobiomu jelitowego myszy.

Continue reading “WBO 6 – Searching for distant relatives- BLAST”

ONA 5 – analiza obrazu

Dzisiejsze zajęcia poświęcimy na analizę obrazów 2D i 3D. Slajdy są tu ONA5-Obrazy Wykład jak zwykle w trybie zdalnym, link podam na czacie wydziałowym.

Przydadzą 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 Niestety, z powodu kwarantanny, musimy polegać na przykladowych obrazach z kamery głębokości tu, a dalmierza tu. Instrukcje jak je wczytać  i wyświetlić mogą Państwo znaleźć na naszym serwerze jupyter tutaj

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,  gdzie nowa wartość pixeli o jasności x wynosi n(x) = (x-min)/(max-min)*255 dla parametrów min i max będących maksymalną i minimalną jasnością punktu. To zadanie lepiej wykonywać na pliku o zaburzonym histogramie, np. tym prześwietlonym plikuobrazek.png

4. Zastosuj filtr Gaussowski z biblioteki ndimage 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, porównaj wyniki swojej implementacji (na podstawie wykładu) z wynikam funkcji sobel 

6(*). Napisz program wykrywający cienie na obrazie z miernika odległości i wyświetlający tylko tę część obrazu z kamery, która jest w określonym zakresie odległości od kamery.

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.

APB – zajęcia 5 – Pakiety LIMS

Na dzisiejszym wykładzie (także online, link podam przez chat wydziałowy) będziemy rozmawiać o problemach z powtarzalnymi badaniami naukowymi (w bioinformatyce, ale nie tylko) i powiemy co nieco o pakietach takich jak BASE czy Galaxy w kontekście ich roli jako rozszerzenie pakietów LIMS. Slajdy są dostępne tu: wyk5-lims

W czasie labów, znów zrobimy sobie konsultacje z zespołami (proszę o rejestrację w tym doodle ). Zakładam, że podczas dzisiejszego spotkania będziemy mogli już omawiać Państwa projekty (przesłane na mój e-mail w formie załącznika – a nie google docs, czy innej formy edytowalnej zdalnie). Oprócz komentarzy z mojej strony nt. samych projektów, będziemy już też rozmawiać o planowanym podziale zadań i harmonogramie.

WBO 5 – multiple sequence alignment methods

English version below:

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 korzystających z serwera jupyter, 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”) (osoby pracujące na mac’ach mogą zainstalować sobie clustal Omega)

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(*). Praca domowa za 2 punkty. Napisz prostą implementację uliniowienia progresywnego, która wykorzystuje globalne uliniowienie z modułu Bio.pairwise2. To będzie wymagać implementacji funkcji call-back dla substytucji profili i niewielkich zmian w samym module pairwise2

English version

0. If you are using our Jupyter server, please make sure that you work in a separate folder that identifies you by name.

1.Firstly, let us take the histones.fa file. We need to parse it (using Bio.SeqIO.parse method), then translate each of them into protein alphabet (using the  .translate() method) and save to another file using SeqIO.write( remember about removing the * symbols that represent translations of a stop codon)

2. Let us then use the clustalw (Bio.Align.Applications.ClustalwCommandline) to create a multiple alignment of these sequences (the clustalw executable should be in  /usr/bin on the server). After you are able to run it, you need to read the  .aln file with the alignment (AlignIO.read(file, format=”clustal”)) and the guide tree from the  .dnd file (Phylo.read format=”newick”) (students using apple macs can install clustal Omega)

3. Now, for comparison, you can use the  muscle  program (Bio.Align.Applications.MuscleCommandline) to create a multiple alignment of the same sequences. It should give you the alignment in a  fasta format.

4. You can use neighbor joining algorithm we discussed last week to create the tree based on the muscle alignment and compare it visually to the guide tree from clustalw. Do you see differences?

5. If you still have time, you can repeat assignments 2-4 for a larger set of sequences (e.g. Human_PAH_homologs). Are the differences between trees more visible here?

6(*). Homework assignment(2pts). Please implement a simple progressive alignment method that uses Bio.pairwise2 module. It is not as simple as it seems, as you need to implement profile substitution matrix using a callback function and possibly some changes in bio.pairwise2 module.

 

ONA – Zadanie 1- stochastyczny automat komórkowy

Podobnie jak w zeszłym roku, naszym pierwszym zadaniem zaliczeniowym będzie wykonanie programu w pythonie, który symuluje automat komórkowy. Tym razem będzie to tzw. stochastyczny automat komórkowy, gdzie zmiany stanów następują losowo, zgodnie z pewnymi regułami. Będziemy to robić na przykładzie bardzo uproszczonego modelu epidemii podczas kwarantanny. Będziemy używali adaptacji uproszczonego modelu Kermack’a-McKendricka. Osoby zainteresowane mogą poczytać wicej o podobnych modelach w tym artykule:schneckenreither2008

W naszym przypadku model automatu komórkowego to dwuwymiarowa macierz o wymiarach NxN (gdzie N jest parametrem wykonania programu). Każda komórka macierzy reprezentuje jedną osobę i może przyjmować jedną z 3 możliwych wartości:

  • 0 – podatny na zarażenie,
  • 1 – zarażony,
  • 2 – ozdrowieniec (niepodatny na zarażenie).

Macierz jest w większości inicjowana na 0 (cała populacja jest na razie zdrowa i podatna na zarażenie), oprócz k pierwszych zarażonych, rozłożonych losowo w różnych miejscach macierzy (k to kolejny parametr wykonania)

W każdym kroku symulacji, wartości w macierzy będą zmieniały się zgodnie z następującymi regułami:

  • ozdrowieńcy (komórki o wartości 2) nie zmieniają już swojego stanu
  • każda komórka w stanie zarażonym (1) ma szanse na wyzdrowienie (przejście do stanu 2) w każdym kroku równe p_w (parametr)
  • każda komórka w stanie podatnym (0) ma szanse na zarażenie się od każdego chorego sąsiada równe p_z (parametr)

Sąsiedztwo wyznaczamy wg. metody Moore’a, przy czym rozważamy sąsiedztwo o promieniu r, (parametr, domyślnie 1), czyli sąsiadami są pola o odległości Czebyszewa nie większej niż r.

W związku z tym, w każdym kroku możemy obliczyć dla każdego pola liczbę sąsiadów zarażonych Z (liczba pól w zadanym sąsiedztwie, które w obecnym stanie mają wartość 1). Wtedy prawdopodobieństwo zarażenia w danym kroku (zakładamy niezależne zarażenia od wszystkich sąsiadów) to 1- (1-p_z)**Z.

Interesuje nas ewolucja takich układów dla zadanych parametrów N,k,p_w,p_z,r.

Państwa zadaniem jest napisanie programu, który pozwala na:

  1. Przeprowadzenie symulacji (dla zadanych parametrów), która wykonuje maksymalnie M kroków, chyba, że wcześniej zostanie osiągnięty stan, w którym wszyscy są już niepodatni na zarażenie ozdrowieńcami (5 pkt)
  2. Wizualizacja poszczególnych kroków algorytmu w postaci:
    a) wykresu liniowego (liczba komórek o wartościach 0,1,2 w zależności od czasu – 1 pkt)
    b) wizualizacji stanów systemu w kolejnych krokach (przy pomocy funkcji imshow() – 1pkt)
    c) zapisu tych wizualizacji do formatu .png (1 pkt)
    c) animacji przy pomocy klasy animation (2 pkt).

Mają Państwo na to 2 tygodnie, czyli spodziewam się przesłania do mnie e-mailem, z tagiem [ONA] w tytule, rozwiązania w postaci pojedyńczego, skomentowanego pliku pythonowego, jako załącznik, do dnia 1. kwietnia 2020.

Pytania najlepiej przesyłać w postaci komentarzy do tego posta.

ONA 4 – przetwarzanie sygnałów

Dzisiejszy wykład także będzie przeprowadzony zdalnie na platformie google meet. Link wyślę Państwu przez e-mail i chat wydziałowy.

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

Animacja transformaty Fourier’a z wikipedii (ze slajdów) jest tutaj, zaś animacje splotu, można znaleźć na stronie wikipedii tu: Convolution

Continue reading “ONA 4 – przetwarzanie sygnałów”

APB wykład 4 – debugowanie, profilowanie, logowanie

Dziś mamy wykład zdalny. Spotykamy się o 14:15 (można będzie pewnie dołączać od 14tej) na google meet. Link wyślę do Państwa przez usosmail i rocket chat.

Spróbujemy dziś porozmawiać o debugowaniu, profilowaniu, logowaniu w pythonie na podstawie tych slajdów:wyk4-debugowanie. Jeśli starczy nam czasu, wrócimy też do tematów z poprzedniego wykładu, który się nie odbył, nt. automatycznych testów oprogramowania.

Podczas labów, chciałbym znowu porozmawiać z Państwem nt. postępów w pracy zespołowej. Proponuję, żebyśmy tym razem zrobili to także na platformie google meet, w tym samym miejscu gdzie wykład. Jeśli mają Państwo preferencje co do czasu, proszę zapisywać się (zespołowo) pod tym linkiem: https://doodle.com/poll/pp2nb3vtqnursxzb

Przypominam, że do przyszłej środy spodziewam się od każdego z zespołów opisu Państwa projektu. Zdaję sobie sprawę, że stan zagrożenia epidemiologicznego nie pomaga Państwu w pracy zespołowej, ale jestem przekonany, że mogą Państwo wykorzystać dostępne narzędzia do efektywnego działania. Możemy też poświęcić część wykładu na dyskusję nad problemami technicznymi w komunikacji i pomyśleć nad najlepszymi technologiami, które mogą Państwu pomóc.

WBO – assignment 1 – Coronavirus phylogeny – zadanie 1

As we are spending our time in quarantine, I thought we might try and consider reconstructing some phylogenetic trees that will tell us something about the evolutionary history of the coronavirus 2019-nCov. In particular, we will try and replicate (not completely, but the general idea) the panels b and c from Figure 2 in this paper:Identification_of_a_novel_coronavirus . The idea is to create and compare two phylogenetic trees created from the whole genome sequence of the coronavirus and from its spike protein (you might read more about spike proteins in this article, back from the previous SARS epidemic).

Our goal will be to write a script that creates these two plots using the following steps:

 

  1. Downloading the sequences from Entrez using Bio.Entrez (23 pts)
  2. Creating multiple alignments of both DNA (whole genome) and protein (spike protein) sequences (3 pts)
  3. Creating phylogenetic trees for both protein and genome alignments using the UPGMA and neighbor joining algorithms (3pts)
  4. Visualizing the trees (1 pt)

Now let us describe all these steps in more detail

1. We need to download whole genome sequences and spike protein sequences from the Genbank Entrez databases (“nucleotide” and “protein” databases, respectively), together with some other viruses. We will only look at 6 species:

  • 2019-nCov virus (current coronavirus)
  • SARS – another coronavirus back from 2002
  • bat coronavirus
  • MERS – middle eastern respiratory syndrome coronavirus
  • influenza A –  flu virus, to see how far are coronaviruses from the flu
  • hepatitis A virus – less related virus

You can use the Bio.Entrez interface. An example of how this works can be seen in a jupyter notebook here (please remember to use your e-mail and not mine in your code…). We will need to do this for all 6 species. You should provide a single script that does that for all species, using different query terms for each genome and protein. You will probably need some trial and error work here, but I want to see just the end result – a script that works.

2. Here we will want to run the ClustalW algorithm on the downloaded sequences. You will need to have the clustalw executable installed (it is the package clustalw in ubuntu). Your script should use the Bio.Align.Applications.Clustalw interface. in the result you should get two multiple sequence alignments (for genomes and for spike proteins).

3. Here you should use the two multiple alignments to create distance matrices and from these distance matrices to create phylogenetic trees (both with upgma and nj methods).

4. You should create images of the 4 trees (upgma or nj x protein or genome) using the draw function.

A full solution is a script (in a .py file sent as a real attachment -not some usos attachment, not an ipynb, not a link) together with the images for part 4 (in png format). All of this should be sent to me (bartek[at]mimuw.edu.pl) with the tag [WBO] in the e-mail subject by April 6th. The code should be reasonably easy to read (with comments and the code divided into sensible functions or classes. Not a huge spaghetti of code.)

 

WBO 4 – phylogenetic trees

Today we will hold the lecture remotely via google meet. I will send you the link via the chat server. If you cannot access the chat, please let me know by e-mail.

Polish version below…

Today we will discuss the simple methods for phylogenetic tree reconstruction based on a distance matrix. The slides are in two parts: My part regarding simple progressive heuristic methods: wyk4  and another part on ML methods by P. Górecki : gorecki-ml-tree

During the lab, we will try to build trees from sequences in practice. First, we should get ourselves acquainted with the Bio.Phylo module  tutorial  and wiki.

1. Let us first consider two lists of sequences containing paralogues and orthologues of phenylalanine hydroxylase gene as well as histone H2B paralogues and orthologues. Let us assume, that we have them already aligned (we will cover the multiple alignment process next week). See the files  Human_PAH_orthologues,  Human_PAH_paralogues and  Human_H2BFS_paralogues ,  Human_PAH_orthologues-91. Let  us use the read() function from the Bio.AlignIO module to read these files.

2.Calculate distance matrices for these groups of sequences using the  Bio.Phylo.TreeConstruction.DistanceCalculator  (using  BLOSUM62 substitution matrix, separately for each file).

3. Create the trees using Bio.Phylo.TreeConstruction.DistanceTreeConstructor both for UPGMA and nj (neighbor-joining)

4. look at the resulting trees using  draw_ascii() and draw() methods

5. Write out the resulting trees into newick and phyloxml formats.Compare resulting files.

Wersja polska:

Dziś rozmawiamy o prostych metodach kostrukcji drzew na podstawie macierzy odległości. Slajdy na dziś składają się z mojej prezentacji nt. metod heurystycznych:  wyk4 i slajdów P. Góreckiego nt. metod ML: gorecki-ml-tree

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 listy sekwencji. Rozważmy sekwencje paralogiczne i ortologiczne ludzkiej hydroksylazy fenyloalaniny.  Załóżmy, że mamy już sekwencje aminokwasowe uliniowione globalnie.  Ze względu na czasochłonność procesu uliniowienia, użyjemy plików zuliniowieniami  Human_PAH_orthologues i Human_PAH_paralogues oraz Human_H2BFS_paralogues i (jeśli ktoś liczy lokalnie – uwaga duży) plik Human_PAH_orthologues-91. Wczytaj te pliki przy pomocy metod z modułu Bio.AlignIO

2.Wylicz macierze odległości dla tych grup sekwencji przy pomocy klasy Bio.Phylo.TreeConstruction.DistanceCalculator  (dla macierzy BLOSUM62, osobno dla paralogów i osobno dla ortologów genów PAH – to  zajmie chwilę).

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 3 – Wykresy

Dzisiaj zajmujemy się wykresami. Wykład jest w formie google meet, link umieszczę na naszym chacie https://chat.mimuw.edu.pl/channel/obliczenia-naukowe-bibs . Osoby nie posiadające dostępu do chatu, proszę o informację mailem, spróujemy znaleźć inne rozwiązanie. Laboratorium także będzie w formie zdalnej, pytania można zadawać przez chat.

Slajdy są tutaj ONA3-wykresy

Zadania na dziś:

Continue reading “ONA 3 – Wykresy”