Vous allez utiliser des outils informatiques qui vous permettront d’analyser des données brutes issues d’une analyse Shotgun Proteomics récemment publiée dans le journal Science sous le titre "Real-time visualization of drug resistance acquisition by horizontal gene transfer reveals a new role for AcrAB-TolC multidrug efflux pump".
Les données associées à cette publication sont publiques et accessibles sur la plateforme PRIDE. Le PDF de la publication est data/Nolivos_2019.pdf
.
Vous forkerez le présent "repository" pour vous permettre de sauvegarder votre travail.
Vous éditerez ce fichier README.md
pour répondre aux questions dans les encarts prévus à cet effet et inserer les figures que vous aurez générées. Ce "repository" vous appartenant, vous pouvez créer tous les repertoires et fichiers necessaires à la conduite du TP.
I ) Recherche et identification de protéines (peptides) à partir d’expériences de Shotgun Proteomics
L’objectif principal de cette partie est de vous familiariser avec le pipeline d’analyse de données en shotgun proteomics (approche bottum-up) que nous avons vu en cours.
Outils à récupérer sur la plateforme pédagogique :
- proteowizard: http://proteowizard.sourceforge.net/ (windows uniquement)
- searchgui: http://compomics.github.io/projects/searchgui.html (version windows, version mac + linux)
- peptide shaker: http://compomics.github.io/projects/peptide-shaker.html (toutes les plateformes)
Dans un dossier où vous conserverez toutes les données de ce TP, vous aurez placé au préalable les fichiers suivants :
- données brutes du QEXactive (extension .raw)
- fichiers convertis des données MS (extension .mgf)
Cette partie du TP est découpée en 4 grandes parties avec pour chacune des parties, le cheminement à suivre qui n’est pas exhaustif, c’est-à-dire que vous pouvez de vous-même aller explorer les différentes options proposées par les logiciels (en particulier PeptideShaker). A l’issue du TP, vous completerez le fichier markdown avec vos réponses aux différentes questions qui vous seront posées.
Elle consiste en l'identification des fragments de peptides par leur masse grâce aux résultats de lab ase de données
Approche bottom up
- Rechercher la base de données des protéines d’E. coli sur UNIPROT
- Télécharger toutes les séquences FASTA des protéines Swiss-prot. : format canonical, uncompressed (onglet download).
- Sauvegarder le fichier FASTA
- Télécharger le fichier FASTA correspondant à la protéine suivante : « P00761 ».
- Copier le fichier FASTA de la protéine P00761 à la suite du fichier FASTA du protéome bactérien.
- NB : le fichier FASTA s’ouvre avec un éditeur de texte.
L’identification des protéines/ peptides se réalise grâce à une base de données de protéines. Quelle comparaison va être effectuée?
On va comparer cela au protéome complet d'E. coli
On va comparer les listes de peptides trypsiques coupés in silico (provenant de notre base de données) à nos données brutes expérimentales
Existe t’il d’autres types de bases de données pour réaliser l’identification des peptides trypsiques dans un spectre?
Il existe une librairie spectrale (spectre expérimentaux générés précédemment)
qui permet ceci.
Il est possible d'identifier les peptides grâce à une librairie spectrale
Dans le cas d'E. coli (K12) 4391 protéines ont été identifiées
Les séquences Swiss prot sont annotées manuellement ce qui n'est pas le cas des séquences TrEMBL sont annotées automatiquement (pas forcément vérifiées, donc moins utilisées)
La protéine P00761 est la trypsine, c'est une enzyme qui se charge couper les protéines notamment après une lysine ou une arginine ==> permet de faire la idgestion
On l'ajoute car on veut s'affranchir de fausses identifications`
De nombreux petits logiciels existent pour convertir vos fichiers bruts dans un format lisible par les moteurs de recherche. Il existe de nombreux formats de fichiers (diversité des appareillages, équipementiers etc..) qui ne peuvent pas être exploités directement. Vous trouverez en Open access de nombreux convertisseurs de fichiers MSConvert (Proteowizard), PAVA etc… Ici vous allez utiliser MSconvert (plateforme pédagogique).
- Cliquer sur MSConvertGUI.exe
- l’interface graphique MSConvert va s’afficher :
- charger le fichier .raw (en haut à gauche, File-browse-add)
- charger un fichier de destination (TP MADP)
- output format : sélectionner mgf et laisser les autres paramètres par défaut
- dans la section filters, sélectionner peak picking, Algorithme vendor –cliquer sur add
- cliquer sur start
- les fichiers.raw doivent être convertis en .mgf
Les données de QExactive ont été enregistrées en mode centroïde et non pas en mode Profiling. D’après vous quelle est la différence entre les deux modes?
- Cliquer sur SearchGUI-3.3.20.jar NB : si vous avez des messages d’erreur qui s’affichent (missing precursor charges) à un moment donné du process – mettez NO
- charger le fichier .mgf (spectrum file)
- charger un fichier de destination (TP MADP)
- dans l’onglet search settings, vous allez définir vos paramètres de recherche (cf. Material & Methods de l’article): add
- donner un nom à vos paramètres de recherche et cliquer sur Spectrum matching
- Charger votre fichier .FASTA
- Ajouter les modifications fixes et variables
- Rentrer les paramètres suivants : enzyme, missed cleavage, fragments, tolerance (comme illustré)
- Cliquer sur OK et enregistrer votre recherche
- Dans la page de dialogue SearchGUI, sélectionner les deux moteurs de recherche X.tandem et OMSSA.
- Cliquer sur START
- Une page de dialogue va s’afficher, montrant l’avancée de la recherche.
- Dans votre fichier d’enregistrement de vos données, vous allez obtenir un fichier de sortie qui est nommé searchgui_out.zip. Il contient le fichier d’analyse OMSSA (.omx) et X ! Tandem (.xml)
La base de donnée sera utile lorsque'lon voudra identifier les peptides, donc
il est important qu'elle soit de bonne qualité (curatée comme SwissProt) et qu'elle soit enrichie.
Non, car les bases de données sont régulièrement mises à jour. Il est possible qu'on trouve une protéine différente juste après que la base de données ait été
révisée.
Comme dit précédemment il est préférable que la base de données soit enrichie. Cela permettrait d'avoir un meilleur choix de la protéine donc cela augmenterait la qualité de l'identification et donc du score.
Est-ce que les modifications ajoutées sont les seules modifications que l’on peut attendre dans une expérience de shotgun proteomics?
Il est possible qu'il y ait d'autres modifications que l'on ne connaissait pas.
Une recherche bibliographique pourrait compléter les lacunes, cela dit, il n'est
pas toujours possible de tout prévoir et c'est un risque à prendre en considération.
Vous avez choisi la trypsine comme enzyme et choisi « specific », qu’est-ce que cela signifie, et comment cela peut affecter le processing ?
L'enzyme trypsine est utilisée comme enzyme de digestion pour les protéines, il est donc nécessaire de le signaler en amont, autrement, s'il reste des traces de la trypsine, cela peut biaiser nos analyses de spectres.
Missed cleavage correspond au nombre de fois où la trypsine ne coupe pas à certains endroits de la protéine. On choisit le chiffre 2 ici car l'on sait qu'il est possible que parfois, la trypsine ne coupe pas même si cela est censé être un évènement rare. Cela permet donc de prendre en considération des erreurs aléatoires qu'il peut y avoir.
Après avoir l’interrogation des données avec les moteurs de recherche, nous allons utiliser PeptideShaker pour identifier les peptides et protéines. Cliquer sur le fichier PeptideShaker-1.16.45.jar dans le dossier PeptideShaker-1.16.45. Une page de dialogue va s’ouvrir et cliquer sur New project.
Project details :
- Donner un nom au projet
- Donner un nom à l’échantillons Input files :
- Charger le fichier searchgui que vous avez généré
- Charger le fichier .mgf
- Charge la base de données FASTA
Enregistrer votre projet sous le nom que vous souhaitez (l’extension du fichier sera .cpsx)
Seul le langage Python (v3.X) est requis pour ce travail. Il vous est conseillé d'installer un environnement virtuel python pour installer les libraries requises independamment de votre systèmes d'exploitation.
- Le systême de gestion de paquets Conda est très pratique et disponible pour la plupat des systèmes d'exploitation. Une version légère suffisante pour nos besoin est téléchargeable ici
- Si vous disposez d'un interpreteur python 3.X installé sur votre systême virtualenv est désormais "built-in".
Depuis le repertoire de votre repository Git, installez le package scipy et lancez jupyter.
$PATH_TO_CONDA_DIR/bin/conda install -c conda-forge scipy notebook
$PATH_TO_CONDA_DIR/bin/jupyter notebook
Jupyter est une environnement de type notebook permettant l'execution de code python dans des cellules avec une persitance des variables entre chaque evaluation de cellule. Jupyter fournit nativement le support de la librarie graphique matplotlib.
N/A
Dans l'inteface de jupyter, créez un nouveau fichier notebook (*.ipynb) localisé dans votre repertoire git. Dans la première cellule copiez le code suivant:
%matplotlib nbagg
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import norm
La première ligne sert à activer le rendu graphique, pour tout le fichier notebook. Pour dessiner des graphiques, il vous est conseillé de suivre la méthode illustrée par le code suivant que vous pouvez executer dans une deuxième cellule notebook.
fig, ax = plt.subplots()
x = np.linspace(norm.ppf(0.01),
norm.ppf(0.99), 100)
ax.plot(x, norm.pdf(x),
'r-', lw=5, alpha=0.6)
ax.plot(x, np.full(len(x), 0.2),
'b-', lw=1)
fig.show()
- Creation des objets
fig
etax
- Ajout successif de graphiques sur la même figure par l'appel à des methodes de l'objet
ax
- Affichage de la figure complète via
fig.show()
- Evaluation de la cellule pour visualisation dans la cellule de résultats.
L'affichage dans la cellule de rendu du notebook devrait confirmer la bonne installation des dépendances.
La documentation matplotlib est bien faite, mais attention il vous est demandé, pour la construction des graphiques, d'ignorer les méthodes de l'objet plt
(frequemment proposées sur le net) et d'utiliser uniquement les méthodes de l'objet Axes. plt
est un objet global susceptible d'agir simultanement sur tous les graphiques d'un notebook. A ce stade, son utilisation est donc à éviter.
Un fichier data/TCL_wt1.tsv
contient les données d'abondances differentielles mesurées sur une souche sauvage d'Escherichia coli entre deux conditions: avec Tetracycline et en milieu riche. Le contrôle est le milieu riche.
Accession | Description | Gene Symbol | Corrected Abundance ratio (1.53) | Log2 Corrected Abundance Ratio | Abundance Ratio Adj. P-Value | -LOG10 Adj.P-val |
---|---|---|---|---|---|---|
Accesseur Uniprot | Texte libre | Texte libre |
Attention certaines valeurs numériques sont manquantes ou erronées, constatez par vous même en parcourant rapidement le fichier.
Les fiches de toutes les protéines de E.coli sont stockées dans un seul document XML data/uniprot-proteome_UP000000625.xml
. Nous allons extraire de ce fichier les informations dont nous aurons besoin, à l'aide du module de la librarie standard XML.etree. Pour vous facilitez la tâche, les exemples suivants vous sont fournis. Prenez le temps de les executer et de les modifier dans un notebook. Vous vous familliariserez ainsi avec la structure du document XML que vous pouvez egalement inspectez dans un navigateur.
from xml.etree.ElementTree import parse, dump
# Parse the E.Coli proteome XML Document
tree = parse('data/uniprot-proteome_UP000000625.xml')
root = tree.getroot()
ns = '{http://uniprot.org/uniprot}' # MANDATORY PREFIX FOR ANY SEARCH within document
# Store all entries aka proteins in a list of xml nodes
proteins = root.findall(ns + 'entry')
# Display the xml subtree of the first protein
dump(proteins[0])
# Find the xml subtree of a protein with accession "P31224"
for entry in proteins:
accessions = entry.findall(ns+"accession")
for acc in accessions:
if acc.text == "P31224":
dump(entry)
break
Cherchez par exemple le sous arbre de la protéine codée par le gene LacZ
Les nombres d'occurence de tous les termes GO trouvés dans le protéome de E.coli sont stockés dans le fichier data/EColiK12_GOcounts.json
. Ces statistiques ont été dérivées du fichier data/uniprot-proteome_UP000000625.xml
.
Representer graphiquement les données d'abondance et construire la pvalue des fonctions biologiques (termes GO) portées par les protéines surabondantes.
1. Charger le contenu de ce fichier dans un notebook en eliminant les lignes porteuses de valeurs numériques aberrantes.
3. A partir de cette échantillon de ratio d'abondance, estimez la moyenne et l'ecart-type d'une loi normale.
4. Superposez la densité de probabilité de cette loi sur l'histogramme. Attention, la densité de probabilité devra être mis à l'echelle de l'histogramme (cf ci-dessous)
hist = ax.hist(_, bins=100) # draw histogram
x = np.linspace(min(_), max(_), 100) # generate PDF domain points
dx = hist[1][1] - hist[1][0] # Get single value bar height
scale = len(_)*dx # scale accordingly
ax.plot(x, norm.pdf(x, mu, sqrt(S_2))*scale) # compute theoritical PDF and draw it
On voit qu'il y a un grand décalage entre la loi théorique et la répartition des log2 FC des protéines.
Ceci est en partie dû au fait qu'il y a plus de protéines qui ont un log2FC proche de 0 (144 protéines qui
ont un log2FC entre -0.34 et -0.42). De plus, la dispersion des valeurs est différentes selon l'intervalle
dans lequel on se place ce qui est bien différent de l'aspect lissé et symétrique du graphique de la loi
de densité normale.
A l'aide de la méthode scatter representer
Sont condidérées comme surabondantes les proteines remplissant ces deux critères:
Nous allons implementer une approche ORA (Over Representation Analysis) naive.
Quels sont leurs identifiants UNIPROT ?
P0A8V6
P0A9Q1
P02358
P0ACF8
P62399
P0A905
P76506
P13036
P10384
P06971
P0A910
P06996
P76344
P02931
Les entry
du fichier data/uniprot-proteome_UP000000625.xml
présentent des balises de ce type:
<dbReference type="GO" id="GO:0005737">
<property type="term" value="C:cytoplasm"/>
<property type="evidence" value="ECO:0000501"/>
<property type="project" value="UniProtKB-SubCell"/>
</dbReference>
A ce stade, on se contentera des identifiants GO (eg GO:0005737
). Vous pouvez faire un set de cette liste d'identifiants GO pour en éliminer rapidement la redondance.
Nous evaluerons la significativité de la présence de tous les termes GO portés par les protéines surabondantes à l'aide d'un modèle hypergéometrique.
Si k protéines surabondantes portent un terme GO, la pvalue de ce terme sera équivalente à . Completer le tableau ci-dessous avec les quantités vous semblant adéquates
Symbole | Paramètre | Quantités Biologiques |
---|---|---|
k | nombre de succès observés | 14 |
K | nombre de succès possibles | |
n | nombre d'observations | 82 |
N | nombre d'elements observables |
A l'aide du contenu de data/EColiK12_GOcounts.json
parametrez la loi hypergeometrique et calculez la pvalue
de chaque terme GO portés par les protéines surabondantes. Vous reportez ces données dans le tableau ci-dessous
identifiant GO | définition | occurence | pvalue |
---|---|---|---|
Quelle interpretation biologique faites-vous de cet enrichissement en termes GO spécifiques ?