Część 2: Implementacja dla pojedynczej próbki¶
Tłumaczenie wspomagane przez AI - dowiedz się więcej i zasugeruj ulepszenia
W tej części kursu napiszemy workflow, który obejmie wszystkie polecenia uruchomione w Części 1, aby zautomatyzować ich wykonywanie. Będziemy dążyć do przetwarzania jednej próbki na raz.
Wymaganie wstępne
Musisz przejść przez Część 1: Przegląd metody przed rozpoczęciem tej lekcji.
W szczególności, praca przez sekcję 1.2.3 tworzy plik indeksu genomu (data/genome_index.tar.gz) wymagany do kroku dopasowania w tej lekcji.
Zadanie¶
W tej części kursu opracujemy workflow, który wykonuje następujące czynności:
- Uruchamia kontrolę jakości (FastQC) na odczytach wejściowych
- Przycina adaptery i uruchamia kontrolę jakości po przycięciu (Trim Galore)
- Dopasowuje przycięte odczyty do genomu referencyjnego (HISAT2)
To automatyzuje kroki z pierwszej sekcji Części 1: Przegląd metody, gdzie uruchamiałeś te polecenia ręcznie w ich kontenerach.
Jako punkt wyjścia udostępniamy plik workflow'u, rnaseq.nf, który określa główne części workflow'u, oraz cztery pliki modułów w katalogu modules/ (fastqc.nf, trim_galore.nf, hisat2_align.nf i multiqc.nf), które określają strukturę każdego procesu.
Pliki szkieletowe
#!/usr/bin/env nextflow
// Instrukcje INCLUDE modułów
/*
* Parametry pipeline'u
*/
// Główne wejście
workflow {
main:
// Utwórz kanał wejściowy
// Wywołaj procesy
publish:
// Zadeklaruj wyjścia do publikacji
}
output {
// Skonfiguruj cele publikacji
}
#!/usr/bin/env nextflow
/*
* Uruchom FastQC na odczytach wejściowych
*/
process FASTQC {
container
input:
output:
script:
"""
"""
}
#!/usr/bin/env nextflow
/*
* Przytnij adaptery i uruchom kontrolę jakości po przycięciu
*/
process TRIM_GALORE {
container
input:
output:
script:
"""
"""
}
Te pliki nie są funkcjonalne; ich celem jest jedynie służenie jako szkielety, które wypełnisz interesującymi częściami kodu.
Plan lekcji¶
Aby proces rozwoju był bardziej edukacyjny, podzieliliśmy to na trzy etapy:
- Napisanie jednoetapowego workflow'u, który uruchamia początkowy krok kontroli jakości. Obejmuje to konfigurację parametru CLI, utworzenie kanału wejściowego, napisanie modułu procesu i skonfigurowanie publikacji wyjścia.
- Dodanie przycinania adapterów i kontroli jakości po przycięciu. Wprowadza to łączenie procesów poprzez połączenie wyjścia jednego procesu z wejściem drugiego.
- Dodanie dopasowania do genomu referencyjnego. Obejmuje to obsługę dodatkowych wejść referencyjnych i pracę ze skompresowanymi archiwami.
Każdy krok koncentruje się na konkretnym aspekcie rozwoju workflow'u.
Wskazówka
Upewnij się, że jesteś we właściwym katalogu roboczym:
cd /workspaces/training/nf4-science/rnaseq
1. Napisanie jednoetapowego workflow'u, który uruchamia początkową kontrolę jakości¶
Ten pierwszy krok koncentruje się na podstawach: wczytaniu pliku FASTQ i uruchomieniu na nim kontroli jakości.
Przypomnij sobie polecenie fastqc z Części 1:
Polecenie przyjmuje plik FASTQ jako wejście i tworzy raport kontroli jakości jako archiwum .zip oraz podsumowanie .html.
URI kontenera to community.wave.seqera.io/library/trim-galore:0.6.10--1bf8ca4e1967cd18.
Opakujemy te informacje w Nextflow w trzech etapach:
- Konfiguracja wejścia
- Napisanie procesu kontroli jakości i wywołanie go w workflow
- Skonfigurowanie obsługi wyjścia
1.1. Konfiguracja wejścia¶
Musimy zadeklarować parametr wejściowy, utworzyć profil testowy, aby zapewnić wygodną wartość domyślną, i utworzyć kanał wejściowy.
1.1.1. Dodanie deklaracji parametru wejściowego¶
W rnaseq.nf, w sekcji Pipeline parameters, zadeklaruj parametr o nazwie reads z typem Path.
To konfiguruje parametr CLI, ale nie chcemy wpisywać ścieżki pliku za każdym razem, gdy uruchamiamy workflow podczas rozwoju. Istnieje wiele opcji dostarczenia wartości domyślnej; tutaj używamy profilu testowego.
1.1.2. Utworzenie profilu testowego z wartością domyślną w nextflow.config¶
Profil testowy zapewnia wygodne wartości domyślne do wypróbowania workflow'u bez określania wejść w linii poleceń. Jest to powszechna konwencja w ekosystemie Nextflow (zobacz Hello Config po więcej szczegółów).
Dodaj blok profiles do nextflow.config z profilem test, który ustawia parametr reads na jeden z testowych plików FASTQ.
Tutaj używamy ${projectDir}, wbudowanej zmiennej Nextflow, która wskazuje na katalog, w którym znajduje się skrypt workflow'u.
Ułatwia to odwoływanie się do plików danych i innych zasobów bez kodowania bezwzględnych ścieżek.
Parametr ma teraz wygodną wartość domyślną. Następnie musimy utworzyć z niego kanał.
1.1.3. Konfiguracja kanału wejściowego¶
W bloku workflow utwórz kanał wejściowy z wartości parametru, używając fabryki kanałów .fromPath (jak w Hello Channels).
Następnie musimy utworzyć proces do uruchomienia kontroli jakości na tym wejściu.
1.2. Napisanie procesu kontroli jakości i wywołanie go w workflow¶
Musimy wypełnić definicję procesu w pliku modułu, zaimportować go do workflow'u za pomocą instrukcji include i wywołać go na wejściu.
1.2.1. Wypełnienie modułu dla procesu kontroli jakości¶
Otwórz modules/fastqc.nf i przeanalizuj zarys definicji procesu.
Powinieneś rozpoznać główne elementy strukturalne; jeśli nie, rozważ przeczytanie Hello Nextflow dla przypomnienia.
Wypełnij definicję procesu samodzielnie, używając informacji podanych powyżej, a następnie sprawdź swoją pracę z rozwiązaniem w zakładce "Po" poniżej.
Akcesor simpleName usuwa wszystkie rozszerzenia z nazwy pliku, więc ENCSR000COQ1_1.fastq.gz staje się ENCSR000COQ1_1.
Używamy składni emit:, aby przypisać nazwy do każdego kanału wyjściowego, co będzie przydatne do podłączenia wyjść do bloku publish.
Po zakończeniu tego proces jest kompletny. Aby użyć go w workflow, musisz zaimportować moduł i dodać wywołanie procesu.
1.2.2. Dołączenie modułu¶
W rnaseq.nf dodaj instrukcję include, aby udostępnić proces workflow'owi:
Proces jest teraz dostępny w zakresie workflow'u.
1.2.3. Wywołanie procesu kontroli jakości na wejściu¶
Dodaj wywołanie FASTQC w bloku workflow, przekazując kanał wejściowy jako argument.
Workflow teraz wczytuje wejście i uruchamia na nim proces kontroli jakości. Następnie musimy skonfigurować sposób publikacji wyjścia.
1.3. Skonfigurowanie obsługi wyjścia¶
Musimy zadeklarować, które wyjścia procesu publikować i określić, gdzie powinny trafić.
1.3.1. Zadeklarowanie wyjść w sekcji publish:¶
Sekcja publish: wewnątrz bloku workflow deklaruje, które wyjścia procesu powinny być publikowane.
Przypisz wyjścia FASTQC do nazwanych celów.
Następnie musimy powiedzieć Nextflow, gdzie umieścić opublikowane wyjścia.
1.3.2. Skonfigurowanie celów wyjściowych w bloku output {}¶
Blok output {} znajduje się poza workflow i określa, gdzie każdy nazwany cel jest publikowany.
Skonfiguruj oba cele do publikacji w podkatalogu fastqc/.
Uwaga
Domyślnie Nextflow publikuje pliki wyjściowe jako dowiązania symboliczne, co unika niepotrzebnego duplikowania.
Mimo że pliki danych, których tutaj używamy, są bardzo małe, w genomice mogą być bardzo duże.
Dowiązania symboliczne przestaną działać po wyczyszczeniu katalogu work, więc w finalnych workflow'ach możesz chcieć nadpisać domyślny tryb publikacji na 'copy'.
1.4. Uruchomienie workflow'u¶
W tym momencie mamy jednoetapowy workflow kontroli jakości, który powinien być w pełni funkcjonalny.
Uruchamiamy z -profile test, aby użyć wartości domyślnej ustawionej w profilu testowym, unikając konieczności wpisywania ścieżki w linii poleceń.
Wyjście polecenia
Powinno to działać bardzo szybko, jeśli pracowałeś przez Część 1 i już pobrałeś kontener. Jeśli ją pominąłeś, Nextflow pobierze kontener za Ciebie; nie musisz nic robić, aby to się stało, ale możesz potrzebować poczekać do minuty.
Możesz sprawdzić wyjścia w katalogu results.
Raporty kontroli jakości dla próbki są teraz opublikowane w podkatalogu fastqc/.
Podsumowanie¶
Wiesz, jak utworzyć moduł zawierający proces, zaimportować go do workflow'u, wywołać go z kanałem wejściowym i opublikować wyniki za pomocą bloku output na poziomie workflow'u.
Co dalej?¶
Dodaj przycinanie adapterów z kontrolą jakości po przycięciu jako drugi krok w workflow.
2. Dodanie przycinania adapterów i kontroli jakości po przycięciu¶
Teraz, gdy mamy początkową kontrolę jakości, możemy dodać krok przycinania adapterów z wbudowaną kontrolą jakości po przycięciu.
Przypomnij sobie polecenie trim_galore z Części 1:
Polecenie przycina adaptery z pliku FASTQ i uruchamia FastQC na przyciętym wyjściu.
Tworzy przycięte odczyty, raport przycinania i raporty FastQC dla przyciętych odczytów.
URI kontenera to community.wave.seqera.io/library/trim-galore:0.6.10--1bf8ca4e1967cd18.
Musimy tylko napisać definicję procesu, zaimportować go, wywołać w workflow i zaktualizować obsługę wyjścia.
2.1. Napisanie procesu przycinania i wywołanie go w workflow¶
Jak poprzednio, musimy wypełnić definicję procesu, zaimportować moduł i dodać wywołanie procesu.
2.1.1. Wypełnienie modułu dla procesu przycinania¶
Otwórz modules/trim_galore.nf i przeanalizuj zarys definicji procesu.
Wypełnij definicję procesu samodzielnie, używając informacji podanych powyżej, a następnie sprawdź swoją pracę z rozwiązaniem w zakładce "Po" poniżej.
Ten proces ma trzy nazwane wyjścia: przycięte odczyty, które trafiają do kroku dopasowania, raport przycinania i raporty FastQC po przycięciu.
Flaga --fastqc mówi Trim Galore, aby automatycznie uruchomił FastQC na przyciętym wyjściu.
2.1.2. Dołączenie modułu¶
Zaktualizuj rnaseq.nf, aby zaimportować nowy moduł:
Następnie dodamy wywołanie procesu do workflow'u.
2.1.3. Wywołanie procesu przycinania na wejściu¶
Dodaj wywołanie procesu w bloku workflow:
| rnaseq.nf | |
|---|---|
Proces przycinania jest teraz podłączony do workflow'u.
2.2. Aktualizacja obsługi wyjścia¶
Musimy dodać wyjścia przycinania do deklaracji publish i skonfigurować, gdzie mają trafić.
2.2.1. Dodanie celów publikacji dla wyjść przycinania¶
Dodaj wyjścia przycinania do sekcji publish::
Następnie musimy powiedzieć Nextflow, gdzie umieścić te wyjścia.
2.2.2. Skonfigurowanie nowych celów wyjściowych¶
Dodaj wpisy dla celów przycinania w bloku output {}, publikując je w podkatalogu trimming/:
Konfiguracja wyjścia jest kompletna.
2.3. Uruchomienie workflow'u¶
Workflow teraz obejmuje zarówno początkową kontrolę jakości, jak i przycinanie adapterów.
Wyjście polecenia
To również powinno działać bardzo szybko, ponieważ uruchamiamy na tak małym pliku wejściowym.
Możesz znaleźć wyjścia przycinania w katalogu results.
ENCSR000COQ1_1.fastq.gz_trimming_report.txt ENCSR000COQ1_1_trimmed_fastqc.zip
ENCSR000COQ1_1_trimmed_fastqc.html ENCSR000COQ1_1_trimmed.fq.gz
Wyjścia przycinania i raporty kontroli jakości po przycięciu są teraz w podkatalogu trimming/.
Podsumowanie¶
Wiesz, jak dodać drugi krok przetwarzania, który działa niezależnie na tym samym wejściu, tworząc wiele nazwanych wyjść.
Co dalej?¶
Dodaj krok dopasowania, który łączy się z wyjściem przyciętych odczytów.
3. Dodanie dopasowania do genomu referencyjnego¶
Na koniec możemy dodać krok dopasowania genomu przy użyciu HISAT2.
Przypomnij sobie polecenie dopasowania z Części 1:
hisat2 -x <genome_index> -U <reads> \
--new-summary --summary-file <reads>.hisat2.log | \
samtools view -bS -o <reads>.bam
Polecenie dopasowuje odczyty do genomu referencyjnego i konwertuje wyjście do formatu BAM.
Wymaga wstępnie zbudowanego archiwum indeksu genomu i tworzy plik BAM oraz log podsumowania dopasowania.
URI kontenera to community.wave.seqera.io/library/hisat2_samtools:5e49f68a37dc010e.
Ten proces wymaga dodatkowego wejścia (archiwum indeksu genomu), więc musimy najpierw to skonfigurować, a następnie napisać i podłączyć proces.
3.1. Konfiguracja wejść¶
Musimy zadeklarować parametr dla archiwum indeksu genomu.
3.1.1. Dodanie parametru dla indeksu genomu¶
Dodaj deklarację parametru dla archiwum indeksu genomu w rnaseq.nf:
3.1.2. Dodanie wartości domyślnej indeksu genomu do profilu testowego¶
Tak jak zrobiliśmy dla reads w sekcji 1.1.2, dodaj wartość domyślną dla indeksu genomu do profilu testowego w nextflow.config:
Parametr jest gotowy; teraz możemy utworzyć proces dopasowania.
3.2. Napisanie procesu dopasowania i wywołanie go w workflow¶
Jak poprzednio, musimy wypełnić definicję procesu, zaimportować moduł i dodać wywołanie procesu.
3.2.1. Wypełnienie modułu dla procesu dopasowania¶
Otwórz modules/hisat2_align.nf i przeanalizuj zarys definicji procesu.
Wypełnij definicję procesu samodzielnie, używając informacji podanych powyżej, a następnie sprawdź swoją pracę z rozwiązaniem w zakładce "Po" poniżej.
Ten proces przyjmuje dwa wejścia: odczyty i archiwum indeksu genomu.
Blok script najpierw wypakowuje indeks z archiwum, a następnie uruchamia dopasowanie HISAT2 przekierowane do samtools view, aby przekonwertować wyjście do formatu BAM.
Akcesor simpleName na index_zip wyodrębnia nazwę bazową archiwum (genome_index) do użycia jako prefiks indeksu.
3.2.2. Dołączenie modułu¶
Zaktualizuj rnaseq.nf, aby zaimportować nowy moduł:
Następnie dodamy wywołanie procesu do workflow'u.
3.2.3. Wywołanie procesu dopasowania¶
Przycięte odczyty znajdują się w kanale wyjściowym TRIM_GALORE.out.trimmed_reads z poprzedniego kroku.
Używamy file(params.hisat2_index_zip), aby dostarczyć archiwum indeksu genomu.
Proces dopasowania jest teraz podłączony do workflow'u.
3.3. Aktualizacja obsługi wyjścia¶
Musimy dodać wyjścia dopasowania do deklaracji publish i skonfigurować, gdzie mają trafić.
3.3.1. Dodanie celów publikacji dla wyjść dopasowania¶
Dodaj wyjścia dopasowania do sekcji publish::
| rnaseq.nf | |
|---|---|
Następnie musimy powiedzieć Nextflow, gdzie umieścić te wyjścia.
3.3.2. Skonfigurowanie nowych celów wyjściowych¶
Dodaj wpisy dla celów dopasowania w bloku output {}, publikując je w podkatalogu align/:
| rnaseq.nf | |
|---|---|
Konfiguracja wyjścia jest kompletna.
3.4. Uruchomienie workflow'u¶
Workflow teraz obejmuje wszystkie trzy kroki przetwarzania: kontrolę jakości, przycinanie i dopasowanie.
Wyjście polecenia
Możesz znaleźć wyjścia dopasowania w katalogu results.
To kończy podstawowe przetwarzanie, które musimy zastosować do każdej próbki.
Dodamy agregację raportów MultiQC w Części 3, po tym, jak sprawimy, że workflow będzie akceptować wiele próbek naraz.
Podsumowanie¶
Wiesz, jak opakować wszystkie podstawowe kroki do przetwarzania próbek RNAseq single-end indywidualnie.
Co dalej?¶
Zrób sobie przerwę! To było dużo.
Kiedy poczujesz się odświeżony, przejdź do Części 3, gdzie nauczysz się, jak zmodyfikować workflow, aby przetwarzać wiele próbek równolegle, agregować raporty kontroli jakości we wszystkich krokach dla wszystkich próbek i umożliwić uruchamianie workflow'u na danych RNAseq paired-end.