-
Notifications
You must be signed in to change notification settings - Fork 0
/
filterBlastReport.pl
52 lines (44 loc) · 1.58 KB
/
filterBlastReport.pl
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
#!/usr/bin/perl -w
use strict;
use Bio::Seq;
use Bio::SeqIO;
use Bio::SearchIO;
use Bio::SearchIO::Writer::TextResultWriter;
use Getopt::ArgParse;
use File::Basename;
# This script reads a BLAST results file as input and filters out query
# sequences with no hits to the database.
my $argPr = Getopt::ArgParse->new_parser(
help => 'remove entries with no hits from BLAST output file',
description => 'This script reads a BLAST results file as input\
and filters out query sequences with no hits to the database. \
The results are written in plain text format to output file.'
);
# Add arguments to capture input FASTA file
$argPr->add_arg('--in','-i',required=>1,help=>'input BLAST results file');
# Read the BLAST results file
$\="\n";
my $argArr = $argPr->parse_args();
my $inFile = $argArr->in;
# Determine output file to write filtered results to
my ($fileName,$dirPath,$extn)=fileparse($inFile,qr/\.[^.]*/);
my $outFile = "${dirPath}${fileName}_filtered.txt";
# Check for input file existence, quit otherwise
unless (-e $inFile)
{
print "Input BLAST file does not exist!";
exit(1);
}
print "Writing filtered BLAST results to $outFile";
# Create BioPerl objects to read BLAST results file and an outputformatter
# object to format output before writing it to output file
my $blast = Bio::SearchIO->new( -file => "$inFile", -format => 'blast');
my $writer = new Bio::SearchIO::Writer::TextResultWriter();
my $filt = new Bio::SearchIO(-file => ">$outFile", -writer => $writer);
while (my $result = $blast->next_result())
{
if($result->num_hits() > 0)
{
$filt->write_report($result);
}
}