Bioinformatique - TP2 : recherche de cadres de lecture ouverts (ORF)

Transcription

Bioinformatique - TP2 : recherche de cadres de lecture ouverts (ORF)
Bioinformatique - TP2 : recherche de cadres de lecture ouverts (ORF)
Jean-Baptiste Lamy /
Manipuler des séquences biologiques en Python
Importation des modules nécessaires :
from Bio.Seq import *
from Bio.SeqIO import *
Les séquences chargées avec BioPython peuvent être manipulée comme des chaı̂nes de caractère Python, et possèdent en
plus des fonctions spécifiques aux séquences (transcription, etc). Il existe deux manières de traiter les séquences en Python :
les séquences anonymes (Seq) et les séquences nommées (SeqRecord, incluant le nom du gène, de l’espèce, etc, en plus de la
séquence proprement dite).
Opérations
Code Python
adn = Seq("ATGC...", IUPAC.unambiguous_dna)
arn = Seq("AUGC...", IUPAC.unambiguous_rna)
prot = Seq("MLVA...", IUPAC.protein)
adn = read("fichier.fasta", format="fasta")
arn = read("fichier.fasta", format="fasta")
prot = read("fichier.fasta", format="fasta")
Créer une séquence anonyme d’ADN, d’ARN ou une
séquence protéique (d’acides aminés)
Charger à partir d’un fichier FASTA une séquence
(nommée) d’ADN, d’ARN ou d’acides aminés
Transformer une séquence anonyme en séquence nommée
(ADN ou autre)
Transformer une séquence nommée en séquence anonyme
SeqRecord(adn, name="nom")
adn.seq
Compter le nombre de paire de base / d’acide aminé dans
une séquence (ADN, ARN ou protéine)
len(adn)
str(adn)
# Séquence anonyme (Seq)
str(adn.seq) # Séquence nommée (SeqRecord)
adn[i]
adn[i : j]
for base in adn: print(base)
for i in range(len(adn)): print(adn[i])
Afficher la totalité d’une séquence
Obtenir la base n°i d’une séquence
Extraire une partie d’une séquence de la base i à la base j
Parcourir toutes les bases d’une séquence
Les opérations suivantes sont disponibles uniquement sur
Calcule le complément d’une séquence d’ADN ou d’ARN
Inverse une séquence d’ADN, d’ARN ou d’AA et prend
son complément
Transcrire une séquence d’ADN (brin codant) en ARN
(transcription brute ne prenant pas en compte les sites
promoteurs)
Traduire une séquence d’ADN (brin codant) ou d’ARN en
AA (traduction brute ne prenant pas en compte les
codons start et stop, le cadre de lecture, etc)
les séquences anonymes (sinon, remplacer adn par adn.seq)
adn.complement()
adn.reverse_complement()
adn.transcribe()
adn.translate()
arn.translate()
Rechercher des motifs en Python
Importation des modules nécessaires :
import Bio.motifs as motifs
Créer un motif à partir d’une ou plusieurs
séquences (ADN, ARN ou protéique)
Recherche exacte (dans une séquence anonyme
uniquement)
Recherche approximative (matrice PSSM, dans
une séquence d’ADN anonyme uniquement)
motif = motifs.create([adn1, adn2,...])
for position, sequence in motif.instances.search(adn):
print(position)
for position, score in motif.pssm.search(adn):
print(position)
1
Exercice :
L’objectif du TP est de rechercher des cadres de lecture ouverts (ORF) dans un génome. Pour cela nous allons travailler
sur le génome d’Escherichia coli K-12 ; le début de ce génome est dans le fichier “genome e coli debut.fasta” (NB c’est le brin
codant qui est représenté).
1. Importer les modules BioPython pour la manipulation des séquences et des motifs.
2. Charger le fichier “genome e coli debut.fasta” dans une variable que l’on appellera “adn”.
3. Afficher la séquence d’ADN. Combien a-t-elle de paires de base ?
4. Transcrire la séquence d’ADN en ARN, et mettre le résultat dans la variable “arn”.
5. Créer un motif appelé “motif start” correspondant à la séquence du codon start (AUG).
6. Rechercher toutes les positions sur l’ARN correspondants à des codons starts à l’aide du motif “motif start”. Mettre
les résultats dans la variable “tous les start” (astuce : on utilisera une boucle pour ne garder que les positions, et pas
les séquences des motifs trouvés).
7. De la même manière, rechercher toutes les positions correspondants à des codons stop (UAA, UAG et UGA).
8. À quelle position commence le premier ORF ? à quelle position se trouve le codon stop correspondant (attention
question piège) ?
9. Combien y a-t-il de phases de lecture possibles sur ce brin d’ADN ?
10. Rechercher (automatiquement) le stop du premier ORF (qui commence sur le premier start en 29).
Astuce : le stop correspondant au premier start doit :
— être situé après le start
— être sur la même phase de lecture
On utilisera une boucle pour passer en revue les stops, lorsque le bon stop est trouvé on gardera sa position et on
interrompra la boucle avec un “break”.
11. Créer une liste “toutes les fins” contenant les stops de chaque start.
Astuce : on partira d’une liste vide et on effectuera une boucle sur les starts. Dans cette boucle, on déterminera le
stop de chaque start en utilisant la même méthode qu’à la question précédente.
12. Créer une liste appelée “toutes les longueurs” contenant la longueur de chaque ORF sur la première phase de lecture
(en paires de base).
13. Afficher les ORF (1 ORF par ligne, avec son début, sa fin et sa longueur).
14. Avons-nous trouver tous les ORF présents sur ce morceau de génome ? Pourquoi ?
15. Pourrait-on utiliser la même méthode pour rechercher des ORF chez l’homme ?
16. Les ORF de notre tableau correspondent-ils tous à des protéines présentes dans la bactérie ? pourquoi ?
17. Quelle est la probabilité d’avoir un codon stop “par hasard” dans l’ADN, si la distribution des bases était aléatoire ?
Quelle est la probabilité d’avoir un codon autre que le codon stop ?
18. Pour une suite de 10 codons aléatoires, quelle est la probabilité de ne pas avoir de stop ? (Astuce : utiliser l’opérateur
puissance, qui se note ** en Python). Pour une suite de 70 codons ? Que peut-on en déduire pour les ORF de longueur
supérieure à 70 codons ?
19. Extraire l’ARN du premier ORF codant pour plus de 70 acides aminés, puis le traduire en protéine.
20. Rechercher avec BLAST cette séquence protéique. L’ORF correspond-il bien à une séquence codante ?
2

Documents pareils