Projet TranscriptoVac Responsable INRA : Isabelle Schwartz – Unité Virologie et Immunologie Moleculaires (VIM) Transcriptome ovin 90 échantillons sanguins répartis en : 3 conditions de vaccination (GR1, GR2, GR3) 3 temps de collecte après infection (T0, T4, T24) 10 réplicats par {conditions;temps collecte} Séquencage paired end {51 bp;34 bp} sur librairie orientée polyA (plate-forme Imagif - NextSeq)
Qualité des librairies On a un bon % d’alignement et pas trop de multimap : Pourtant, on a un % de fragments mappés sur des domaines géniques relativement faible : Category SCH01 SCH02 SCH03 SCH04 SCH05 SCH06 SCH07 … Assigned 27979308 (48.9%) 33118729 (48.9%) 22473669 (48.9%) 25653008 (50.3%) 33469775 (48.2%) 31497597 (48.4%) 30524070 (51.3%) NoFeatures 27845712 (48.7%) 33003854 (48.7%) 22281904 (48.5%) 24136334 (47.3%) 34320459 (49.5%) 32096722 (49.3%) 27627918 (46.4%) Chimera 1276650 (2.2%) 1418333 (2%) 1128001 (2.4%) 1111642 (2.1%) 1429925 (2%) 1391957 (2.1%) 1227186 (2%) Ambiguity 62780 (0.1%) 91439 (0.1%) 55831 (0.1%) 65195 (0.1%) 86697 (0.1%) 75493 (0.1%) 63220 (0.1%) Où sont localisés ces fragments NoFeatures ?
Une grande partie des fragments non assignés sont localisés dans des régions qui prolongent les parties 3’ et 5’ UTR, telles qu’elles sont actuellement annotés dans Ensembl pour le génome ovin :
Il y a aussi, à certains endroits, du signal de transcription dans les introns : « Le transcriptome, c’est un sacré bordel !! » (Cédric Cabau – Communication personnelle - 2017)
Objectif : Utiliser les données de transcriptome disponibles dans ce projet pour redéfinir les bornes des régions 5’ et 3’ UTR On utilise le fait que la librairie soit orientée pour tenter d’améliorer les annotations des UTRs pour les gènes forward et reverse pris indépendamment : cufflinks cuffmerge Fragment mapped forward in sample 1 new model Ensembl reference model restricted + Fragment mapped forward in sample 2 new model merge models Forward new forward model …. Fragment mapped forward in sample n new model Ensembl reference model Fragment mapped reverse in sample 1 Ensembl reference model restricted new model + Fragment mapped reverse in sample 2 new model merge models new reverse model Reverse …. Fragment mapped reverse in sample n new model Final new model = new forward model + new reverse model
Détails techniques #Restriction du modèle de gènes Ensembl aux gènes forward awk '{if ($7== "+") {print $0;}}' ../../Ensembl90_Oar3.1/Ovis_aries.Oar_v3.1.90.chr.gtf > ../../Ensembl90_Oar3.1/Ovis_aries.Oar_v3.1.90.fwd.gtf #Filtre des fragments reverse dans la librarie d’un échantillon (solution technique fournie par Cédric Cabau) : bamtools filter -script R1_reverse.json –in SCH01_chr1.bam –region 1 –out SCH01_forward_transcripts.bam {"filters" : [ { "isPaired" : "true", "isProperPair" : "true", "isFirstMate" : "true", "isReverseStrand" : « true" }, { "isSecondMate" : "true", "isReverseStrand" : « false" } ] } #Sur ces restrictions, on demande à créer un nouveau modèle cufflinks -g ../../Ensembl90_Oar3.1/Ovis_aries.Oar_v3.1.90.fwd.gtf --library-type fr-firststrand SCH01_forward_transcripts.bam (schéma issu de : http://onetipperday.sterding.com/2012/07/how-to-tell-which-library-type-to-use.html)
Détermination de la valeur du paramètre library-type 1°) On prend une région génique en forward où il y a un ratio signal exon/signal intron élevé : chr4:70752308-70760912 Dans cette région, on regarde quels sont les flags SAM les plus fréquents : $ samtools view -h SCH01_S1_all_R1_001_cutadapt_accepted_hits_sorted_goodmap.bam 4:70752308-70760912 | samtools sort -n -O SAM | grep -v "^@" | \ cut -f 2 | sort | uniq -c | sort -n –r | head -2 2003 161 => read paired / mate reverse strand / second in strand 1759 81 => read paired / read reverse strand / first in strand First in strand = R1 et second in strand = R2 ? On aurait alors R1 en reverse et R2 en forward donc :
2°) On prend une paire de reads dans cette région qui ont ces valeurs de flags SAM : NS500446:282:HVNH2BGX2:1:11102:5889:11179 81 4 70752706 50 51M = 70752589 -168 TCTGTCCCCGGGACCGGGAGGGACCCAGCCCGCGTCACGCCCCTCGGCGCT … NS500446:282:HVNH2BGX2:1:11102:5889:11179 161 4 70752589 50 34M = 70752706 168 CGGGAGGACGGGACCAGCATCTATTGTCTGGGTT … On blaste la séquence de la première ligne (R1) contre le transcriptome ovin : Pour la deuxième (R2) : Là aussi, on a donc bien :
3°) Dernière vérification avec IGV : Donc tout concorde vers :
Résultats sur les 11 X 6 = 66 premiers échantillons séquencés (je n’ai pas encore toutes les données) Après le merge cufflinks, il faut agréger les éléments TCONS et les relier à un transcrit Ensembl (annotation cufflinks « nearest_ref »)
Algo de « nettoyage » - Appliqué indépendamment dans les sens forward et reverse (ici, forward pris en exemple) Lire le GTF de reference (Ensembl) pour les gènes forward On retient le lien entre les transcrits Ensembl (ENS…T) -> et les gènes (ENS…G) On mémorise les bornes actuelles des gènes Lire le GTF, résultat du merge forward par Cufflinks On sélectionne les lignes qui font référence (nearest_ref) à un transcrit Ensembl Pour chaque transcrit Cufflinks (TCONS), on retient les bornes de début et de fin On retient le lien TCONS -> ENS…G On crée des groupes de transcrits qui se chevauchent (librairie python2 bx.intervals.intersection) Pour chacun des groupes : S’il est fait référence à un seul gène, les bornes de ce gène vont être étendue aux bornes extrêmes des TCONS de ce groupe S’il est fait référence à plusieurs gènes Ensembl, on ne va étendre que les bornes des gènes situés à l’extrémité du groupe On lit à nouveau le GTF de référence. Pour tous les « features » d’un gène (exon, CDS, …) on substitue les coordonnées de début et de fin qui ont changé pour ce gène
Après nettoyage des merge de Cufflinks :
max_intron_length : 300000 -> 300 Finition 1 Pour certains gènes, cufflinks va créer des introns assez long pour « raccrocher » du signal de transcription : max_intron_length : 300000 -> 300 Sans option –max-intron-length Avec–max-intron-length 300
max_intron_length = 300 corrige les bornes de 4141 gènes (96 max_intron_length = 300 corrige les bornes de 4141 gènes (96.7% des cas en le raccourcissant). Pourtant, il y a 7.3% des cas où on a un comportement différent de celui attendu : Sans option –max-intron-length Avec–max-intron-length 300
Finition 2 Eviter d’étendre sur des régions où l’on n’a pas de couverture : --min-frags-per-transfrag 10 -> 30 --min-frags-per-transfrag = 30 corrige les bornes de 300 gènes (98.7% des cas en le raccourcissant). Sur les 11 gènes qui sont rallongés par cette option, 7 sont validés manuellement.
Situation où l’on peut difficilement améliorer les choses : OK ? OK
Un miRNA avec de la transcription autour :
modèle étendu (66 échantillons) : Impact du nouveau modèle sur l’efficience de l’assignation Fragment -> Gène : Ancien modèle : Category SCH01 SCH02 SCH03 SCH04 SCH05 SCH06 SCH07 … Assigned 27979308 (48.9%) 33118729 (48.9%) 22473669 (48.9%) 25653008 (50.3%) 33469775 (48.2%) 31497597 (48.4%) 30524070 (51.3%) NoFeatures 27845712 (48.7%) 33003854 (48.7%) 22281904 (48.5%) 24136334 (47.3%) 34320459 (49.5%) 32096722 (49.3%) 27627918 (46.4%) Chimera 1276650 (2.2%) 1418333 (2%) 1128001 (2.4%) 1111642 (2.1%) 1429925 (2%) 1391957 (2.1%) 1227186 (2%) Ambiguity 62780 (0.1%) 91439 (0.1%) 55831 (0.1%) 65195 (0.1%) 86697 (0.1%) 75493 (0.1%) 63220 (0.1%) modèle étendu (66 échantillons) : Category SCH01 SCH02 SCH03 SCH04 SCH05 SCH06 SCH07 … Assigned 45582877 (74.8%) 53390112 (73.8%) 35298429 (72.1%) 40557977 (74.5%) 54388607 (73.5%) 50772059 (73.1%) 47756261 (75.2%) NoFeatures 15217193 (25%) 18775582 (25.9%) 13554022 (27.7%) 13798323 (25.3%) 19446039 (26.3%) 18546118 (26.7%) 15664755 (24.6%) Ambiguity 64452 (0.1%) 90803 (0.1%) 56102 (0.1%) 58615 (0.1%) 76223 (0.1%) 84618 (0.1%) 64584 (0.1%)
Implémentation /save/ljouneau/extends_UTRs readme.txt extend_UTRs_configuration_template.txt 2 versions : extend_UTRs_parallel_sge.sh l’inférence de nouveaux modèles forward et reverse sont simultanés extend_UTRs_single_thread.sh chaque modèle est inféré l’un après l’autre 2 possibilité d’inférence d’un nouveau modèle cufflinks stringtie Beaucoup plus rapide (20 minutes pour 6 bams) Laisse tous les gènes de moins de 2kb inchangés (dont les miRNA) Sur mon jeu de données : apporte moins de changements par rapport à la référence assemblage de moins bonne qualité
Exemple de fichier de configuration - extend_UTRs_configuration_template.txt