Table des matières

Mise en pratique des méthodes d'analyse de l'expression génique grâce aux données utilisées par le package airway: création des index nécessaires aux outils d'alignement

Introduction

Une fois les index créés, on va vers l'obtention des fichiers de séquence bruts du projet.

Procédure

Téléchargement des fichiers d'annotation

# On assume que l'on se dirige vers /shares/data pour créer
# les répertoires nécessaires
# Ajuster en fonction de votre environnement, évidemment!
% mkdir /shares/data/indexes
# Remarquez que les données d'annotation sont mises dans
# une section distincte de celui des index
% mkdir /shares/data/annotations
% cd /shares/data/annotations
#
# Ici, on utilise une logique sous la forme source/version
# sous /shares/data/annotations
#
% mkdir gencode
# Dernière version en date
# Avril 2026
% mkdir gencode/r49
% cd gencode/r49
# Fichier avec les annotations complètes en format GTF
% curl -L -O https://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_49/gencode.v49.annotation.gtf.gz
# Fichier avec les annotations complètes en format GFF3
% curl -L -O https://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_49/gencode.v49.annotation.gff3.gz
# Fichier FASTA des transcrits pour protéines, utilisé par Salmon
% curl -L -O https://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_49/gencode.v49.pc_transcripts.fa.gz
# Fichier FASTA du genome humain, GRCh38
% curl -L -O https://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_49/GRCh38.primary_assembly.genome.fa.gz
# Decompression des fichiers
% for i in `ls | grep gz`; do gunzip $i; done

Création des index : usage de scripts pour SLURM

Créer les index pour les outils d'alignement est un processus exigeant et le premier exemple où l'utilisation d'une grappe de calcul et d'un système de gestion des tâches qui y réside est un atout. Dans le cas de la création des index, on est confronté à quelques problèmes:

Si on prend pour exemple la grappe de calcul Rorqual, on y trouve des serveurs qui ont tout ce que nous aurons de besoin, il faut simplement leur dire comment faire. En passant, faire cette construction sur une grappe SuperClafoutis n'est pas une option: certaines opérations d'indexation demandent des centaine de Gb de mémoire vive :-( Cependant, une fois les index construits, on peut les télécharger pour utilisation locale car ces fichiers sont indépendants de la plateforme où ils ont été calculés.

Comme ce sont des tâches qui demandent du temps (plusieurs minutes à plusieurs heures), c'est le moment idéal pour apprendre à utiliser SLURM. À la base, SLURM est un système où un usager soumet des actions (interactives ou scriptées) via une application (srun ou sbatch) à une queue de traitement qui gèrera la suite des choses. Une fois la tâche assignée à un noeud de calcul, elle s'exécute indépendamment de votre attention (dans le cas de sbatch).

Création des index pour HISAT2

Création des fichiers intermédiaires

# On crée l'arborescence nécessaire sous /shares/data
% cd /shares/data/indexes
#
# Remarquez que nous reprenons la structure logique
# de l'organisation des fichiers retrouvés sous
# /shares/data/annotations
#
# Construction des index utilisés spécifiquement par HISAT2
% mkdir hisat2
% mkdir hisat2/gencode
% mkdir hisat2/gencode/r49 
% mkdir hisat2/gencode/r49/interim_files
% cd hisat2/gencode/r49/interim_files
#
# Ici, on assume que HISAT2 est sur le $PATH; les scripts devraient se trouver 
# au même niveau que l'application.
# Il faut rediriger la sortie vers un fichier sinon ça sort sur STDOUT...
% hisat2_extract_exons.py /shares/data/annotations/gencode/r49/gencode.v49.annotation.gtf > ./gencode_r49_exons.txt
% hisat2_extract_splice_sites.py /shares/data/annotations/gencode/r49/gencode.v49.annotation.gtf > ./gencode_r49_ss.txt
# Etape facultative: extraction des infos pour les variations génétiques
# Dernière version disponible des données UCSC
% curl -L -O http://hgdownload.soe.ucsc.edu/goldenPath/hg38/database/snp151Common.txt.gz
% gunzip snp151Common.txt.gz
# Ici, le script est un peu plus exigeant... Ça prend plus de temps que les étapes précédentes mais ça se fait sur un RPi.
# A la fin, vous obtiendrez deux fichiers: un avec .haplotype et un autre .snp en suffixe avec gencode_r49_snp_haplo comme préfixe.
% hisat2_extract_snps_haplotypes_UCSC.py /shares/data/annotations/gencode/r49/GRCh38.primary_assembly.genome.fa ./snp151Common.txt gencode_r49_snp_haplo

Création des index eux-mêmes

#!/bin/bash -l
#
##
# Nous sommes sous /shares/data/indexes/hisat2/gencode/r49
# (ou à l'endroit approprié de votre système de fichiers dans 
# une grappe de calcul)
## 
#SBATCH --account=nom_compte
#SBATCH --job-name=hisat2-build_%j
#SBATCH --output=hisat2-build_%j.out
#SBATCH --error=hisat2-build_%j.err
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --mem=256G
#SBATCH --time=02:00:00
#
# On assume que l'application hisat2-build est sur le $PATH
#
# Sur Rorqual, il faut charger l'application; retirez le
# dièse de la prochaine ligne pour que le script fonctionne
#module load hisat2

hisat2-build -p 4 \
--exon ./interim_files/gencode_r49_exons.txt \
--ss ./interim_files/gencode_r49_ss.txt \
/shares/data/annotations/gencode/r49/GRCh38.primary_assembly.genome.fa \
./h_sapiens_gencode_r49_exons_ss
# Sauvegarder votre fichier avec un nom comme hisat2-builder.sh

% sbatch hisat2-builder.sh
# Vous recevrez sur le terminal le numéro de votre tâche.

# Une option:
% squeue | grep nom_usager
# Une autre option avec le numéro de la tâche:
% squeue | grep job_id

Création des index pour STAR

% cd /shares/data/indexes
% mkdir star
% mkdir star/gencode
% mkdir star/gencode/r49
% mkdir star/gencode/r49/h_sapiens_r49_index

% cd /shares/data/indexes/star/gencode/r49
% nano star_index-builder.sh

#!/bin/bash -l
# 
#SBATCH --account=votre_compte
#SBATCH --job-name=star-build_%j
#SBATCH --output=star-build_%j.out
#SBATCH --error=star-build_%j.err
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --mem=64G
#SBATCH --time=04:00:00
#SBATCH --mail-user=votre@adresse.courriel
#SBATCH --mail-type=ALL
#
# On assume que l'application STAR  est sur le $PATH
#
# Sur Rorqual, il faut charger l'application; retirez le
# dièse de la prochaine ligne pour que le script fonctionne :-)
#module load star

STAR \
--runThreadN 4 \
--runMode genomeGenerate \
--genomeDir ./h_sapiens_r49_index \
--genomeFastaFiles /shares/data/annotations_genome/gencode/r49/GRCh38.primary_assembly.genome.fa \
--sjdbGTFfile /shares/data/annotations_genome/gencode/r49/gencode.v49.annotation.gtf \
--sjdbOverhang 99

% sbatch star_index-builder.sh

Création des index pour Salmon

# On crée l'arborescence nécessaire sous /shares/data
% cd /shares/data/indexes
#
# Remarquez que nous reprenons la structure logique
# de l'organisation des fichiers retrouvés sous
# /shares/data/annotations
#
% mkdir salmon
% mkdir salmon/gencode
% mkdir salmon/gencode/r49 
% mkdir salmon/gencode/r49/interim_files
% cd salmon/gencode/r49/interim_files

Création du transcriptome decoy pour créer l'index

% git clone https://github.com/COMBINE-lab/SalmonTools.git
# Le script se trouve dans le répertoire ./SalmonTools/scripts; il faut 
# le rendre executable
% chmod u+x ./SalmonTools/scripts/generateDecoyTranscriptome.sh

# On retourne au niveau supérieur
% cd ..
# On utilise nano pour la composition du script
% nano salmon_decoy-builder.sh

#!/bin/bash -l
#
#SBATCH --account=votre_compte
#SBATCH --job-name=salmon_decoy-builder_%j
#SBATCH --output=salmon_decoy-builder_%j.out
#SBATCH --error=salmon_decoy-builder_%j.err
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=1
#SBATCH --mem=384G
#SBATCH --time=08:00:00
#SBATCH --mail-user=votre@adresse.courriel
#SBATCH --mail-type=ALL
#
# On assume que bedtools et mashmap sont sur le $PATH
# Sinon, dans une. grappe de calcul, retirer 
# le # devant les 2 prochaines lignes
#module load bedtools
#module load mashmap

./SalmonTools/scripts/generateDecoyTranscriptome.sh \
-a /shares/data/annotations_genome/gencode/r49/gencode.v49.annotation.gtf \
-g /shares/data/annotations_genome/gencode/r49/GRCh38.primary_assembly.genome.fa \
-t /shares/data/annotations_genome/gencode/r49/gencode.v49.transcripts.fa \
-o ./interim_files

% sbatch salmon_decoy-builder.sh

Création de l'index pour utiliser Salmon en mode Mapping

#
# On assume que nous sommes localement dans le répertoire
# /shares/data/indexes/salmon/gencode/r49
#
# Ajuster le lien distant en consequence de votre propre 
# environnement 
#
% scp -r mon_compte@grappe_calcul:salmon/gencode/r49/interim_files .

#!/bin/bash -l
#
# Parametres sbatch pour une exécution locale de sbatch sur
# un cluster SuperClafoutis ou une instance locale similaire
#
#SBATCH --job-name=salmon_index-builder_%j
#SBATCH --output=salmon_index-builder_%j.out
#SBATCH --error=salmon_index-builder_%j.err
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --mem=7G
#
# On assume que salmon est sur le $PATH
# Sinon, dans une. grappe de calcul, retirer 
# le # devant la prochaine ligne
#module load salmon

salmon index \
-p 4 \
-t ./interim_files/gentrome.fa \
-i h_sapiens_r49_index \
-k 31
--decoys ./interim_files/decoys.txt