Parte 2: Implementazione per singolo campione¶
Traduzione assistita da IA - scopri di più e suggerisci miglioramenti
In questa parte del corso, scriveremo il workflow più semplice possibile che racchiude tutti i comandi eseguiti nella Parte 1 per automatizzarne l'esecuzione, e ci limiteremo a processare un campione alla volta.
Prerequisito
È necessario completare la Parte 1: Panoramica del metodo prima di iniziare questa lezione.
Nello specifico, il completamento della sezione 1.2.3 crea il file di indice del genoma (data/genome_index.tar.gz) richiesto per il passaggio di allineamento in questa lezione.
Obiettivo¶
In questa parte del corso, svilupperemo un workflow che esegue le seguenti operazioni:
- Eseguire il controllo di qualità (FastQC) sulle letture di input
- Trimmare gli adapter ed eseguire il QC post-trimming (Trim Galore)
- Allineare le letture trimmate a un genoma di riferimento (HISAT2)
Questo automatizza i passaggi della prima sezione della Parte 1: Panoramica del metodo, dove avete eseguito questi comandi manualmente nei loro container.
Come punto di partenza, vi forniamo un file di workflow, rnaseq.nf, che delinea le parti principali del workflow, insieme a quattro file modulo nella directory modules/ (fastqc.nf, trim_galore.nf, hisat2_align.nf e multiqc.nf) che delineano la struttura di ciascun processo.
File di base
#!/usr/bin/env nextflow
// Istruzioni INCLUDE dei moduli
/*
* Parametri della pipeline
*/
// Input primario
workflow {
main:
// Crea canale di input
// Chiama i processi
publish:
// Dichiara gli output da pubblicare
}
output {
// Configura i target di pubblicazione
}
#!/usr/bin/env nextflow
/*
* Esegue FastQC sulle letture di input
*/
process FASTQC {
container
input:
output:
script:
"""
"""
}
#!/usr/bin/env nextflow
/*
* Trimma gli adapter ed esegue il QC post-trimming
*/
process TRIM_GALORE {
container
input:
output:
script:
"""
"""
}
Questi file non sono funzionali; il loro scopo è solo quello di servire come scheletri da riempire con le parti interessanti del codice.
Piano della lezione¶
Per rendere il processo di sviluppo più educativo, abbiamo suddiviso questo in tre fasi:
- Scrivere un workflow a singolo stadio che esegue il passaggio iniziale di QC. Questo copre la configurazione di un parametro CLI, la creazione di un canale di input, la scrittura di un modulo di processo e la configurazione della pubblicazione degli output.
- Aggiungere il trimming degli adapter e il QC post-trimming. Questo introduce il concatenamento dei processi collegando l'output di un processo all'input di un altro.
- Aggiungere l'allineamento al genoma di riferimento. Questo copre la gestione di input di riferimento aggiuntivi e il lavoro con archivi compressi.
Ogni passaggio si concentra su un aspetto specifico dello sviluppo del workflow.
Suggerimento
Assicuratevi di essere nella directory di lavoro corretta:
cd /workspaces/training/nf4-science/rnaseq
1. Scrivere un workflow a singolo stadio che esegue il QC iniziale¶
Questo primo passaggio si concentra sulle basi: caricare un file FASTQ ed eseguire il controllo di qualità su di esso.
Ricordate il comando fastqc dalla Parte 1:
Il comando prende un file FASTQ come input e produce un report di controllo qualità come archivio .zip e un riepilogo .html.
L'URI del container era community.wave.seqera.io/library/trim-galore:0.6.10--1bf8ca4e1967cd18.
Prenderemo queste informazioni e le racchiuderemo in Nextflow in tre fasi:
- Configurare l'input
- Scrivere il processo QC e chiamarlo nel workflow
- Configurare la gestione dell'output
1.1. Configurare l'input¶
Dobbiamo dichiarare un parametro di input, creare un profilo di test per fornire un valore predefinito conveniente e creare un canale di input.
1.1.1. Aggiungere una dichiarazione di parametro di input¶
In rnaseq.nf, sotto la sezione Pipeline parameters, dichiarate un parametro chiamato reads con il tipo Path.
Questo configura il parametro CLI, ma non vogliamo digitare il percorso del file ogni volta che eseguiamo il workflow durante lo sviluppo. Ci sono diverse opzioni per fornire un valore predefinito; qui usiamo un profilo di test.
1.1.2. Creare un profilo di test con un valore predefinito in nextflow.config¶
Un profilo di test fornisce valori predefiniti convenienti per provare un workflow senza specificare input dalla riga di comando. Questa è una convenzione comune nell'ecosistema Nextflow (vedere Hello Config per maggiori dettagli).
Aggiungete un blocco profiles a nextflow.config con un profilo test che imposta il parametro reads su uno dei file FASTQ di test.
Qui stiamo usando ${projectDir}, una variabile integrata di Nextflow che punta alla directory dove si trova lo script del workflow.
Questo rende facile fare riferimento a file di dati e altre risorse senza codificare percorsi assoluti.
Il parametro ora ha un valore predefinito conveniente. Successivamente, dobbiamo creare un canale da esso.
1.1.3. Configurare il canale di input¶
Nel blocco workflow, create un canale di input dal valore del parametro usando la fabbrica di canali .fromPath (come usato in Hello Channels).
Successivamente, dovremo creare il processo per eseguire il QC su questo input.
1.2. Scrivere il processo QC e chiamarlo nel workflow¶
Dobbiamo riempire la definizione del processo nel file modulo, importarlo nel workflow usando un'istruzione include e chiamarlo sull'input.
1.2.1. Riempire il modulo per il processo QC¶
Aprite modules/fastqc.nf ed esaminate la struttura della definizione del processo.
Dovreste riconoscere gli elementi strutturali principali; in caso contrario, considerate di leggere Hello Nextflow per un ripasso.
Procedete e riempite la definizione del processo da soli usando le informazioni fornite sopra, quindi verificate il vostro lavoro confrontandolo con la soluzione nella scheda "Dopo" qui sotto.
L'accessor simpleName rimuove tutte le estensioni dal nome del file, quindi ENCSR000COQ1_1.fastq.gz diventa ENCSR000COQ1_1.
Usiamo la sintassi emit: per assegnare nomi a ciascun canale di output, che sarà utile per collegare gli output nel blocco publish.
Una volta completato questo, il processo è completo. Per usarlo nel workflow, dovrete importare il modulo e aggiungere una chiamata al processo.
1.2.2. Includere il modulo¶
In rnaseq.nf, aggiungete un'istruzione include per rendere il processo disponibile al workflow:
Il processo è ora disponibile nello scope del workflow.
1.2.3. Chiamare il processo QC sull'input¶
Aggiungete una chiamata a FASTQC nel blocco workflow, passando il canale di input come argomento.
Il workflow ora carica l'input ed esegue il processo QC su di esso. Successivamente, dobbiamo configurare come viene pubblicato l'output.
1.3. Configurare la gestione dell'output¶
Dobbiamo dichiarare quali output del processo pubblicare e specificare dove devono andare.
1.3.1. Dichiarare gli output nella sezione publish:¶
La sezione publish: all'interno del blocco workflow dichiara quali output del processo devono essere pubblicati.
Assegnate gli output di FASTQC a target nominati.
Successivamente, dovremo dire a Nextflow dove mettere gli output pubblicati.
1.3.2. Configurare i target di output nel blocco output {}¶
Il blocco output {} si trova all'esterno del workflow e specifica dove viene pubblicato ciascun target nominato.
Configurate entrambi i target per pubblicare in una sottodirectory fastqc/.
Nota
Per impostazione predefinita, Nextflow pubblica i file di output come link simbolici, il che evita duplicazioni non necessarie.
Anche se i file di dati che stiamo usando qui sono molto piccoli, in genomica possono diventare molto grandi.
I link simbolici si romperanno quando pulite la vostra directory work, quindi per i workflow di produzione potreste voler sovrascrivere la modalità di pubblicazione predefinita con 'copy'.
1.4. Eseguire il workflow¶
A questo punto, abbiamo un workflow QC a un passaggio che dovrebbe essere completamente funzionale.
Eseguiamo con -profile test per usare il valore predefinito configurato nel profilo di test, evitando la necessità di scrivere il percorso sulla riga di comando.
Output del comando
Questo dovrebbe essere eseguito molto rapidamente se avete completato la Parte 1 e avete già scaricato il container. Se l'avete saltata, Nextflow scaricherà il container per voi; non dovete fare nulla perché accada, ma potreste dover attendere fino a un minuto.
Potete verificare gli output nella directory results.
I report QC per il campione sono ora pubblicati nella sottodirectory fastqc/.
Takeaway¶
Sapete come creare un modulo contenente un processo, importarlo in un workflow, chiamarlo con un canale di input e pubblicare i risultati usando il blocco output a livello di workflow.
Cosa c'è dopo?¶
Aggiungete il trimming degli adapter con QC post-trimming come secondo passaggio nel workflow.
2. Aggiungere il trimming degli adapter e il QC post-trimming¶
Ora che abbiamo il QC iniziale in atto, possiamo aggiungere il passaggio di trimming degli adapter con il suo QC post-trimming integrato.
Ricordate il comando trim_galore dalla Parte 1:
Il comando trimma gli adapter da un file FASTQ ed esegue FastQC sull'output trimmato.
Produce letture trimmate, un report di trimming e report FastQC per le letture trimmate.
L'URI del container era community.wave.seqera.io/library/trim-galore:0.6.10--1bf8ca4e1967cd18.
Dobbiamo solo scrivere la definizione del processo, importarlo, chiamarlo nel workflow e aggiornare la gestione dell'output.
2.1. Scrivere il processo di trimming e chiamarlo nel workflow¶
Come prima, dobbiamo riempire la definizione del processo, importare il modulo e aggiungere la chiamata al processo.
2.1.1. Riempire il modulo per il processo di trimming¶
Aprite modules/trim_galore.nf ed esaminate la struttura della definizione del processo.
Procedete e riempite la definizione del processo da soli usando le informazioni fornite sopra, quindi verificate il vostro lavoro confrontandolo con la soluzione nella scheda "Dopo" qui sotto.
Questo processo ha tre output nominati: le letture trimmate che alimentano il passaggio di allineamento, il report di trimming e i report FastQC post-trimming.
Il flag --fastqc dice a Trim Galore di eseguire automaticamente FastQC sull'output trimmato.
2.1.2. Includere il modulo¶
Aggiornate rnaseq.nf per importare il nuovo modulo:
Successivamente, aggiungeremo la chiamata al processo nel workflow.
2.1.3. Chiamare il processo di trimming sull'input¶
Aggiungete la chiamata al processo nel blocco workflow:
| rnaseq.nf | |
|---|---|
Il processo di trimming è ora collegato al workflow.
2.2. Aggiornare la gestione dell'output¶
Dobbiamo aggiungere gli output di trimming alla dichiarazione publish e configurare dove vanno.
2.2.1. Aggiungere target di pubblicazione per gli output di trimming¶
Aggiungete gli output di trimming alla sezione publish::
Successivamente, dovremo dire a Nextflow dove mettere questi output.
2.2.2. Configurare i nuovi target di output¶
Aggiungete voci per i target di trimming nel blocco output {}, pubblicandoli in una sottodirectory trimming/:
La configurazione dell'output è completa.
2.3. Eseguire il workflow¶
Il workflow ora include sia il QC iniziale che il trimming degli adapter.
Output del comando
Anche questo dovrebbe essere eseguito molto rapidamente, dato che stiamo lavorando su un file di input così piccolo.
Potete trovare gli output di trimming nella directory results.
ENCSR000COQ1_1.fastq.gz_trimming_report.txt ENCSR000COQ1_1_trimmed_fastqc.zip
ENCSR000COQ1_1_trimmed_fastqc.html ENCSR000COQ1_1_trimmed.fq.gz
Gli output di trimming e i report QC post-trimming sono ora nella sottodirectory trimming/.
Takeaway¶
Sapete come aggiungere un secondo passaggio di elaborazione che viene eseguito indipendentemente sullo stesso input, producendo più output nominati.
Cosa c'è dopo?¶
Aggiungete il passaggio di allineamento che si concatena dall'output delle letture trimmate.
3. Aggiungere l'allineamento al genoma di riferimento¶
Infine possiamo aggiungere il passaggio di allineamento del genoma usando HISAT2.
Ricordate il comando di allineamento dalla Parte 1:
hisat2 -x <genome_index> -U <reads> \
--new-summary --summary-file <reads>.hisat2.log | \
samtools view -bS -o <reads>.bam
Il comando allinea le letture a un genoma di riferimento e converte l'output in formato BAM.
Richiede un archivio di indice del genoma pre-costruito e produce un file BAM e un log di riepilogo dell'allineamento.
L'URI del container era community.wave.seqera.io/library/hisat2_samtools:5e49f68a37dc010e.
Questo processo richiede un input aggiuntivo (l'archivio dell'indice del genoma), quindi dobbiamo configurarlo prima, poi scrivere e collegare il processo.
3.1. Configurare gli input¶
Dobbiamo dichiarare un parametro per l'archivio dell'indice del genoma.
3.1.1. Aggiungere un parametro per l'indice del genoma¶
Aggiungete una dichiarazione di parametro per l'archivio dell'indice del genoma in rnaseq.nf:
3.1.2. Aggiungere il valore predefinito dell'indice del genoma al profilo di test¶
Proprio come abbiamo fatto per reads nella sezione 1.1.2, aggiungete un valore predefinito per l'indice del genoma al profilo di test in nextflow.config:
Il parametro è pronto; ora possiamo creare il processo di allineamento.
3.2. Scrivere il processo di allineamento e chiamarlo nel workflow¶
Come prima, dobbiamo riempire la definizione del processo, importare il modulo e aggiungere la chiamata al processo.
3.2.1. Riempire il modulo per il processo di allineamento¶
Aprite modules/hisat2_align.nf ed esaminate la struttura della definizione del processo.
Procedete e riempite la definizione del processo da soli usando le informazioni fornite sopra, quindi verificate il vostro lavoro confrontandolo con la soluzione nella scheda "Dopo" qui sotto.
Questo processo prende due input: le letture e l'archivio dell'indice del genoma.
Il blocco script prima estrae l'indice dall'archivio, poi esegue l'allineamento HISAT2 inviato tramite pipe a samtools view per convertire l'output in formato BAM.
L'accessor simpleName su index_zip estrae il nome base dell'archivio (genome_index) da usare come prefisso dell'indice.
3.2.2. Includere il modulo¶
Aggiornate rnaseq.nf per importare il nuovo modulo:
Successivamente, aggiungeremo la chiamata al processo nel workflow.
3.2.3. Chiamare il processo di allineamento¶
Le letture trimmate si trovano nel canale TRIM_GALORE.out.trimmed_reads prodotto dal passaggio precedente.
Usiamo file(params.hisat2_index_zip) per fornire l'archivio dell'indice del genoma.
Il processo di allineamento è ora collegato al workflow.
3.3. Aggiornare la gestione dell'output¶
Dobbiamo aggiungere gli output di allineamento alla dichiarazione publish e configurare dove vanno.
3.3.1. Aggiungere target di pubblicazione per gli output di allineamento¶
Aggiungete gli output di allineamento alla sezione publish::
| rnaseq.nf | |
|---|---|
Successivamente, dovremo dire a Nextflow dove mettere questi output.
3.3.2. Configurare i nuovi target di output¶
Aggiungete voci per i target di allineamento nel blocco output {}, pubblicandoli in una sottodirectory align/:
| rnaseq.nf | |
|---|---|
La configurazione dell'output è completa.
3.4. Eseguire il workflow¶
Il workflow ora include tutti e tre i passaggi di elaborazione: QC, trimming e allineamento.
Output del comando
Potete trovare gli output di allineamento nella directory results.
Questo completa l'elaborazione di base che dobbiamo applicare a ciascun campione.
Aggiungeremo l'aggregazione dei report MultiQC nella Parte 3, dopo aver modificato il workflow per accettare più campioni contemporaneamente.
Takeaway¶
Sapete come racchiudere tutti i passaggi principali per processare campioni RNAseq single-end individualmente.
Cosa c'è dopo?¶
Prendetevi una pausa! È stato molto.
Quando vi sentite riposati, passate alla Parte 3, dove imparerete come modificare il workflow per processare più campioni in parallelo, aggregare i report QC attraverso tutti i passaggi per tutti i campioni e abilitare l'esecuzione del workflow su dati RNAseq paired-end.