Objectif :
Lancer le même outil (fastqc) sur 3 fichiers fastq différents
Concepts :
Écriture d’un script bash
Déclaration de variables pour généraliser les échantillons et les répertoires de travail
Réalisation d’une boucle pour lancer l’outil sur chaque échantillon
Premier script SLURM
Objectif : lancer le même outil (FastQC) sur 3 échantillons Fastq différents
2422_ebaii_n1_0 4 CPUs, 6 Go RAM
Définition: ce sont des éléments qui associent un nom (l’identifiant) à une valeur, qui sera sauvegardée dans la mémoire du système programmé.
Dans un script_01.sh :
#!/bin/bash
mkdir -p fastqc
module load fastqc/0.11.9
fastqc --outdir fastqc data/FILE1.fastq.gz
fastqc --outdir fastqc data/FILE2.fastq.gz
fastqc --outdir fastqc data/FILE3.fastq.gz
Lancez votre workflow dans le terminal
Si besoin: wget https://zenodo.org/records/10084017/files/script_01.sh
Dans un script_02.sh :
#!/bin/bash
mkdir -p fastqc
module load fastqc/0.11.9
SAMPLE=FILE1
echo ">>> Processing $SAMPLE"
fastqc --outdir fastqc data/${SAMPLE}.fastq.gz
SAMPLE=FILE2
echo ">>> Processing $SAMPLE"
fastqc --outdir fastqc data/${SAMPLE}.fastq.gz
SAMPLE=FILE3
echo ">>> Processing $SAMPLE"
fastqc --outdir fastqc data/${SAMPLE}.fastq.gz
Lancez votre workflow dans le terminal
Si besoin: wget https://zenodo.org/records/10084017/files/script_02.sh
Dans un script_03.sh :
#!/bin/bash
mkdir -p fastqc
module load fastqc/0.11.9
SAMPLE=FILE1
echo ">>> Processing $SAMPLE"
fastqc --outdir fastqc data/${SAMPLE}.fastq.gz 2> fastqc/${SAMPLE}.log
SAMPLE=FILE2
echo ">>> Processing $SAMPLE"
fastqc --outdir fastqc data/${SAMPLE}.fastq.gz 2> fastqc/${SAMPLE}.log
SAMPLE=FILE3
echo ">>> Processing $SAMPLE"
fastqc --outdir fastqc data/${SAMPLE}.fastq.gz 2> fastqc/${SAMPLE}.log
Comment rediriger le message “Analysis complete for FILE1.fastq.gz” ?
Utiliser l’opérateur &> qui permet de rediriger STDIN (la sortie standard) et STDERR (la sortie d’erreur) dans un même fichier
Lancez votre workflow dans le terminal
Si besoin: wget https://zenodo.org/records/10084017/files/script_03.sh
Une boucle permet de réaliser des tâches itératives.
Dans un script_04.sh :
#!/bin/bash
mkdir -p fastqc
module load fastqc/0.11.9
for SAMPLE in FILE1 FILE2 FILE3
do
echo ">>> Processing $SAMPLE"
fastqc --outdir fastqc data/${SAMPLE}.fastq.gz &> fastqc/${SAMPLE}.log
done
Lancez votre workflow dans le terminal
Si besoin: wget https://zenodo.org/records/10084017/files/script_04.sh
Dans un script_05.sh :
#!/bin/bash
mkdir -p fastqc
module load fastqc/0.11.9
for SAMPLE in $(ls --color=none data/ | sed 's/.fastq.gz//')
do
echo ">>> Processing $SAMPLE"
fastqc --outdir fastqc data/${SAMPLE}.fastq.gz &> fastqc/${SAMPLE}.log
done
Lancez votre workflow dans le terminal
Si besoin: wget https://zenodo.org/records/10084017/files/script_05.sh
On commence à décrire un peu plus précisément les ressources nécessaires à notre étape
#!/bin/bash
#SBATCH --account=$USER
#SBATCH --job-name=fastqc_test
#SBATCH --account=2422_ebaii_n1 # Modifier en fonction du projet
#SBATCH --cpus-per-task=1 # Modifier en fonction des besoins
#SBATCH --mem=4GB # Idem
module load …
…
Plein d’autres options utiles: voir intro SLURM et https://ifb-elixirfr.gitlab.io/cluster/doc/quick-start/
Dans un script_06.sh :
#!/bin/bash
#SBATCH --partition=fast
#SBATCH --job-name=my_fastqc
#SBATCH --account=2422_ebaii_n1 # Modifier en fonction du projet
#SBATCH --cpus-per-task=1 # Modifier en fonction des besoins
#SBATCH --mem=4GB # Idem
mkdir -p fastqc
module load fastqc/0.11.9
for SAMPLE in $(ls --color=none data/ | sed 's/.fastq.gz//')
do
echo ">>> Processing $SAMPLE"
srun --job-name $SAMPLE fastqc --outdir fastqc data/${SAMPLE}.fastq.gz
done
Lancez votre workflow dans le terminal
Si besoin: wget https://zenodo.org/records/10084017/files/script_06.sh Cette fois ci, on lance le script avec la commande sbatch et on monitore avec squeue
Au lieu de lancer chaque job l’un après l’autre, de manière séquentielle, on va les lancer en parallèle. On utilise un “job array”.
Dans un script_07.sh :
#!/bin/bash
#SBATCH --partition=fast
#SBATCH --job-name=my_fastqc
#SBATCH --account=2422_ebaii_n1 # Modifier en fonction du projet
#SBATCH --cpus-per-task=1 # Modifier en fonction des besoins
#SBATCH --mem=4GB # Idem
#SBATCH --array=1-3 # Modifier en fonction du nb de tâches à lancer en parallèle
mkdir -p fastqc
module load fastqc/0.11.9
# le Nième fichier de ma liste
SAMPLE=$(ls --color=none data/ | sed 's/.fastq.gz//' | \
head -n ${SLURM_ARRAY_TASK_ID} | tail -n 1)
srun --job-name $SAMPLE fastqc --outdir fastqc data/${SAMPLE}.fastq.gz
Lancez votre workflow dans le terminal
Si besoin: wget https://zenodo.org/records/10084017/files/script_07.sh
Dans un script_08.sh :
#!/bin/bash
#SBATCH --partition=fast
#SBATCH --job-name=my_fastqc
#SBATCH --account=2422_ebaii_n1 # Modifier en fonction du projet
#SBATCH --cpus-per-task=1 # Modifier en fonction des besoins
#SBATCH --mem=4GB # Idem
#SBATCH --array=1-3 # Modifier en fonction du nb de tâches à lancer en parallèle
mkdir -p fastqc
module load fastqc/0.11.9
mkdir -p trimmomatic
module load trimmomatic/0.39
# le Nième fichier de ma liste
SAMPLE=$(ls --color=none data/ | sed 's/.fastq.gz//' | \
head -n ${SLURM_ARRAY_TASK_ID} | tail -n 1)
srun --job-name FASTQC-$SAMPLE fastqc --outdir fastqc data/${SAMPLE}.fastq.gz
srun --job-name TRIM-$SAMPLE trimmomatic SE -threads 4 -phred33 \
data/${SAMPLE}.fastq.gz trimmomatic/${SAMPLE}.fastq.gz \
SLIDINGWINDOW:4:20 MINLEN:20
Lancez votre workflow dans le terminal
Si besoin: wget https://zenodo.org/records/10084017/files/script_08.sh