Partie 3 : Implémentation multi-échantillons en lecture appariée¶
Traduction assistée par IA - en savoir plus et suggérer des améliorations
Précédemment, vous avez construit un pipeline d'appel de variants par échantillon qui traitait les données de chaque échantillon de manière indépendante. Dans cette partie du cours, nous allons faire passer notre simple workflow au niveau supérieur en le transformant en un puissant outil d'automatisation par lots capable de traiter un nombre arbitraire d'échantillons. Et pendant que nous y sommes, nous allons également le modifier pour qu'il accepte des données en lecture appariée, ce qui est plus courant dans les études récentes.
Comment commencer à partir de cette section
Cette section du cours suppose que vous avez terminé la Partie 1 : Vue d'ensemble de la méthode, la Partie 2 : Implémentation mono-échantillon et que vous disposez d'un pipeline rnaseq.nf fonctionnel avec des fichiers de modules complétés.
Si vous n'avez pas terminé la Partie 2 ou souhaitez repartir de zéro pour cette partie, vous pouvez utiliser la solution de la Partie 2 comme point de départ.
Exécutez ces commandes depuis le répertoire 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 .
Cela vous donne un workflow complet de traitement mono-échantillon. Vous pouvez tester qu'il s'exécute avec succès :
Objectif¶
Dans cette partie du cours, nous allons étendre le workflow pour effectuer les opérations suivantes :
- Lire les informations d'échantillons à partir d'un fichier CSV
- Exécuter le QC, le trimming et l'alignement par échantillon sur tous les échantillons en parallèle
- Agréger tous les rapports QC dans un rapport MultiQC complet
Cela automatise les étapes de la deuxième section de la Partie 1 : Vue d'ensemble de la méthode, où vous avez exécuté ces commandes manuellement dans leurs conteneurs.
Plan de la leçon¶
Nous avons divisé cela en trois étapes :
- Faire accepter au workflow plusieurs échantillons en entrée.
Cela couvre le passage d'un seul chemin de fichier à un fichier CSV d'échantillons, son analyse avec
splitCsv(), et l'exécution de tous les processus existants sur plusieurs échantillons. - Ajouter la génération de rapport QC complet.
Cela introduit l'opérateur
collect()pour agréger les sorties entre échantillons, et ajoute un processus MultiQC pour produire un rapport combiné. - Passer aux données RNAseq en lecture appariée. Cela couvre l'adaptation des processus pour les entrées en lecture appariée (en utilisant des tuples), la création de modules en lecture appariée, et la configuration d'un profil de test séparé.
Cela implémente la méthode décrite dans la Partie 1 : Vue d'ensemble de la méthode (deuxième section couvrant le cas d'usage multi-échantillons) et s'appuie directement sur le workflow produit par la Partie 2.
Astuce
Assurez-vous d'être dans le bon répertoire de travail :
cd /workspaces/training/nf4-science/rnaseq
1. Faire accepter au workflow plusieurs échantillons en entrée¶
Pour exécuter sur plusieurs échantillons, nous devons modifier la façon dont nous gérons l'entrée : au lieu de fournir un seul chemin de fichier, nous allons lire les informations d'échantillons à partir d'un fichier CSV.
Nous fournissons un fichier CSV contenant les identifiants d'échantillons et les chemins de fichiers FASTQ dans le répertoire data/.
Ce fichier CSV inclut une ligne d'en-tête qui nomme les colonnes.
Notez qu'il s'agit toujours de données de lecture simple.
Avertissement
Les chemins de fichiers dans le CSV sont des chemins absolus qui doivent correspondre à votre environnement. Si vous n'exécutez pas cela dans l'environnement de formation que nous fournissons, vous devrez mettre à jour les chemins pour qu'ils correspondent à votre système.
1.1. Changer l'entrée principale pour qu'elle soit un CSV de chemins de fichiers dans le profil de test¶
Tout d'abord, nous devons mettre à jour le profil de test dans nextflow.config pour fournir le chemin du fichier CSV au lieu du chemin FASTQ unique.
Ensuite, nous devrons mettre à jour la création du canal pour lire à partir de ce CSV.
1.2. Mettre à jour la fabrique de canal pour analyser l'entrée CSV¶
Nous devons charger le contenu du fichier dans le canal plutôt que simplement le chemin du fichier lui-même.
Nous pouvons le faire en utilisant le même modèle que nous avons utilisé dans la Partie 2 de Hello Nextflow : appliquer l'opérateur splitCsv() pour analyser le fichier, puis une opération map pour extraire le chemin du fichier FASTQ de chaque ligne.
Une chose qui est nouvelle par rapport à ce que vous avez rencontré dans le cours Hello Nextflow est que ce CSV a une ligne d'en-tête, donc nous ajoutons header: true à l'appel splitCsv().
Cela nous permet de référencer les colonnes par nom dans l'opération map : row.fastq_path extrait le chemin du fichier de la colonne fastq_path de chaque ligne.
La gestion de l'entrée est mise à jour et le workflow est prêt à être testé.
1.3. Exécuter le workflow¶
Le workflow lit maintenant les informations d'échantillons à partir d'un fichier CSV et traite tous les échantillons en parallèle.
Sortie de la commande
Cette fois, chaque étape est exécutée 6 fois, une fois pour chaque échantillon dans le fichier CSV.
C'est tout ce qu'il a fallu pour que le workflow s'exécute sur plusieurs fichiers. Nextflow gère tout le parallélisme pour nous.
À retenir¶
Vous savez comment passer d'une entrée mono-fichier à une entrée multi-échantillons basée sur CSV que Nextflow traite en parallèle.
Et ensuite ?¶
Ajouter une étape d'agrégation de rapport QC qui combine les métriques de tous les échantillons.
2. Agréger les métriques QC de pré-traitement dans un seul rapport MultiQC¶
Tout cela produit beaucoup de rapports QC, et nous ne voulons pas avoir à fouiller dans les rapports individuels. C'est le moment idéal pour ajouter une étape d'agrégation de rapport MultiQC.
Rappelez-vous la commande multiqc de la Partie 1 :
La commande analyse le répertoire courant à la recherche de fichiers de sortie QC reconnus et les agrège dans un seul rapport HTML.
L'URI du conteneur était community.wave.seqera.io/library/pip_multiqc:a3c26f6199d64b7c.
Nous devons configurer un paramètre supplémentaire, préparer les entrées, écrire le processus, le connecter et mettre à jour la gestion des sorties.
2.1. Configurer les entrées¶
Le processus MultiQC a besoin d'un paramètre de nom de rapport et des sorties QC collectées de toutes les étapes précédentes regroupées ensemble.
2.1.1. Ajouter un paramètre report_id¶
Ajoutez un paramètre pour nommer le rapport de sortie.
Ajoutez la valeur par défaut de l'ID de rapport au profil de test :
Ensuite, nous devrons préparer les entrées pour le processus MultiQC.
2.1.2. Collecter et combiner les sorties QC des étapes précédentes¶
Nous devons donner au processus MULTIQC toutes les sorties liées au QC des étapes précédentes regroupées ensemble.
Pour cela, nous utilisons l'opérateur .mix(), qui agrège plusieurs canaux en un seul.
Nous partons de channel.empty() et y mélangeons tous les canaux de sortie que nous voulons combiner.
C'est plus propre que de chaîner .mix() directement sur l'un des canaux de sortie, car cela traite toutes les entrées de manière symétrique.
Dans notre workflow, les sorties liées au QC à agréger sont :
FASTQC.out.zipFASTQC.out.htmlTRIM_GALORE.out.trimming_reportsTRIM_GALORE.out.fastqc_reportsHISAT2_ALIGN.out.log
Nous les mélangeons dans un seul canal, puis utilisons .collect() pour agréger les rapports de tous les échantillons en une seule liste.
Ajoutez ces lignes au corps du workflow après l'appel HISAT2_ALIGN :
L'utilisation de variables intermédiaires rend chaque étape claire : multiqc_files_ch contient tous les fichiers QC individuels mélangés dans un canal, et multiqc_files_list est le paquet collecté prêt à être transmis à MultiQC.
2.2. Écrire le processus d'agrégation QC et l'appeler dans le workflow¶
Comme précédemment, nous devons compléter la définition du processus, importer le module et ajouter l'appel du processus.
2.2.1. Compléter le module pour le processus d'agrégation QC¶
Ouvrez modules/multiqc.nf et examinez le squelette de la définition du processus.
Allez-y et complétez la définition du processus par vous-même en utilisant les informations fournies ci-dessus, puis vérifiez votre travail par rapport à la solution dans l'onglet "Après" ci-dessous.
Ce processus utilise path '*' comme qualificateur d'entrée pour les fichiers QC.
Le joker '*' indique à Nextflow de placer tous les fichiers collectés dans le répertoire de travail sans nécessiter de noms spécifiques.
L'entrée val output_name est une chaîne qui contrôle le nom du fichier de rapport.
La commande multiqc . analyse le répertoire courant (où se trouvent tous les fichiers QC placés) et génère le rapport.
Une fois que vous avez terminé cela, le processus est prêt à être utilisé.
2.2.2. Inclure le module¶
Ajoutez l'instruction d'importation à rnaseq.nf :
Maintenant, ajoutez l'appel du processus au workflow.
2.2.3. Ajouter l'appel du processus¶
Transmettez les fichiers QC collectés et l'ID de rapport au processus MULTIQC :
Le processus MultiQC est maintenant connecté au workflow.
2.3. Mettre à jour la gestion des sorties¶
Nous devons ajouter les sorties MultiQC à la déclaration de publication et configurer où elles vont.
2.3.1. Ajouter des cibles de publication pour les sorties MultiQC¶
Ajoutez les sorties MultiQC à la section publish: :
| rnaseq.nf | |
|---|---|
Ensuite, nous devrons indiquer à Nextflow où placer ces sorties.
2.3.2. Configurer les nouvelles cibles de sortie¶
Ajoutez des entrées pour les cibles MultiQC dans le bloc output {}, en les publiant dans un sous-répertoire multiqc/ :
La configuration de sortie est complète.
2.4. Exécuter le workflow¶
Nous utilisons -resume pour que les étapes de traitement précédentes soient mises en cache et que seule la nouvelle étape MultiQC s'exécute.
Sortie de la commande
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 ✔
Un seul appel à MULTIQC a été ajouté après les appels de processus mis en cache.
Vous pouvez trouver les sorties MultiQC dans le répertoire des résultats.
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
Ce dernier fichier all_single-end.html est le rapport agrégé complet, commodément emballé dans un seul fichier HTML facile à consulter.
À retenir¶
Vous savez comment collecter les sorties de plusieurs canaux, les regrouper avec .mix() et .collect(), et les transmettre à un processus d'agrégation.
Et ensuite ?¶
Adapter le workflow pour gérer des données RNAseq en lecture appariée.
3. Activer le traitement de données RNAseq en lecture appariée¶
Actuellement, notre workflow ne peut gérer que des données RNAseq en lecture simple. Il est de plus en plus courant de voir des données RNAseq en lecture appariée, donc nous voulons pouvoir les gérer.
Rendre le workflow complètement agnostique du type de données nécessiterait d'utiliser des fonctionnalités légèrement plus avancées du langage Nextflow, donc nous n'allons pas le faire ici, mais nous pouvons créer une version de traitement en lecture appariée pour démontrer ce qui doit être adapté.
3.1. Copier le workflow et mettre à jour les entrées¶
Nous commençons par copier le fichier de workflow en lecture simple et le mettre à jour pour les données en lecture appariée.
3.1.1. Copier le fichier de workflow¶
Créez une copie du fichier de workflow à utiliser comme point de départ pour la version en lecture appariée.
Maintenant, mettez à jour les paramètres et la gestion des entrées dans le nouveau fichier.
3.1.2. Ajouter un profil de test en lecture appariée¶
Nous fournissons un deuxième fichier CSV contenant les identifiants d'échantillons et les chemins de fichiers FASTQ appariés dans le répertoire data/.
Ajoutez un profil test_pe à nextflow.config qui pointe vers ce fichier et utilise un ID de rapport en lecture appariée.
Le profil de test pour les données en lecture appariée est prêt.
3.1.3. Mettre à jour la fabrique de canal¶
L'opérateur .map() doit maintenant récupérer les deux chemins de fichiers FASTQ et les retourner sous forme de liste.
La gestion des entrées est configurée pour les données en lecture appariée.
3.2. Adapter le module FASTQC pour les données en lecture appariée¶
Copiez le module pour créer une version en lecture appariée :
L'entrée du processus FASTQC n'a pas besoin de changer — lorsque Nextflow reçoit une liste de deux fichiers, il place les deux et reads se développe en les deux noms de fichiers.
Le seul changement nécessaire est dans le bloc de sortie : puisque nous obtenons maintenant deux rapports FastQC par échantillon, nous passons de modèles basés sur simpleName à des jokers.
Cela généralise le processus d'une manière qui le rend capable de gérer des données RNAseq en lecture simple ou appariée.
Mettez à jour l'importation dans rnaseq_pe.nf pour utiliser la version en lecture appariée :
Le module FASTQC et son importation sont mis à jour pour les données en lecture appariée.
3.3. Adapter le module TRIM_GALORE pour les données en lecture appariée¶
Copiez le module pour créer une version en lecture appariée :
Ce module nécessite des changements plus substantiels :
- L'entrée passe d'un seul chemin à un tuple de deux chemins
- La commande ajoute le drapeau
--pairedet prend les deux fichiers de lecture - La sortie change pour refléter les conventions de nommage en lecture appariée de Trim Galore, produisant des rapports FastQC séparés pour chaque fichier de lecture
| modules/trim_galore_pe.nf | |
|---|---|
Mettez à jour l'importation dans rnaseq_pe.nf :
Le module TRIM_GALORE et son importation sont mis à jour pour les données en lecture appariée.
3.4. Adapter le module HISAT2_ALIGN pour les données en lecture appariée¶
Copiez le module pour créer une version en lecture appariée :
Ce module nécessite des changements similaires :
- L'entrée passe d'un seul chemin à un tuple de deux chemins
- La commande HISAT2 passe de
-U(non apparié) aux arguments de lecture-1et-2(appariés) - Toutes les utilisations de
reads.simpleNamechangent enread1.simpleNamepuisque nous référençons maintenant un membre spécifique de la paire
Mettez à jour l'importation dans rnaseq_pe.nf :
Le module HISAT2_ALIGN et son importation sont mis à jour pour les données en lecture appariée.
3.5. Mettre à jour l'agrégation MultiQC pour les sorties en lecture appariée¶
Le processus TRIM_GALORE en lecture appariée produit maintenant deux canaux de rapports FastQC séparés (fastqc_reports_1 et fastqc_reports_2) au lieu d'un seul.
Mettez à jour le bloc .mix() dans rnaseq_pe.nf pour inclure les deux :
L'agrégation MultiQC inclut maintenant les deux ensembles de rapports FastQC en lecture appariée.
3.6. Mettre à jour la gestion des sorties pour les sorties en lecture appariée¶
La section publish: et le bloc output {} doivent également refléter les deux canaux de rapports FastQC séparés du processus TRIM_GALORE en lecture appariée.
Mettez à jour la section publish: dans rnaseq_pe.nf :
Mettez à jour les entrées correspondantes dans le bloc output {} :
Le workflow en lecture appariée est maintenant entièrement mis à jour et prêt à être exécuté.
3.7. Exécuter le workflow¶
Nous n'utilisons pas -resume car cela ne serait pas mis en cache, et il y a deux fois plus de données à traiter qu'avant, mais cela devrait quand même se terminer en moins d'une minute.
Sortie de la commande
Maintenant nous avons deux versions légèrement divergentes de notre workflow, une pour les données de lecture simple et une pour les données de lecture appariée. L'étape logique suivante serait de faire en sorte que le workflow accepte l'un ou l'autre type de données à la volée, ce qui est hors du cadre de ce cours, mais nous pourrions aborder cela dans une suite.
À retenir¶
Vous savez comment adapter un workflow mono-échantillon pour paralléliser le traitement de plusieurs échantillons, générer un rapport QC complet et adapter le workflow pour utiliser des données de lecture appariée.
Et ensuite ?¶
Félicitez-vous chaleureusement ! Vous avez terminé le cours Nextflow pour RNAseq.
Rendez-vous sur le résumé du cours final pour revoir ce que vous avez appris et découvrir ce qui vient ensuite.