Workflow¶
Définition¶
Qu'est ce qu'un workflow/pipeline ?
- Enchaînement d'étapes individuelles
- Ecriture sous forme d'un script en bash
Qu'est ce qu'un script en bash ?
- Commence par un "sha-bang" (#!) qui indique l'interpréteur du script (#!/bin/bash)
- Les lignes commençant par un "#" sont des commentaires et ne sont pas interprétées
- Créer des variables pour généraliser votre script (qu'il ne soit pas spécifique à 1 échantillon)
Workflow de détection de small-variants¶
Exercice - Présentation¶
Objectif :¶
Lancer le même outil (fastQC) sur 6 échantillons fastQ différents
Nécessite :¶
- Ecriture d'un script bash en suivant les bonnes pratiques
- Déclaration de variables pour généraliser les échantillons et les répertoires
- Réalisation d'une boucle pour lancer l'outil sur chaque échantillon
Avant de commencer :¶
- Rendez-vous dans le dossier atelier_variant/TP_small_variants de votre espace projet.
- Créez y un dossier "workflow"
- Listez le contenu du dossier fastq
- Créez un fichier vide "fastqc.sh"
# Rendez-vous dans votre espace projet, sous dossier atelier_variant, sous dossier TP_small_variants
cd ../TP_small_variants
# Créez le dossier workflow
mkdir -p workflow
# Listez le contenu de votre dossier fastq
ls fastq
SRR1205973_extract_R1.fq.gz SRR1205992_extract_R2.fq.gz SRR1205973_extract_R2.fq.gz SRR1262731_extract_R1.fq.gz SRR1205992_extract_R1.fq.gz SRR1262731_extract_R2.fq.gz
# Créez un fichier vide nommé fastqc.sh
touch workflow/fastqc.sh
N.B. : L'extension de fichier "sh" est utile à l'oeil humain pour savoir que ce fichier est un script en bash.
Exercice - Partie 1 : Ecrire les lignes de commandes¶
Ouvrez votre script et écrivez les commandes permettant d'exécuter fastqc sur les fichiers SRR1262731_extract_R1.fq.gz et SRR1262731_extract_R2.fq.gz
Rappel : Les bonnes pratiques veulent que l'ensemble de votre code soit commenté.
Aide numéro 1 :
- Bien commencer par le sha-bang
Aide numéro 2 :
- Créer un dossier pour mettre les résultats nommé fastqc_res
Aide numéro 3 :
- Faire un module load fastqc en version 0.11.9
Aide numéro 4 :
- Lancer la commande sur l'échantillon en R1
Aide numéro 5 :
- Comme le point 4 mais en R2
Correction :
Il faut écrire le texte suivant dans le script :
#!/bin/bash
# Création du dossier de résultat
mkdir -p fastqc_res
# Chargement de l'outil dans sa bonne version
module load fastqc/0.11.9
# Lancement de l'outil sur l'échantillon SRR1262731, fichier R1
fastqc --outdir fastqc_res fastq/SRR1262731_extract_R1.fq.gz
# Lancement de l'outil sur l'échantillon SRR1262731, fichier R2
fastqc --outdir fastqc_res fastq/SRR1262731_extract_R2.fq.gz
Vous pouvez tester votre code avec la commande suivante :
bash workflow/fastqc.sh
Utilisation de variable¶
Une variable permet d'anonymiser un script.
PRENOM="Maria"
"PRENOM" est le nom de la variable et "Maria" sa valeur.
On peut ensuite utiliser cette variable dans une ligne de commande.
# La commande echo permet d'afficher à l'écran les arguments qui sont donnés
echo PRENOM
echo "--------"
echo ${PRENOM}
PRENOM -------- Maria
Bash impose l'utilisation du symbole "$" pour déclarer que nous affichons la valeur de la variable "PRENOM" et non simplement le mot "PRENOM".
Les "{}" autour du nom de la variable quand à eux font partis des bonnes pratiques et vous éviterons bien des déconvenus.
Exercice - Partie 2 : Anonymisation à l'aide des variables¶
Remplacez dans le script :
- Le nom du dossier qui contient les fichiers fastq : La variable se nommera DATA_DIR et sa valeur sera le nom du fichier contenant les fastq.
- Les noms des fichiers fastq : Les variables R1 et R2 correspondront aux noms des fichiers fastq R1 et R2.
Aide numéro 1 :
- Définissez vos variables en amont de leur utilisation
Aide numéro 2 :
- Il est possible d'appeler une variable dans une autre variable
Aide numéro 3 :
- Une fois les variables définies, pensez à les appeler avec les symboles "${}"
Aide numéro 4 :
Vous devriez obtenir deux lignes pour lancer votre fastQC :
fastqc --outdir fastqc_res ${R1} fastqc --outdir fastqc_res ${R2}
Correction :
Il faut écrire le texte suivant dans le script :
#!/bin/bash
# Création du dossier de résultat
mkdir -p fastqc_res
# Stockage du nom du dossier dans la variable DATA_DIR
DATA_DIR="fastq"
# Définition de la variable avec le fichier R1
R1=${DATA_DIR}"/SRR1262731_extract_R1.fq.gz"
# Définition de la variable avec le fichier R2
R2=${DATA_DIR}"/SRR1262731_extract_R2.fq.gz"
# Chargement de l'outil dans sa bonne version
module load fastqc/0.11.9
# Lancement de l'outil sur l'échantillon de la variable R1
fastqc --outdir fastqc_res ${R1}
# Lancement de l'outil sur l'échantillon de la variable R2
fastqc --outdir fastqc_res ${R2}
.
.
.
On teste le nouveau code :
bash workflow/fastqc.sh
Utilisation d'une boucle¶
Votre script est fonctionnel pour un échantillon.
Il est possible d'itérer sur plusieurs valeurs.
Les boucles permettent qu'une variable prennent successivement les différentes valeurs contenues dans une liste
for PRENOM in Nadia Gabriele Vivien Pauline
do
echo "hello" ${PRENOM}
done
hello Nadia hello Gabriele hello Vivien hello Pauline
La liste des valeurs que prend la variable PRENOM peut être explicitée ou correspondre à un ensemble.
Exercice - Partie 3 : Automatisation sur plusieurs valeurs¶
A partir de la liste des fichiers R1 et R2 du dossier ${DATA_DIR}, créez deux boucles (une pour les fichiers R1 et une pour les fichiers R2) pour lancer la ligne de commande fastQC sur tous les fichiers du dossier "fastq".
Aide numéro 1 :
- L'objectif sera de faire varier la valeur de ${R1}
Aide numéro 2 :
- N'oubliez pas la variable DATA_DIR
Correction :
Il faut écrire le texte suivant dans le script :
#!/bin/bash
# Création du dossier de résultat
mkdir -p fastqc_res
# Stockage du nom du dossier dans la variable DATA_DIR
DATA_DIR="fastq"
# Chargement de l'outil dans sa bonne version
module load fastqc/0.11.9
# Définition des deux boucles for
# Pour chaque fichier finissant par "_R1.fq.gz" contenu dans le dossier ${DATA_DIR}
for R1 in ${DATA_DIR}/*_R1.fq.gz do # Lancement de la commande fastqc fastqc --outdir fastqc_res ${R1} done
# Pour chaque fichier finissant par "_R2.fq.gz" contenu dans le dossier ${DATA_DIR}
for R2 in ${DATA_DIR}/*_R2.fq.gz do # Lancement de la commande fastqc fastqc --outdir fastqc_res ${R2} done
for fileR1 in fastq/*R1.*
do
fileR2=${fileR1/_R1/_R2}
echo ${fileR1} ${fileR2}
done
fastq/SRR1205973_extract_R1.fq.gz fastq/SRR1205973_extract_R2.fq.gz fastq/SRR1205992_extract_R1.fq.gz fastq/SRR1205992_extract_R2.fq.gz fastq/SRR1262731_extract_R1.fq.gz fastq/SRR1262731_extract_R2.fq.gz