1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
| #!/usr/bin/perl
#nom du programme : traduction.pl
#but : lire la séquence nucléique, l'organiser en une seule chaîne de caractères, faire la réverse complémentaire et traduction des deux dans les 3 cadres de lectures respectifs.
use strict;
use warnings;
use myCodonTable;
# print "Entrer le nom du fichier à ouvrir : ";
# $fich_seq = <STDIN>;
my $fich_seq = "/home/seq.fan";
chomp $fich_seq;
unless (open (FICH_SEQ, $fich_seq)) {
print "Error 0 : L'ouverture du fichier $fich_seq a échoué.\n";
exit;
}
my @seq;
my $index = -1;
while ( my $ligne = <FICH_SEQ> ) {
$ligne =~ s/\s//g;
if ($ligne =~ />.*/) {
$index++;
$seq[$index] = "$ligne";
$index++;
} else {
$seq[$index] .= $ligne;
}
}
close FICH_SEQ;
my $prot = Bio::Tools::CodonTable->new(); #création d'un objet vide qui contiendra les séquences protéiques à la fin
my $titreSeq = '';
open(FICHIER, ">>/home/seq.prot") or die ("Error1: $!"); #ouverture du fichier où seront stockées les séquences protéiques
foreach my $ligneSequence (@seq) {
if ($ligneSequence =~ />.*/) {
# récupération du titre de la séquence à traiter
$titreSeq = $ligneSequence;
}
else {
my $aa = ''; #je déclare la variable scalaire vide qui contiendra le résultat de la traduction cadre 1
for (my $position = 0; $position < length $ligneSequence; $position += 3)
#je lis par triplets à partir de la 1re base
{
$aa .= $prot -> translate (substr ( $ligneSequence, $position, 3)); #je traduis et stocke dans la protéine
}
print FICHIER $titreSeq."_1\n"; #j'écris le titre de chaque séquence en indiquant le cadre
print FICHIER $aa."\n"; #j'écris la séquence elle-même
my $aa1 = '';
for (my $position = 1; $position < length $ligneSequence; $position += 3)
#je lis par triplets à partir de la 2nde base
{
$aa1 .= $prot -> translate (substr ( $ligneSequence, $position, 3)); #je traduis et stocke dans la protéine
}
print FICHIER $titreSeq."_2\n";
print FICHIER $aa1."\n";
my $aa2 = '';
for (my $position = 2; $position < length $ligneSequence; $position += 3)
#je lis par triplets à partir de la 3e base
{
$aa2 .= $prot -> translate (substr ( $ligneSequence, $position, 3)); #je traduis et stocke dans la protéine
}
print FICHIER $titreSeq."_3\n";
print FICHIER $aa2."\n";
}
}
close FICHIER;
#Le fichier ainsi créé contient les séquences protéiques issues de la traduction du brin "sens".
###
# my aaR = nom générique pour les séquences protéiques issues de la traduction du brin inverse complémentaire
#Traitement de la séquence révcomplémentaire :
my $protR = Bio::Tools::CodonTable->new(); #création d'un objet vide qui contiendra les séquences protéiques à la fin
my $titreSeqR = ''; #variable scalaire vide devant contenir le nom de chaque séquence
#ouverture du fichier où seront stockées les séquences protéiques résultants de la traduction de la revcomplémentaire :
open(FICHIER, ">>/home/seqR.prot");
foreach my $ligneSequence (@seq) {
if ($ligneSequence =~ />.*/) {
# récupération du titre de la séquence à traiter
$titreSeqR = $ligneSequence;
}
else {
my $aaR = '';
my $invseq = reverse $ligneSequence;
$invseq =~ tr/acgtACGT/tgcaTGCA/;
# traitement sur $invseq : lecture par triplets :
for (my $positionR = 0; $positionR < length $invseq; $positionR += 3) #je lis par triplets
{
$aaR .= $protR -> translate (substr ($invseq, $positionR, 3)); #je traduis et stocke dans la protéine
}
print FICHIER $titreSeqR."_-1\n";
print FICHIER $aaR."\n";
my $aaR1 = '';
$invseq = reverse $ligneSequence;
$invseq =~ tr/acgtACGT/tgcaTGCA/;
# traitement sur $invseq : lecture par triplets :
for (my $positionR = 1; $positionR < length $invseq; $positionR += 3) #je lis par triplets
{
$aaR1 .= $protR -> translate (substr ($invseq, $positionR, 3)); #je traduis et stocke dans la protéine
}
print FICHIER $titreSeqR."_-2\n";
print FICHIER $aaR1."\n";
my $aaR2 = '';
$invseq = reverse $ligneSequence;
$invseq =~ tr/acgtACGT/tgcaTGCA/;
# traitement sur $invseq : lecture par triplets :
for (my $positionR = 2; $positionR < length $invseq; $positionR += 3) #je lis par triplets
{
$aaR2 .= $protR -> translate (substr ($invseq, $positionR, 3)); #je traduis et stocke dans la protéine
}
print FICHIER $titreSeqR."_-3\n";
print FICHIER $aaR2."\n";
}
}
close FICHIER; |
Partager