4. Analyser les donnĂ©es RNA-seq đ»#
Dans cette partie, nous allons analyser manuellement, étape par étape, les données RNA-seq de S. cerevisiae.
4.1. VĂ©rifier lâenvironnement logiciel#
Si cela nâest pas dĂ©jĂ fait, chargez les outils nĂ©cessaires Ă lâanalyse des donnĂ©es RNA-seq :
$ module load sra-tools/2.11.0 fastqc/0.11.9 star/2.7.10b htseq/0.13.5 cufflinks/2.2.1 samtools/1.15.1
4.2. Vérifier les données#
Déplacez-vous ensuite dans le répertoire : /shared/projects/2501_duo/$USER/rnaseq
.
Vous devriez obtenir lâarborescence suivante :
$ tree
âââ genome
â âââ genes.gtf
â âââ genome.fa
âââ reads
â âââ SRR3405801.fastq.gz
â âââ SRR3405802.fastq.gz
â âââ SRR3405804.fastq.gz
[...]
4.3. ContrÎler la qualité des reads#
Créez le répertoire reads_qc
qui va contenir les fichiers produits par le contrÎle qualité des fichiers fastq.gz :
$ mkdir -p reads_qc
Lancez FastQC avec la commande :
$ fastqc reads/SRR3405801.fastq.gz --outdir reads_qc
FastQC va produire deux fichiers (un fichier avec lâextension .html
et un autre avec lâextension .zip
) dans le répertoire reads_qc
. Si par exemple, vous avez analysé le fichier reads/SRR3405801.fastq.gz
, vous obtiendrez les fichiers reads_qc/SRR3405801_fastqc.html
et reads_qc/SRR3405801_fastqc.zip
.
Depuis lâexplorateur de fichiers de JupyterLab, dĂ©placez-vous dans le rĂ©pertoire reads_qc
, puis double-cliquez sur le fichier .html
ainsi créé. Le rapport dâanalyse créé par FastQC va alors sâouvrir dans un nouvel onglet de JupyterLab.
4.4. Indexer le génome de référence#
Lâindexation du gĂ©nome de rĂ©fĂ©rence est une Ă©tape indispensable pour accĂ©lĂ©rer lâalignement des reads sur le gĂ©nome. Elle consiste Ă crĂ©er une sorte « dâannuaire » du gĂ©nome de rĂ©fĂ©rence.
Dans un terminal, créez le répertoire genome_index
qui contiendra les index du génome de référence :
$ mkdir -p genome_index
Lancez lâindexation du gĂ©nome de rĂ©fĂ©rence :
$ STAR --runMode genomeGenerate \
--genomeDir genome_index \
--genomeFastaFiles genome/genome.fa \
--sjdbGTFfile genome/genes.gtf \
--sjdbOverhang 50 \
--genomeSAindexNbases 10
Hint
En Bash, le symbole \
Ă la fin dâune ligne permet de poursuivre lâinstruction sur la ligne suivante. Cela rend la commande plus lisible.
Pensez Ă copier la commande entiĂšre (sans le $
au début) puis à la coller dans le terminal.
Lâaide de STAR pour lâoption --sjdbOverhang
indique :
sjdbOverhang 100
int>0: length of the donor/acceptor sequence on each side of the junctions, ideally = (mate_length - 1)
Cela signifie que cette option doit ĂȘtre Ă©gale Ă la longueur maximale des reads - 1. Le fichier S1 Supporting Information Methods mentionne :
S. cerevisiae total mRNA was prepared in libraries of stranded 50 base-pair single-end reads and multiplexed at 10 time point samples per sequencing lane.
Les reads obtenus devraient donc a priori ĂȘtre constituĂ© de 50 bases. On peut le vĂ©rifier en affichant les premiĂšres lignes dâun fichier .fastq.gz, par exemple reads/SRR3405801.fastq.gz
:
$ zcat reads/SRR3405801.fastq.gz | head
@SRR3405801.1 3NH4HQ1:254:C5A48ACXX:3:1101:1115:2179/1
CTTGGGTCTTTTGAGAACCACGTAGTAAACCGGTTCTTCTGGCAGCAATCA
+
CCCFFFBDHHHHHIIIIJIIJJJJIIGIJJJJI@HIIIJJJJJJJJIJJJG
@SRR3405801.2 3NH4HQ1:254:C5A48ACXX:3:1101:1349:2220/1
CCCCTTGCTTCTTCTCCTTGTGTCCGACTAATGGTGGGTCTCGTAGCTGCT
+
@;?DDDDFHHFHFDHHIIIIIGHHHGBHGGGGIICFGA8BDHGHHGEGHB@
@SRR3405801.3 3NH4HQ1:254:C5A48ACXX:3:1101:1529:2186/1
GTTTAGTTTTGTCTTGGACAAACTCAGGTAAGAGAGGATATTTTATGGCAG
En réalité, les reads ont une longueur de 51 bases et non pas 50 comme supposé.
Le paramĂštre --sjdbOverhang
vaut donc 50 (51 - 1).
Hint
La commande zcat
est particuliĂšre car elle affiche le contenu dâun fichier compressĂ© (ici un fichier .gz) en le dĂ©compressant Ă la volĂ©e. La commande cat
(sans le z
) nâaurait pas permis une telle manipulation.
Vérifiez également que la longueur des reads est bien de 51 bases en consultant les résultats du contrÎle qualité fournis par FastQC (premiÚre page, Basic Statistics).
Enfin, le paramĂštre --genomeSAindexNbases 10
est conseillé par STAR. Si on utilise STAR sans ce paramÚtre, on obtient le message :
!!!!! WARNING: âgenomeSAindexNbases 14 is too large for the genome size=12157105, which may cause seg-fault at the mapping step. Re-run genome generation with recommended âgenomeSAindexNbases 10
Nous vous rappelons que lâindexation du gĂ©nome nâest Ă faire quâune seule fois pour chaque gĂ©nome et chaque logiciel dâalignement.
4.5. Aligner les reads sur le génome de référence#
Le fichier S1 Supporting Information Methods prĂ©cise la commande utilisĂ©e pour lâalignement :
STAR --runThreadN 1 --runMode alignReads --genomeDir
path_to_yeast_genome_build --sjdbGTFfile path_to_yeast_transcriptome_gtf
--readFilesIn sample.fastq --outFilterType BySJout --alignIntronMin 10 --
alignIntronMax 3000 --outFileNamePrefix ./STAR_out/ --
outFilterIntronMotifs RemoveNoncanonical
Les alignements des reads seront stockés dans le répertoire reads_map
:
$ mkdir -p reads_map
Avec nos chemins de fichiers et quelques adaptations, la commande dâalignement devient :
$ STAR --runThreadN 1 \
--runMode alignReads \
--genomeDir genome_index \
--sjdbGTFfile genome/genes.gtf \
--readFilesCommand zcat \
--readFilesIn reads/SRR3405801.fastq.gz \
--outFilterType BySJout \
--alignIntronMin 10 \
--alignIntronMax 3000 \
--outFileNamePrefix reads_map/SRR3405801_ \
--outFilterIntronMotifs RemoveNoncanonical \
--outSAMtype BAM Unsorted
Note
Lâarticle orginal du logiciel dâalignement STAR « STAR: ultrafast universal RNA-seq aligner » (Bioinformatics, 2013) prĂ©cise que :
STARâs default parameters are optimized for mammalian genomes. Other species may require significant modifications of some alignment parameters; in particular, the maximum and minimum intron sizes have to be reduced for organisms with smaller introns.
Ceci explique pourquoi les options
--alignIntronMin 10
et--alignIntronMax 3000
ont Ă©tĂ© adaptĂ©es pour le gĂ©nome de la levure S. cerevisiae.Lâoption
--readFilesCommand zcat
nâĂ©tait pas prĂ©sente dans la commande fournie en Supporting information. Nous lâavons ajoutĂ©e car les fichiers contenant les reads (.fastq.gz) sont compressĂ©s et il faut demander explicitement Ă STAR de le prendre en charge. Pensez Ă toujour consulter la documentation de lâoutil que vous utilisez (mĂȘme si câest parfois pĂ©nible) !
Lancez lâalignement avec STAR et vĂ©rifiez que tout se dĂ©roule sans problĂšme. Lâalignement devrait prendre entre 5 et 10 minutes.
4.6. Compter les reads et les transcrits#
Le fichier S1 Supporting Information Methods précise les commandes utilisées pour le comptage des reads :
htseq-count --order=pos --stranded=reverse --mode=intersection-nonempty
sample.aligned.sorted.sam path_to_yeast_transcriptome_gtf > sample.txt
et celui des transcrits :
cuffquant --library-type=fr-firststrand path_to_yeast_transcriptome_gtf
sample.aligned.sorted.sam
Enfin, la normalisation des comptages des transcrits :
cuffnorm --library-type=fr-firststrand path_to_yeast_transcriptome_gtf
*.cxb
Nous allons rĂ©aliser nous-mĂȘmes ces Ă©tapes avec quelques adaptations.
CrĂ©ez tout dâabord le rĂ©pertoire counts/SRR3405801
dans lequel seront stockés les fichiers de comptage.
$ mkdir -p counts/SRR3405801
Les Ă©tapes de tri et dâindexation des reads alignĂ©s ne sont pas explicitement mentionnĂ©es dans les Supporting Informations, mais elles sont cependant nĂ©cessaires pour HTSeq et Cufflinks.
$ samtools sort reads_map/SRR3405801_Aligned.out.bam -o reads_map/SRR3405801_Aligned.sorted.out.bam
$ samtools index reads_map/SRR3405801_Aligned.sorted.out.bam
Cette étape prend quelques minutes.
Note
Le tri des reads peut, a priori, se faire directement avec STAR en utilisant lâoption --outSAMtype BAM SortedByCoordinate
. Cependant, les tests rĂ©alisĂ©s sur le cluster ont montrĂ© quâil y avait parfois des soucis avec cette option. Nous prĂ©fĂ©rons donc utiliser explicitement samtools
pour le tri des reads.
La commande pour compter les reads devient alors :
$ htseq-count --order=pos --stranded=reverse \
--mode=intersection-nonempty \
reads_map/SRR3405801_Aligned.sorted.out.bam \
genome/genes.gtf > counts/SRR3405801/count_SRR3405801.txt
Puis celle pour compter les transcrits :
$ cuffquant --library-type=fr-firststrand genome/genes.gtf \
reads_map/SRR3405801_Aligned.sorted.out.bam \
--output-dir counts/SRR3405801
Cette étape assez longue. Patientez quelques minutes.
Note
Par défaut,
cuffquant
écrit un fichierabundances.cxb
.Nous ajoutons lâoption
--output-dir counts/SRR3405801
pour indiquer oĂč stocker les rĂ©sultats produits parcuffquant
(voir la documentation à ce propos). Cela nous permet de distinguer les résultats obtenus à partir de différents fichiers .fastq.gz.
Enfin, on normalise les comptages des transcrits :
$ cuffnorm --library-type=fr-firststrand genome/genes.gtf \
counts/*/*.cxb --output-dir counts
Note
Dans le cas prĂ©sent, cette normalisation va Ă©chouer car nous nâavons alignĂ© et quantifiĂ© quâun seul fichier .fastq.gz. Cette Ă©tape sera par contre pertinente lorsque plusieurs fichiers .fastq.gz seront traitĂ©s. On le verra par la suite.
Lâoption
--output-dir counts
indique oĂč stocker les fichiers produits parcuffnorm
(voir la documentation Ă ce propos).
4.7. Conclusion#
Pour analyser les donnĂ©es RNA-seq de S. cerevisiae, vous avez lancĂ© Ă la main plus dâune dizaine de commandes dans un terminal Unix. CâĂ©tait fastidieux, car ces commandes Ă©taient parfois complexes avec de nombreuses options. Dans ce cas, le copier-coller Ă©tait votre meilleur ami !
Mais, vous avez Ă©tĂ© capable de reproduire toutes ces Ă©tapes en suivant les instructions de ce tutoriel. Câest lĂ la grande force dâUnix et de la ligne commande : la capacitĂ© Ă dĂ©crire une analyse complexe en une suite dâinstructions Ă©crites et donc facilement rĂ©pĂ©tables.
La prochaine Ă©tape est maintenant dâautomatiser lâanalyse en regroupant toutes ces commandes dans un script.