BCM2550 - Automne 2010 – TP2 – Les tableaux et les tables de

publicité
BCM2550 - Automne 2010 – TP2 – Les tableaux et les tables de
hachages
Ce TP n’est pas à rendre, néanmoins, il est important de (bien) le faire.
Partie I
Question 1: Ecrire un programme qui demande à l'utilisateur d'entrer une séquence en acides
aminés, et calcule le nombre d'occurrence de chacun des 20 acides aminés dans cette séquence.
Nous avions vu, lors du TP1, une manière simple de calculer la composition d’une séquence ADN
(en comptant le nombre de A, de C, de G et de T séparément. Toutefois, avec 20 acides aminés,
la technique alors utilisée devient fastidieuse. Pour aller plus vite, on vous propose de procéder
de la manière suivante:
Au tout début du script, construisez-vous un tableau contenant l’ensemble des 20 lettres
correspondant aux 20 acides aminés :
my @aminoacids =
('A','C','D','E','F','G','H','I','K','L','M','N','P','Q','R'
,'S','T','V','W','Y');
my $naa = 20;
De cette manière, vous pouvez accéder à un acide aminé particulier directement à partir de son
index dans le tableau :
print “$aminoacids[3]\n”; # affichera E
for (my $i=0; $i<$naa; $i = $i + 1) {
print “$aminoacids[$i]\n”;
}
Affichera tous les acides aminés les uns en dessous des autres.
Ensuite, créez un tableau @count de dimension 20, et remplissez le de telle sorte que
$count[$i] va contenir le nombre d'occurrences de l'acide aminé numéro $i dans la
séquence. Donc, $count[0]va contenir le nombre de A, $count[1]le nombre de C, etc. Ce
tableau doit être initialisé de telle sorte que les 20 entrées sont toutes égales à 0.
Enfin, pour remplir le tableau @count, il faut faire une boucle allant lire une par une les
positions (les 'lettres') de la séquence protéique (en utilisant substr()), et incrémentant les
entrées correspondantes dans le tableau @count.
A la fin, il faut afficher chaque acide aminé, le nombre total de fois qu'il a été observé, et la
fréquence correspondante (nombre de fois sur nombre total d'acides aminés dans la séquence).
Question 2. Plutôt que d’utiliser substr(), vous pouvez également 'splitter' une séquence en un
tableau contenant toutes ses lettres séparément :
my $seq = “ADAGE”;
my @a = split('', $seq);
my $l = (@a);
print “$l\n”; # affichera 5
print “$a[0]\n”; # affichera A
print “$a[1]\n”; # affichera D
etc.
Modifier le programme de la question 1 de telle sorte qu'il utilise split plutôt que substr.
Question 3. Plutôt que de faire un tableau @count, il est possible de faire une table de hachage
%count, dont les clés seront les acides aminés, et les valeurs les nombres d'occurrence. Donc,
$count{'A'} va contenir le nombre de A, $count{'C'} le nombre de C, etc Modifier le
programme de facon à utiliser une table de hachage.
Question 4. Le fichier sce.fasta contient les séquences de l’ensemble des gènes codant pour des
protéines identifiés chez Saccharomyces cerevisiae. Construire une table associative (table de
hachage) dont les clés seront l’ensemble des noms des gènes du fichier sce.fasta, et les valeurs
seront les séquences associées.
Question 5: faire une boucle qui prend les gènes un par un, puis calcule la composition de ce
gène pour les 20 acides aminés (donc la fréquence de A, de C, de D, de E, etc.). Écrire un fichier
qui va tabuler:




le nom de chaque gène,
sa longueur, puis
la fréquence des 20 acides aminés,
le tout sur la même ligne, et séparés par des tabulations.
Partie II
Une séquence consensus est une séquence issue d’un alignement multiple. Un fichier pileup est
un fichier qui contient l’alignement de la séquence consensus avec la séquence de référence. Cet
alignement est formaté en colonnes séparées par des tabulations, c’est spécifique aux fichiers
pileup.
Il y a 7 colonnes dans un fichier pileup, la première est le nom du chromosome, généralement, il
s’agit d’un chiffre (1, 2, 3 …) parfois il y a l’abréviation de chromosome devant ces chiffres (chr1,
chr2, chr3 …). La deuxième colonne contient les positions des nucléotides qui ont été alignés sur
le chromosome.
La troisième colonne contient les nucléotides de la séquence de référence tandis que la
quatrième contient ceux de la séquence consensus. Les trois colonnes suivantes contiennent des
informations plus précises sur l’alignement.
La cinquième colonne contient le nombre de séquences qui se sont alignées à cette position sur
ce chromosome, lors de l’alignement multiple dont la séquence consensus est issue. La sixième
colonne contient les nucléotides spécifiques à la position de chaque séquences alignées sur cette
position, s’il y a 6 séquences alignées pour la position 43, il y aura donc 6 nucléotides, un par
séquence.
La dernière colonne contient la qualité des nucléotides de la colonne précédente. C’est une
variable calculée à partir de plusieurs paramètres et qui indique la confiance qu’on peut donner
au nucléotide. Si la qualité est basse, il est peu sur que le nucléotide A soit vraiment un A, par
contre si elle est haute, il est fortement probable que le nucléotide A soit réellement un A.
Le fichier alignement.pileup est un fichier qui contient l’alignement d’une séquence consensus,
issue d’un alignement multiple, avec une séquence de référence. Le but de l’exercice est de vous
familiariser avec les tableaux.
Question 1 : construire une boucle dans laquelle le fichier va être lu pour que chaque ligne soit
stockée dans une case d'un tableau. (Tableau 1) Ce tableau servira pour toutes les autres
questions de cette partie.
Question 2 : En s'aidant du tableau 1, calculer le nombre de positions pour chaque chromosome.
Il faut s’aider d’une boucle pour parcourir le tableau et d’un incrémenteur par chromosome pour
avoir le nombre de positions. Les incrémenteurs doivent être stockés dans un tableau pour
ensuite en faire l’impression, voir plus bas le format d’impression. (Tableau 2)
Voici le code IUPAC des nucléotides. Il s’agit du code employé pour les nucléotides des séquences
de référence et de consensus dans un fichier pileup, exception faite du N.
IUPAC nucleotide code
Base
A
Adenine
C
Cytosine
G
Guanine
T (or U)
Thymine (or Uracil)
R
A or G
Y
C or T
S
G or C
W
A or T
K
G or T
M
A or C
B
C or G or T
D
A or G or T
H
A or C or T
V
A or C or G
N
any base
Question 3 : En vous aidant du code IUPAC, déterminer le nombre de chaque combinaison de
nucléotide (incluant A, C, G, et T) de la séquence consensus. En faisant une boucle, vous passez
dans le premier tableau et vous comptez, à l’aide d’un incrémenteur, les combinaisons de
nucléotides. Il est plus facile de donner un incrémenteur par combinaison dans une table de
hachage, si vous êtes à l’aise avec ces tables, faites le ainsi, sinon, utilisez un tableau. (Tableau 3)
Question 4 : Donner les nucléotides des séquences et leurs qualités des positions ayant 5 ou 21
séquences alignées. En s’aidant d’une boucle, vous pouvez créer 2 tableaux, un pour les
nucléotides et un pour les qualités, pour les positions ayant 5 séquences alignées, puis 2 autres
pour celles ayant 21 séquences alignées. Sinon, vous pouvez aussi utiliser les tables de hachages
si vous êtes à l’aise avec. (Tableau 4)
Impression des tableaux : Imprimer les données des tableaux en suivant les formats suivant :
tableau 2 :
tableau 3 :
tableau 4 :
nom_du_chromosome
...
code_de_la_combinaison
…
positions à X séquences
…
nombre_de_positions
nombre_de_fois_qu’il_apparaît
nucléotides
qualité
Téléchargement