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
| #!/usr/bin/perl
# oblige utiliser la dÈclaration de variable pour chaque nouvelle variable (my $variable;)
use strict;
# explique les bugs
use warnings;
# le path du fichier dans une variable
my $genbank = "all_GenBank.txt";
# j'ouvre le fichier (||) ou je meurs
open (FILE, "$genbank") || die "salop\n";
# je stoque chaque ligne du fichier comme une string dans un array (liste)
my @lines_gb = <FILE>;
close FILE;
## dÈclaration des variables que je vais utiliser
my $line;
my $locus;
my $definition;
my $translation = 0;
my $seq;
my $complete_seq;
my $start_cds;
my $start;
my $end;
my $product = "";
my $protein_id;
my $prot_seq;
# boucle pour chaque ligne du fichier
foreach $line (@lines_gb){
# si la string de $line match avec un truc qui commence (^) par "LOCUS"
if ($line =~ m/^LOCUS/){
# je split ma string en liste et je prend le deuxiËme ÈlÈment de la liste ([1] parceque Áa commence zero)
$locus = (split(/\s+/,$line))[1];
# j'enlËve le caractËre invisible de saut de ligne de ma string
chomp $locus;
}
if ($line =~ m/^DEFINITION/){
$definition = $line;
# definition est egal la ligne qui commence par DEFINITION et je substitue DEFINITION du dÈbut et tous les espaces juste aprËs (\s 1 esapce, \s+ groupe d'espaces ou de tabulateurs)
$definition =~ s/^DEFINITION\s+//;
# je virre (remplace par rien) partir de ", complete et tout autre caractËre aprËs"
$definition =~ s/, complete.*//;
# je remplace les espaces par "_" le "g" c'est pour qu'il le fasse pas juste avec le premier, mais avec tous
$definition =~ s/ /_/g;
chomp $definition;
# je crÈ le repertoire qui portera le nom du virus
mkdir "data/$definition";
}
# si ya "translation dans la ligne ou si la variable translation est Ègale 1"
if (($line =~ m/\/translation\=\"/)|($translation == 1)){
# je dÈfini translation 1
$translation = 1;
$seq = $line;
#je remplace tout ce qu'il y a avant translation et translation et "=" et """, le "\" c'est pour qu'il sache qu'on parle d'un caractËre normal, pas d'un truc special comme .*
$seq =~ s/.*\/translation\=\"//;
$seq =~ s/\s+//g;
chomp $seq;
# je rajoute la string $seq $complete_seq
$complete_seq = $complete_seq.$seq;
# c'est la fin de la sÈquence je remet translation 0
if ($seq =~ m /\"/){
$translation =0;
$complete_seq =~ s/\"//;
}
}
if ($line =~ m/3\'UTR/){
# fin de la sÈquence, on initialise...
$complete_seq = "";
}
# je garde les valeur de dÈbut et de fin de la protÈine
if ($line=~ m/mat\_peptide/){
$start = $line;
$start =~ s/.*mat\_peptide\s+//;
$start =~ s/\s+//g;
$end = $start;
$start =~ s/\.\..*//;
$end =~ s/.*\.\.//;
chomp $end;
print "$start $end\n";
}
# je garde la valeur de dÈbut de la CDS
if ($line=~ m/ CDS /){
$start_cds = $line;
$start_cds =~ s/.*CDS\s+//;
$start_cds =~ s/\s+//g;
$start_cds =~ s/\.\..*//;
}
# je garde le nom de proteine et l'id
if ($line=~ m/\/product/){
$product = $line;
$product =~ s/.*\/product\=\"//;
$product =~ s/\"\n//g;
$product =~ s/ /_/g;
}
# j'Ècris dans un fichier le nom et l'id, et la sÈquence de la protÈine
if (($line=~ m/\/protein_id/)&($product !~ m/polyprotein/)){
$protein_id = $line;
$protein_id =~ s/.*\/protein_id\=\"//;
$protein_id =~ s/\"\n//g;
$protein_id =~ s/ /_/g;
# j'ouvre le fichier de sortie
open (FILE, ">data/$definition/$product");
print FILE "\>$product\t$protein_id\n";
my $temp = $complete_seq;
# et oui c'est les coordonnÈes nuclÈiques...
my $tmpstart = int(($start-$start_cds)/3);
my $tmpend = (($end-$start_cds+1)/3)-$tmpstart;
# substring chope la strin qui va de $tmpstart et qui fait $tmpend de long
$prot_seq = substr($temp, $tmpstart, $tmpend);
print FILE "$prot_seq\n";
close FILE;
}
}
# \n retour la ligne
print "tadam!!!\n\n" |
Partager