Part 2: Implementació d'una sola mostra¶
Traducció assistida per IA - més informació i suggeriments
En aquesta part del curs, escriurem el workflow més senzill possible que encapsula totes les comandes que vam executar a la Part 1 per automatitzar-ne l'execució, i processarem només una mostra cada vegada.
Prerequisit
Heu de completar la Part 1: Visió general del mètode abans de començar aquesta lliçó.
Concretament, treballar la secció 1.2.3 crea el fitxer d'índex del genoma (data/genome_index.tar.gz) necessari per al pas d'alineament d'aquesta lliçó.
Assignació¶
En aquesta part del curs, desenvoluparem un workflow que fa el següent:
- Executar control de qualitat (FastQC) sobre les lectures d'entrada
- Retallar adaptadors i executar QC post-retallat (Trim Galore)
- Alinear les lectures retallades a un genoma de referència (HISAT2)
Això automatitza els passos de la primera secció de la Part 1: Visió general del mètode, on vau executar aquestes comandes manualment dins dels seus contenidors.
Com a punt de partida, us proporcionem un fitxer de workflow, rnaseq.nf, que esbossa les parts principals del workflow, així com quatre fitxers de mòdul al directori modules/ (fastqc.nf, trim_galore.nf, hisat2_align.nf i multiqc.nf) que esbossen l'estructura de cada procés.
Fitxers d'estructura
#!/usr/bin/env nextflow
// Module INCLUDE statements
/*
* Pipeline parameters
*/
// Primary input
workflow {
main:
// Create input channel
// Call processes
publish:
// Declare outputs to publish
}
output {
// Configure publish targets
}
#!/usr/bin/env nextflow
/*
* Run FastQC on input reads
*/
process FASTQC {
container
input:
output:
script:
"""
"""
}
#!/usr/bin/env nextflow
/*
* Trim adapters and run post-trimming QC
*/
process TRIM_GALORE {
container
input:
output:
script:
"""
"""
}
Aquests fitxers no són funcionals; el seu propòsit és només servir com a estructures perquè les ompliu amb les parts interessants del codi.
Pla de la lliçó¶
Per tal de fer el procés de desenvolupament més educatiu, ho hem dividit en tres etapes:
- Escriure un workflow d'una sola etapa que executi el pas inicial de QC. Això cobreix la configuració d'un parametre CLI, la creació d'un canal d'entrada, l'escriptura d'un mòdul de procés i la configuració de la publicació de sortides.
- Afegir el retallat d'adaptadors i QC post-retallat. Això introdueix l'encadenament de processos connectant la sortida d'un procés amb l'entrada d'un altre.
- Afegir l'alineament al genoma de referència. Això cobreix la gestió d'entrades de referència addicionals i el treball amb arxius comprimits.
Cada pas se centra en un aspecte específic del desenvolupament de workflows.
Consell
Assegureu-vos que esteu al directori de treball correcte:
cd /workspaces/training/nf4-science/rnaseq
1. Escriure un workflow d'una sola etapa que executi el QC inicial¶
Aquest primer pas se centra en els conceptes bàsics: carregar un fitxer FASTQ i executar-hi control de qualitat.
Recordeu la comanda fastqc de la Part 1:
La comanda pren un fitxer FASTQ com a entrada i produeix un informe de control de qualitat com a arxiu .zip i un resum .html.
L'URI del contenidor era community.wave.seqera.io/library/trim-galore:0.6.10--1bf8ca4e1967cd18.
Prendrem aquesta informació i l'encapsularem en Nextflow en tres etapes:
- Configurar l'entrada
- Escriure el procés de QC i cridar-lo al workflow
- Configurar la gestió de sortides
1.1. Configurar l'entrada¶
Hem de declarar un parametre d'entrada, crear un perfil de prova per proporcionar un valor per defecte convenient, i crear un canal d'entrada.
1.1.1. Afegir una declaració de parametre d'entrada¶
A rnaseq.nf, sota la secció Pipeline parameters, declareu un parametre anomenat reads amb el tipus Path.
Això configura el parametre CLI, però no volem escriure el camí del fitxer cada vegada que executem el workflow durant el desenvolupament. Hi ha múltiples opcions per proporcionar un valor per defecte; aquí utilitzem un perfil de prova.
1.1.2. Crear un perfil de prova amb un valor per defecte a nextflow.config¶
Un perfil de prova proporciona valors per defecte convenients per provar un workflow sense especificar entrades a la línia de comandes. Aquesta és una convenció comuna a l'ecosistema Nextflow (consulteu Hello Config per a més detalls).
Afegiu un bloc profiles a nextflow.config amb un perfil test que estableixi el parametre reads a un dels fitxers FASTQ de prova.
Aquí, estem utilitzant ${projectDir}, una variable integrada de Nextflow que apunta al directori on es troba l'script del workflow.
Això facilita la referència a fitxers de dades i altres recursos sense codificar camins absoluts.
El parametre ara té un valor per defecte convenient. A continuació, hem de crear un canal a partir d'ell.
1.1.3. Configurar el canal d'entrada¶
Al bloc workflow, creeu un canal d'entrada a partir del valor del parametre utilitzant la factoria de canals .fromPath (com s'utilitza a Hello Channels).
A continuació, haurem de crear el procés per executar QC sobre aquesta entrada.
1.2. Escriure el procés de QC i cridar-lo al workflow¶
Hem d'omplir la definició del procés al fitxer de mòdul, importar-lo al workflow utilitzant una declaració include, i cridar-lo sobre l'entrada.
1.2.1. Omplir el mòdul per al procés de QC¶
Obriu modules/fastqc.nf i examineu l'esquema de la definició del procés.
Hauríeu de reconèixer els elements estructurals principals; si no, considereu llegir Hello Nextflow per refrescar-vos.
Aneu endavant i ompliu la definició del procés per vosaltres mateixos utilitzant la informació proporcionada anteriorment, després comproveu el vostre treball amb la solució a la pestanya "Després" a continuació.
L'accessor simpleName elimina totes les extensions del nom del fitxer, així que ENCSR000COQ1_1.fastq.gz es converteix en ENCSR000COQ1_1.
Utilitzem la sintaxi emit: per assignar noms a cada canal de sortida, cosa que serà útil per connectar sortides al bloc publish.
Un cop hàgiu completat això, el procés està complet. Per utilitzar-lo al workflow, haureu d'importar el mòdul i afegir una crida al procés.
1.2.2. Incloure el mòdul¶
A rnaseq.nf, afegiu una declaració include per fer el procés disponible al workflow:
El procés ara està disponible a l'àmbit del workflow.
1.2.3. Cridar el procés de QC sobre l'entrada¶
Afegiu una crida a FASTQC al bloc workflow, passant el canal d'entrada com a argument.
El workflow ara carrega l'entrada i executa el procés de QC sobre ella. A continuació, hem de configurar com es publica la sortida.
1.3. Configurar la gestió de sortides¶
Hem de declarar quines sortides de procés publicar i especificar on han d'anar.
1.3.1. Declarar sortides a la secció publish:¶
La secció publish: dins del bloc workflow declara quines sortides de procés s'han de publicar.
Assigneu les sortides de FASTQC a objectius amb nom.
A continuació, haurem de dir a Nextflow on posar les sortides publicades.
1.3.2. Configurar els objectius de sortida al bloc output {}¶
El bloc output {} es troba fora del workflow i especifica on es publica cada objectiu amb nom.
Configureu ambdós objectius per publicar-se en un subdirectori fastqc/.
Nota
Per defecte, Nextflow publica fitxers de sortida com a enllaços simbòlics, cosa que evita duplicacions innecessàries.
Tot i que els fitxers de dades que estem utilitzant aquí són molt petits, en genòmica poden arribar a ser molt grans.
Els enllaços simbòlics es trenquen quan netegeu el vostre directori work, així que per a workflows de producció potser voldreu sobreescriure el mode de publicació per defecte a 'copy'.
1.4. Executar el workflow¶
En aquest punt, tenim un workflow de QC d'un sol pas que hauria de ser completament funcional.
Executem amb -profile test per utilitzar el valor per defecte configurat al perfil de prova, evitant la necessitat d'escriure el camí a la línia de comandes.
Sortida de la comanda
Això hauria d'executar-se molt ràpidament si heu treballat la Part 1 i ja heu descarregat el contenidor. Si l'heu omès, Nextflow descarregarà el contenidor per vosaltres; no heu de fer res perquè passi, però potser haureu d'esperar fins a un minut.
Podeu comprovar les sortides al directori de resultats.
Els informes de QC per a la mostra ara estan publicats al subdirectori fastqc/.
Conclusió¶
Sabeu com crear un mòdul que conté un procés, importar-lo a un workflow, cridar-lo amb un canal d'entrada i publicar els resultats utilitzant el bloc output a nivell de workflow.
Què segueix?¶
Afegir el retallat d'adaptadors amb QC post-retallat com a segon pas al workflow.
2. Afegir retallat d'adaptadors i QC post-retallat¶
Ara que tenim el QC inicial en funcionament, podem afegir el pas de retallat d'adaptadors amb el seu QC post-retallat integrat.
Recordeu la comanda trim_galore de la Part 1:
La comanda retalla adaptadors d'un fitxer FASTQ i executa FastQC sobre la sortida retallada.
Produeix lectures retallades, un informe de retallat i informes FastQC per a les lectures retallades.
L'URI del contenidor era community.wave.seqera.io/library/trim-galore:0.6.10--1bf8ca4e1967cd18.
Només hem d'escriure la definició del procés, importar-lo, cridar-lo al workflow i actualitzar la gestió de sortides.
2.1. Escriure el procés de retallat i cridar-lo al workflow¶
Com abans, hem d'omplir la definició del procés, importar el mòdul i afegir la crida al procés.
2.1.1. Omplir el mòdul per al procés de retallat¶
Obriu modules/trim_galore.nf i examineu l'esquema de la definició del procés.
Aneu endavant i ompliu la definició del procés per vosaltres mateixos utilitzant la informació proporcionada anteriorment, després comproveu el vostre treball amb la solució a la pestanya "Després" a continuació.
Aquest procés té tres sortides amb nom: les lectures retallades que alimenten el pas d'alineament, l'informe de retallat i els informes FastQC post-retallat.
La bandera --fastqc indica a Trim Galore que executi automàticament FastQC sobre la sortida retallada.
2.1.2. Incloure el mòdul¶
Actualitzeu rnaseq.nf per importar el nou mòdul:
A continuació, afegirem la crida al procés al workflow.
2.1.3. Cridar el procés de retallat sobre l'entrada¶
Afegiu la crida al procés al bloc workflow:
| rnaseq.nf | |
|---|---|
El procés de retallat ara està connectat al workflow.
2.2. Actualitzar la gestió de sortides¶
Hem d'afegir les sortides de retallat a la declaració publish i configurar on van.
2.2.1. Afegir objectius publish per a les sortides de retallat¶
Afegiu les sortides de retallat a la secció publish::
A continuació, haurem de dir a Nextflow on posar aquestes sortides.
2.2.2. Configurar els nous objectius de sortida¶
Afegiu entrades per als objectius de retallat al bloc output {}, publicant-los en un subdirectori trimming/:
La configuració de sortida està completa.
2.3. Executar el workflow¶
El workflow ara inclou tant el QC inicial com el retallat d'adaptadors.
Sortida de la comanda
Això també hauria d'executar-se molt ràpidament, ja que estem executant sobre un fitxer d'entrada tan petit.
Podeu trobar les sortides de retallat al directori de resultats.
ENCSR000COQ1_1.fastq.gz_trimming_report.txt ENCSR000COQ1_1_trimmed_fastqc.zip
ENCSR000COQ1_1_trimmed_fastqc.html ENCSR000COQ1_1_trimmed.fq.gz
Les sortides de retallat i els informes de QC post-retallat ara estan al subdirectori trimming/.
Conclusió¶
Sabeu com afegir un segon pas de processament que s'executa independentment sobre la mateixa entrada, produint múltiples sortides amb nom.
Què segueix?¶
Afegir el pas d'alineament que s'encadena a partir de la sortida de lectures retallades.
3. Afegir alineament al genoma de referència¶
Finalment podem afegir el pas d'alineament del genoma utilitzant HISAT2.
Recordeu la comanda d'alineament de la Part 1:
hisat2 -x <genome_index> -U <reads> \
--new-summary --summary-file <reads>.hisat2.log | \
samtools view -bS -o <reads>.bam
La comanda alinea lectures a un genoma de referència i converteix la sortida a format BAM.
Requereix un arxiu d'índex del genoma preconstruït i produeix un fitxer BAM i un registre de resum d'alineament.
L'URI del contenidor era community.wave.seqera.io/library/hisat2_samtools:5e49f68a37dc010e.
Aquest procés requereix una entrada addicional (l'arxiu d'índex del genoma), així que primer hem de configurar-ho, després escriure i connectar el procés.
3.1. Configurar les entrades¶
Hem de declarar un parametre per a l'arxiu d'índex del genoma.
3.1.1. Afegir un parametre per a l'índex del genoma¶
Afegiu una declaració de parametre per a l'arxiu d'índex del genoma a rnaseq.nf:
3.1.2. Afegir el valor per defecte de l'índex del genoma al perfil de prova¶
Tal com vam fer per a reads a la secció 1.1.2, afegiu un valor per defecte per a l'índex del genoma al perfil de prova a nextflow.config:
El parametre està llest; ara podem crear el procés d'alineament.
3.2. Escriure el procés d'alineament i cridar-lo al workflow¶
Com abans, hem d'omplir la definició del procés, importar el mòdul i afegir la crida al procés.
3.2.1. Omplir el mòdul per al procés d'alineament¶
Obriu modules/hisat2_align.nf i examineu l'esquema de la definició del procés.
Aneu endavant i ompliu la definició del procés per vosaltres mateixos utilitzant la informació proporcionada anteriorment, després comproveu el vostre treball amb la solució a la pestanya "Després" a continuació.
Aquest procés pren dues entrades: les lectures i l'arxiu d'índex del genoma.
El bloc script primer extreu l'índex de l'arxiu, després executa l'alineament HISAT2 canalitzat a samtools view per convertir la sortida a format BAM.
L'accessor simpleName sobre index_zip extreu el nom base de l'arxiu (genome_index) per utilitzar-lo com a prefix de l'índex.
3.2.2. Incloure el mòdul¶
Actualitzeu rnaseq.nf per importar el nou mòdul:
A continuació, afegirem la crida al procés al workflow.
3.2.3. Cridar el procés d'alineament¶
Les lectures retallades estan al canal TRIM_GALORE.out.trimmed_reads produït pel pas anterior.
Utilitzem file(params.hisat2_index_zip) per proporcionar l'arxiu d'índex del genoma.
El procés d'alineament ara està connectat al workflow.
3.3. Actualitzar la gestió de sortides¶
Hem d'afegir les sortides d'alineament a la declaració publish i configurar on van.
3.3.1. Afegir objectius publish per a les sortides d'alineament¶
Afegiu les sortides d'alineament a la secció publish::
| rnaseq.nf | |
|---|---|
A continuació, haurem de dir a Nextflow on posar aquestes sortides.
3.3.2. Configurar els nous objectius de sortida¶
Afegiu entrades per als objectius d'alineament al bloc output {}, publicant-los en un subdirectori align/:
| rnaseq.nf | |
|---|---|
La configuració de sortida està completa.
3.4. Executar el workflow¶
El workflow ara inclou els tres passos de processament: QC, retallat i alineament.
Sortida de la comanda
Podeu trobar les sortides d'alineament al directori de resultats.
Això completa el processament bàsic que hem d'aplicar a cada mostra.
Afegirem l'agregació d'informes MultiQC a la Part 3, després d'haver fet que el workflow accepti múltiples mostres alhora.
Conclusió¶
Sabeu com encapsular tots els passos bàsics per processar mostres RNAseq d'extrem únic individualment.
Què segueix?¶
Feu una pausa! Ha estat molt.
Quan us sentiu refrescats, aneu a la Part 3, on aprendreu com modificar el workflow per processar múltiples mostres en paral·lel, agregar informes de QC a través de tots els passos per a totes les mostres, i habilitar l'execució del workflow sobre dades RNAseq d'extrem aparellat.