Part 3: Implementació multi-mostra amb dades paired-end¶
Traducció assistida per IA - més informació i suggeriments
Anteriorment, heu construït un pipeline de detecció de variants per mostra que processava les dades de cada mostra de manera independent. En aquesta part del curs, portarem el nostre workflow senzill al següent nivell convertint-lo en una potent eina d'automatització per lots capaç de gestionar un nombre arbitrari de mostres. I mentre hi som, també l'actualitzarem perquè esperi dades paired-end, que són més comunes en estudis recents.
Com començar des d'aquesta secció
Aquesta secció del curs assumeix que heu completat la Part 1: Visió general del mètode, la Part 2: Implementació d'una sola mostra i teniu un pipeline rnaseq.nf funcional amb els fitxers de mòdul completats.
Si no heu completat la Part 2 o voleu començar de nou per a aquesta part, podeu utilitzar la solució de la Part 2 com a punt de partida.
Executeu aquestes comandes des de dins del directori nf4-science/rnaseq/:
cp solutions/part2/rnaseq-2.nf rnaseq.nf
cp solutions/part2/modules/fastqc.nf modules/
cp solutions/part2/modules/trim_galore.nf modules/
cp solutions/part2/modules/hisat2_align.nf modules/
cp solutions/part2/nextflow.config .
Això us proporciona un workflow complet de processament d'una sola mostra. Podeu comprovar que s'executa correctament:
Assignació¶
En aquesta part del curs, ampliarem el workflow per fer el següent:
- Llegir informació de mostres des d'un full de càlcul CSV
- Executar QC per mostra, retallat i alineament en totes les mostres en paral·lel
- Agregar tots els informes de QC en un informe MultiQC complet
Això automatitza els passos de la segona secció de la Part 1: Visió general del mètode, on vau executar aquestes comandes manualment en els seus contenidors.
Pla de la lliçó¶
Ho hem dividit en tres etapes:
- Fer que el workflow accepti múltiples mostres d'entrada.
Això cobreix el canvi d'un sol camí de fitxer a un full de càlcul CSV, analitzar-lo amb
splitCsv()i executar tots els processos existents en múltiples mostres. - Afegir generació d'informes de QC complets.
Això introdueix l'operador
collect()per agregar sortides entre mostres, i afegeix un procés MultiQC per produir un informe combinat. - Canviar a dades RNAseq paired-end. Això cobreix l'adaptació de processos per a entrades paired-end (utilitzant tuples), la creació de mòduls paired-end i la configuració d'un perfil de prova separat.
Això implementa el mètode descrit a la Part 1: Visió general del mètode (segona secció que cobreix el cas d'ús multi-mostra) i es basa directament en el workflow produït per la Part 2.
Consell
Assegureu-vos que esteu al directori de treball correcte:
cd /workspaces/training/nf4-science/rnaseq
1. Fer que el workflow accepti múltiples mostres d'entrada¶
Per executar-se en múltiples mostres, hem de canviar com gestionem l'entrada: en lloc de proporcionar un sol camí de fitxer, llegirem la informació de les mostres des d'un fitxer CSV.
Proporcionem un fitxer CSV que conté IDs de mostra i camins de fitxers FASTQ al directori data/.
Aquest fitxer CSV inclou una línia de capçalera que anomena les columnes.
Tingueu en compte que aquestes són encara dades de lectura single-end.
Advertència
Els camins de fitxer al CSV són camins absoluts que han de coincidir amb el vostre entorn. Si no esteu executant això a l'entorn de formació que proporcionem, haureu d'actualitzar els camins perquè coincideixin amb el vostre sistema.
1.1. Canviar l'entrada primària a un CSV de camins de fitxer al perfil de prova¶
Primer, hem d'actualitzar el perfil de prova a nextflow.config per proporcionar el camí del fitxer CSV en lloc del camí FASTQ únic.
A continuació, haurem d'actualitzar la creació del canal per llegir des d'aquest CSV.
1.2. Actualitzar la factory del canal per analitzar l'entrada CSV¶
Hem de carregar els continguts del fitxer al canal en lloc de només el camí del fitxer.
Podem fer-ho utilitzant el mateix patró que vam utilitzar a la Part 2 de Hello Nextflow: aplicant l'operador splitCsv() per analitzar el fitxer, després una operació map per extreure el camí del fitxer FASTQ de cada fila.
Una cosa que és nova en comparació amb el que vau trobar al curs Hello Nextflow és que aquest CSV té una línia de capçalera, així que afegim header: true a la crida splitCsv().
Això ens permet referenciar columnes per nom a l'operació map: row.fastq_path extreu el camí del fitxer de la columna fastq_path de cada fila.
La gestió d'entrada està actualitzada i el workflow està llest per provar.
1.3. Executar el workflow¶
El workflow ara llegeix informació de mostres des d'un fitxer CSV i processa totes les mostres en paral·lel.
Sortida de la comanda
Aquesta vegada cada pas s'executa 6 vegades, una per cada mostra al fitxer CSV.
Això és tot el que va fer falta per aconseguir que el workflow s'executés en múltiples fitxers. Nextflow gestiona tot el paral·lelisme per nosaltres.
Conclusió¶
Sabeu com canviar d'una entrada d'un sol fitxer a una entrada multi-mostra basada en CSV que Nextflow processa en paral·lel.
Què segueix?¶
Afegir un pas d'agregació d'informes de QC que combini mètriques de totes les mostres.
2. Agregar mètriques de QC de preprocessament en un sol informe MultiQC¶
Tot això produeix molts informes de QC, i no volem haver de buscar entre informes individuals. Aquest és el punt perfecte per posar un pas d'agregació d'informes MultiQC.
Recordeu la comanda multiqc de la Part 1:
La comanda escaneja el directori actual per trobar fitxers de sortida de QC reconeguts i els agrega en un sol informe HTML.
L'URI del contenidor era community.wave.seqera.io/library/pip_multiqc:a3c26f6199d64b7c.
Hem de configurar un paràmetre addicional, preparar les entrades, escriure el procés, connectar-lo i actualitzar la gestió de sortides.
2.1. Configurar les entrades¶
El procés MultiQC necessita un paràmetre de nom d'informe i les sortides de QC recollides de tots els passos anteriors agrupades.
2.1.1. Afegir un paràmetre report_id¶
Afegiu un paràmetre per anomenar l'informe de sortida.
Afegiu el valor per defecte de l'ID de l'informe al perfil de prova:
A continuació, haurem de preparar les entrades per al procés MultiQC.
2.1.2. Recollir i combinar sortides de QC dels passos anteriors¶
Hem de donar al procés MULTIQC totes les sortides relacionades amb QC dels passos anteriors agrupades.
Per això, utilitzem l'operador .mix(), que agrega múltiples canals en un de sol.
Comencem des de channel.empty() i barregem tots els canals de sortida que volem combinar.
Això és més net que encadenar .mix() directament a un dels canals de sortida, perquè tracta totes les entrades simètricament.
Al nostre workflow, les sortides relacionades amb QC a agregar són:
FASTQC.out.zipFASTQC.out.htmlTRIM_GALORE.out.trimming_reportsTRIM_GALORE.out.fastqc_reportsHISAT2_ALIGN.out.log
Les barregem en un sol canal, després utilitzem .collect() per agregar els informes de totes les mostres en una sola llista.
Afegiu aquestes línies al cos del workflow després de la crida HISAT2_ALIGN:
L'ús de variables intermèdies fa que cada pas sigui clar: multiqc_files_ch conté tots els fitxers de QC individuals barrejats en un canal, i multiqc_files_list és el paquet recollit llest per passar a MultiQC.
2.2. Escriure el procés d'agregació de QC 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.2.1. Omplir el mòdul per al procés d'agregació de QC¶
Obriu modules/multiqc.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 contra la solució a la pestanya "Després" a continuació.
Aquest procés utilitza path '*' com a qualificador d'entrada per als fitxers de QC.
El comodí '*' indica a Nextflow que prepari tots els fitxers recollits al directori de treball sense requerir noms específics.
L'entrada val output_name és una cadena que controla el nom del fitxer de l'informe.
La comanda multiqc . escaneja el directori actual (on estan tots els fitxers de QC preparats) i genera l'informe.
Un cop hàgiu completat això, el procés està llest per utilitzar.
2.2.2. Incloure el mòdul¶
Afegiu la declaració d'importació a rnaseq.nf:
Ara afegiu la crida al procés al workflow.
2.2.3. Afegir la crida al procés¶
Passeu els fitxers de QC recollits i l'ID de l'informe al procés MULTIQC:
El procés MultiQC ara està connectat al workflow.
2.3. Actualitzar la gestió de sortides¶
Hem d'afegir les sortides de MultiQC a la declaració de publicació i configurar on van.
2.3.1. Afegir objectius de publicació per a les sortides de MultiQC¶
Afegiu les sortides de MultiQC a la secció publish::
| rnaseq.nf | |
|---|---|
A continuació, haurem de dir a Nextflow on posar aquestes sortides.
2.3.2. Configurar els nous objectius de sortida¶
Afegiu entrades per als objectius de MultiQC al bloc output {}, publicant-los en un subdirectori multiqc/:
La configuració de sortida està completa.
2.4. Executar el workflow¶
Utilitzem -resume perquè els passos de processament anteriors estiguin en memòria cau i només s'executi el nou pas MultiQC.
Sortida de la comanda
N E X T F L O W ~ version 24.10.0
Launching `rnaseq.nf` [modest_pare] DSL2 - revision: fc724d3b49
executor > local (1)
[07/3ff9c5] FASTQC (6) [100%] 6 of 6, cached: 6 ✔
[2c/8d8e1e] TRIM_GALORE (5) [100%] 6 of 6, cached: 6 ✔
[a4/7f9c44] HISAT2_ALIGN (6) [100%] 6 of 6, cached: 6 ✔
[56/e1f102] MULTIQC [100%] 1 of 1 ✔
S'ha afegit una sola crida a MULTIQC després de les crides de procés en memòria cau.
Podeu trobar les sortides de MultiQC al directori de resultats.
results/multiqc
├── all_single-end_data
│ ├── cutadapt_filtered_reads_plot.txt
│ ├── cutadapt_trimmed_sequences_plot_3_Counts.txt
│ ├── cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt
│ ├── fastqc_adapter_content_plot.txt
│ ├── fastqc_overrepresented_sequences_plot.txt
│ ├── fastqc_per_base_n_content_plot.txt
│ ├── fastqc_per_base_sequence_quality_plot.txt
│ ├── fastqc_per_sequence_gc_content_plot_Counts.txt
│ ├── fastqc_per_sequence_gc_content_plot_Percentages.txt
│ ├── fastqc_per_sequence_quality_scores_plot.txt
│ ├── fastqc_sequence_counts_plot.txt
│ ├── fastqc_sequence_duplication_levels_plot.txt
│ ├── fastqc_sequence_length_distribution_plot.txt
│ ├── fastqc-status-check-heatmap.txt
│ ├── fastqc_top_overrepresented_sequences_table.txt
│ ├── hisat2_se_plot.txt
│ ├── multiqc_citations.txt
│ ├── multiqc_cutadapt.txt
│ ├── multiqc_data.json
│ ├── multiqc_fastqc.txt
│ ├── multiqc_general_stats.txt
│ ├── multiqc_hisat2.txt
│ ├── multiqc.log
│ ├── multiqc_software_versions.txt
│ └── multiqc_sources.txt
└── all_single-end.html
Aquest últim fitxer all_single-end.html és l'informe agregat complet, convenientment empaquetat en un fitxer HTML fàcil de navegar.
Conclusió¶
Sabeu com recollir sortides de múltiples canals, agrupar-les amb .mix() i .collect(), i passar-les a un procés d'agregació.
Què segueix?¶
Adaptar el workflow per gestionar dades RNAseq paired-end.
3. Habilitar el processament de dades RNAseq paired-end¶
Ara mateix el nostre workflow només pot gestionar dades RNAseq single-end. És cada vegada més comú veure dades RNAseq paired-end, així que volem poder gestionar-ho.
Fer que el workflow sigui completament agnòstic del tipus de dades requeriria utilitzar característiques del llenguatge Nextflow lleugerament més avançades, així que no ho farem aquí, però podem fer una versió de processament paired-end per demostrar què cal adaptar.
3.1. Copiar el workflow i actualitzar les entrades¶
Comencem copiant el fitxer del workflow single-end i actualitzant-lo per a dades paired-end.
3.1.1. Copiar el fitxer del workflow¶
Creeu una còpia del fitxer del workflow per utilitzar com a punt de partida per a la versió paired-end.
Ara actualitzeu els paràmetres i la gestió d'entrada al nou fitxer.
3.1.2. Afegir un perfil de prova paired-end¶
Proporcionem un segon fitxer CSV que conté IDs de mostra i camins de fitxers FASTQ emparellats al directori data/.
Afegiu un perfil test_pe a nextflow.config que apunti a aquest fitxer i utilitzi un ID d'informe paired-end.
El perfil de prova per a dades paired-end està llest.
3.1.3. Actualitzar la factory del canal¶
L'operador .map() necessita agafar ambdós camins de fitxer FASTQ i retornar-los com una llista.
La gestió d'entrada està configurada per a dades paired-end.
3.2. Adaptar el mòdul FASTQC per a dades paired-end¶
Copieu el mòdul per crear una versió paired-end:
L'entrada del procés FASTQC no necessita canviar — quan Nextflow rep una llista de dos fitxers, prepara ambdós i reads s'expandeix a ambdós noms de fitxer.
L'únic canvi necessari és al bloc de sortida: com ara obtenim dos informes FastQC per mostra, canviem de patrons basats en simpleName a comodins.
Això generalitza el procés d'una manera que el fa capaç de gestionar dades single-end o paired-end.
Actualitzeu la importació a rnaseq_pe.nf per utilitzar la versió paired-end:
El mòdul FASTQC i la seva importació estan actualitzats per a dades paired-end.
3.3. Adaptar el mòdul TRIM_GALORE per a dades paired-end¶
Copieu el mòdul per crear una versió paired-end:
Aquest mòdul necessita canvis més substancials:
- L'entrada canvia d'un sol camí a una tupla de dos camins
- La comanda afegeix la bandera
--pairedi pren ambdós fitxers de lectura - La sortida canvia per reflectir les convencions de nomenclatura paired-end de Trim Galore, produint informes FastQC separats per a cada fitxer de lectura
| modules/trim_galore_pe.nf | |
|---|---|
Actualitzeu la importació a rnaseq_pe.nf:
El mòdul TRIM_GALORE i la seva importació estan actualitzats per a dades paired-end.
3.4. Adaptar el mòdul HISAT2_ALIGN per a dades paired-end¶
Copieu el mòdul per crear una versió paired-end:
Aquest mòdul necessita canvis similars:
- L'entrada canvia d'un sol camí a una tupla de dos camins
- La comanda HISAT2 canvia de
-U(no emparellat) a arguments de lectura-1i-2(emparellats) - Tots els usos de
reads.simpleNamecanvien aread1.simpleNameja que ara referenciem un membre específic de la parella
Actualitzeu la importació a rnaseq_pe.nf:
El mòdul HISAT2_ALIGN i la seva importació estan actualitzats per a dades paired-end.
3.5. Actualitzar l'agregació MultiQC per a sortides paired-end¶
El procés TRIM_GALORE paired-end ara produeix dos canals d'informes FastQC separats (fastqc_reports_1 i fastqc_reports_2) en lloc d'un.
Actualitzeu el bloc .mix() a rnaseq_pe.nf per incloure ambdós:
L'agregació MultiQC ara inclou ambdós conjunts d'informes FastQC paired-end.
3.6. Actualitzar la gestió de sortides per a sortides paired-end¶
La secció publish: i el bloc output {} també necessiten reflectir els dos canals d'informes FastQC separats del procés TRIM_GALORE paired-end.
Actualitzeu la secció publish: a rnaseq_pe.nf:
Actualitzeu les entrades corresponents al bloc output {}:
El workflow paired-end ara està completament actualitzat i llest per executar.
3.7. Executar el workflow¶
No utilitzem -resume ja que això no es guardaria en memòria cau, i hi ha el doble de dades a processar que abans, però encara hauria de completar-se en menys d'un minut.
Sortida de la comanda
Ara tenim dues versions lleugerament divergents del nostre workflow, una per a dades de lectura single-end i una per a dades paired-end. El següent pas lògic seria fer que el workflow accepti qualsevol tipus de dades sobre la marxa, que està fora de l'abast d'aquest curs, però podem abordar-ho en un seguiment.
Conclusió¶
Sabeu com adaptar un workflow d'una sola mostra per paral·lelitzar el processament de múltiples mostres, generar un informe de QC complet i adaptar el workflow per utilitzar dades de lectura paired-end.
Què segueix?¶
Doneu-vos una gran palmadeta a l'esquena! Heu completat el curs Nextflow per a RNAseq.
Aneu al resum final del curs per revisar el que heu après i descobrir què ve després.