-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathparseBlat.pl
executable file
·80 lines (71 loc) · 1.74 KB
/
parseBlat.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
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
#!/usr/bin/env perl
###############################
# parseBlat.pl
#
# parses Blat result files (.psl) and outputs a format usable by ucsc browser
# 12/2005
# #############################
use Bio::SearchIO;
my $parser = new Bio::SearchIO(-file => $ARGV[0], -format => 'psl');
my $check = get_file_data($ARGV[0]);
#if the file is empty, exit. Else, parse.
if($check =~ /-$/)
{
}
else
{
$counter=0;
while( my $result = $parser->next_result )
{
$query_id = $result->query_name();
if(!$result)
{
last;
}
while( my $hit = $result->next_hit)
{
$chromosome = $hit->name();
while( my $hsp = $hit->next_hsp)
{
#while(my ($k,$v) = each %$hsp)
#{
# print "key:$k,value:$v.\n";
#print "primary tag:$primary_tag\n";
# }
$score = $hsp->score();
$strand = $hsp->strand();
$start = $hsp->start('hit');
$end = $hsp->end('hit');
$mod_score = $score*10;
$mismatches = $hsp->mismatches();
$length = $hsp->length();
$strand =~ s/\-1/-/g;
$strand =~ s/^1/+/g;
$chromosome =~ s/omosome//g;
if($score == 100 and $mismatches == 0)
{
print "$chromosome\t$start\t$end\t$query_id\t$score\t$strand\n";
}
}
}
}
}
######################################################
# subroutine get_file_data
# arguments: filename
# purpose: gets data from file given filename;
# returns file contents
######################################################
sub get_file_data
{
my($filename) = @_;
my @filedata = ();
unless( open(GET_FILE_DATA, $filename))
{
print STDERR "Cannot open file \"$filename\": $!\n\n";
exit;
}
@filedata = <GET_FILE_DATA>;
close GET_FILE_DATA;
return join('',@filedata);
}