Naszym zadaniem będzie napisanie programu, który będzie przetwarzał strumienie danych genomicznych zapisane w plikach sgr . Są to bardzo proste pliki, które pozwalają opisywać zmienność parametru wzdłuż chromosomów. Każda linijka ma tylko 3 wartości:
chromosom pozycja wartość
Wartości są oddzielane znakiem tabluacji (“\t”), pozycja jest liczbą całkowitą dodatnią, a wartość jest liczbą zmiennoprzecinkową.
Zakładamy, że wartości pomiędzy punktami w pliku są odcinkami prostoliniowymi, co pozwala nam na podstawie pliku sgr, wyliczyć wartości dla wszystkich pozycji chromosomu.
Przykładowe pliki sgr dla dwóch sygnałów i dwóch filtrów są w pliku Zad2
Pliki te mogą być duże – np. większe niż dostępna pamięć, co oznacza, że nie możemy ich wczytać w całości do wektora.
Będziemy chcieli, żeby nasz program oferował następujące funkcje:
– Suma, różnica, iloczyn, iloraz – zwróć wynik operacji arytmetycznej na dwóch sygnałach dla tych samych chromosomów. Zakładamy, że na wejściu mamy dwa pliki, które opisują sygnał wzdłuż tych samych chromosomów, choć niekoniecznie w tych samych pozycjach. OPeracje są wykonywane “po pozycjach”. Zwracamy plik sgr, który opisuje funkcję wynikową (4 pkt)
– wygładzanie – przy pomocy średniej kroczącej o zadanej długości (w parach zasad), zwróć sygnał wygładzony (2 pkt)
– splot – Tym razem na wejściu bierzemy jeden plik sgr z sygnałem (wzdłuż chromosomów) i drugi plik sgr z wartościami funkcji filtra (np. filtr prostokątny, lub Gaussowski), wzdłuż sztucznego chromosomu o nazwie “filtr”. Wynikiem powinien być splot funkcji, czyli przefiltrowany sygnał 6 pkt)
– upraszczanie – dla zadanego pliku sgr wykryj, które punkty są niepotrzebne (tzn po ich usunięciu sygnał nie zmieni się) i zwróć sygnał pozbawiony tych linijek (3 pkt).
Rozwiązanie polega na napisani 7 funkcji, każda z nich powinna działać na 2 plikach (+ parametr szerokość dla wygładzania), wszystko w jednym pliku .py
Rozwiązania podpisane, z dopiskiem [ONA-2018-2] w temacie proszę wysyáć mailem do mnie, do 22. kwietnia 2018.
Czy pojedyńczy chromosom z pliku może zajmować więcej pamięci niż jest dostępne?
Tak.
Czy program ma pobierać parametry (np. nazwy plików) jak przy poprzednim zadaniu zaliczeniowymi?
Nie musi pobierać ich z linii komend, ale funkcje, które Państwo implementują muszą być parametryzowane plikami wejściowymi i wyjściowymi.
Czy pozycje w pliku zawsze są posortowane od najmniejszej do największej?
Czy ostatnia podana pozycja dla danego chromosomu zawsze jest końcową czy czasem trzeba ją wyliczyć?
Pozycje są zawsze posortowane. Możemy założyć, że ostatnia pozycja jest taka sama w różnych plikach dla tego samego chromosomu i jest podana (choć w rzeczywistych plikach tak być nie musi).
Czy możemy założyć to samo dla pierwszej pozycji?
możemy
Czy funkcje upraszczanie i wygładzanie nie powinna operować na jednym pliku?
Tak, słuszna uwaga.
Czy zapis:
chr 1 1
chr1 100 200
chr1 200 300
chr1 300 400
po uproszczeniu powinien wygladać:
chr1 1 1
chr1 100 200
chr1 300 400
Tak.
Czy upraszczanie powinniśmy wykonać na samym początku i kolejne funkcje wywoływać dla plików uproszczonych?
Nie jest to wymagane.
Czy mógłby Pan dać jakiś przykład danych wejściowych i wyniku działania filtra?