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
|
#--------------------------- Gb_parser.pl -----------------------------#
# recherche une séquence dans GenBank à partir de Gi ou d'Acc #
# parse le résultat des features en un fichier fasta détaillé #
# nommé Gb_parser.fasta #
#--------------------------- Gb_parser.pl -----------------------------#
use warnings;
use Bio::DB::GenBank;
use Bio::SeqIO;
use Bio::SeqFeatureI;
open (OUTFILE, ">Gb_parser.fasta");
my $gb = new Bio::DB::GenBank;
# Récupération dans $seq de l'objet Genbank contenant de nombreuses informations
# Gi, Acc, séquence, Annotations, Organisme, Espèce, Genre ...
my $Acc = 'AE000783'; #Accession number de la séquence à traiter
my $seq1 = $gb->get_Seq_by_acc($Acc);
my $Sequence = $seq1->seq();
my $Description = $seq1->desc();
print "Acc = $Acc\nDescription = $Description\n"; #ecrit le num d'accession et sa description associée
my $seqio_object = $seq1;
for my $feat_object ($seqio_object->get_SeqFeatures) {
#print "\n", $feat_object->primary_tag, "\n";
for my $tag ($feat_object->get_all_tags){
#print $tag." ";
for my $value ($feat_object->get_tag_values($tag)){
#print $value."\n"
}
}
}
foreach $feat ( $seqio_object->get_SeqFeatures() ) {
if ($feat->primary_tag() eq "CDS"){ # ne s'intéresse qu'aux tags "CDS"
foreach $tag ( $feat->get_all_tags() ) {
if ($tag eq "locus_tag"){
print OUTFILE ">", join(' ',$feat->get_tag_values($tag)); #ecrit le locus
}
elsif ($tag eq "product"){
print OUTFILE " ", join(' ',$feat->get_tag_values($tag)); #ecrit le nom du CDS
}
}
print OUTFILE " ", $feat->start, "..", $feat->end,"\n";;# " on strand ", $feat->strand, "\n";
$out = $feat->seq; #out est un Primary::Seq
$string = $out->seq(); #recupère la séquence
print OUTFILE $string."\n";
}
} |
Partager