[Bioperl-l] How to parse BLAST output - all hits of each query innew file
Mark A. Jensen
maj at fortinbras.us
Wed Nov 25 18:20:03 UTC 2009
hey Tim--
Sound like you need to go about collecting your queries inside out:
my %hits_by_query;
for ($result->hits) {
push @{$hits_by_query{$hit->name}} $hit;
}
I believe now each hash element, keyed by the query name, will contain
an arrayref to the set of hits assoc with that query.
>From here, I believe
use Bio::Search::Result::BlastResult;
use Bio::SearchIO;
foreach my $qid ( keys %hits_by_query ) {
my $result = Bio::Search::Result::BlastResult->new();
$result->add_hit($_) for ( @{$hits_by_query{$qid}} );
my $blio = Bio::SearchIO->new( -file => $qid.".bls", -format=>'blast' );
$blio->write_result($result);
}
will do what you want.
hope this helps -
Mark
----- Original Message -----
From: "Tim" <timbourine81 at gmail.com>
To: <bioperl-l at lists.open-bio.org>
Sent: Wednesday, November 25, 2009 12:40 PM
Subject: [Bioperl-l] How to parse BLAST output - all hits of each query innew
file
> Dear bioperl users,
>
> I am a real newbie and have - maybe a very trivial - question.
>
> I searched the mailing list archive and many howtos but I have not found
> a concrete answer to my problem. So hopefully you can help me :)
>
> Background: I use the latest Bioperl version (installed it two weeks
> before).
> When I use Bio::Tools::Run::StandAloneBlast to BLAST one fasta file
> including different sequences, I get a BLAST output with many queries
> each having several hits / sbjcts.
>
> My problem is how to parse *all* hits of *one* query into a single new
> file. And this for all the queries I have in my BLAST output file.
>
> Or is it better the other way round; first to make fasta files with only
> single sequences inside and BLAST each file? But how can I automize that
> using Bioperl?
>
> I tried Bio::SearchIO but can only parse all queries and their
> respective hits in only one file...
> I think iteration is also necessary here, but I do not really know how
> to include that into Bio::SearchIO.
> Or do I have to use Module:Bio::Index::Blast?
>
> I can index a file (see below), but I have no idea what comes next...
>
> ###How I index a file...
>
> #!/usr/bin/perl -w
>
> $ENV{BIOPERL_INDEX_TYPE} = "SDBM_File";
>
> use Bio::Index::Fasta;
>
>
> $file_name = "8_to_BLAST_two_seq_index.fasta";
> $id = "48882";
> $inx = Bio::Index::Fasta->new (-filename => $file_name . ".idx",
> -write_flag => 1);
> $inx->make_index($file_name);
>
>
> Hopefully, you can give me at least hints what to look for.
>
> A big THANKS in advance!
>
> Cheers,
>
> Tim
> _______________________________________________
> Bioperl-l mailing list
> Bioperl-l at lists.open-bio.org
> http://lists.open-bio.org/mailman/listinfo/bioperl-l
>
>
More information about the Bioperl-l
mailing list