Raw content of Bio::EnsEMBL::Analysis::Runnable::Finished::EPCR
=head1 NAME
EPCR.pm
=head1 SYNOPSIS
my $runnable = Bio::EnsEMBL::Analysis::Runnable::Finished::EPCR->new(
-query => $slice,
-program => $self->analysis->dbfile,
%{$self->parameters_hash};
);
$runnable->run;
my @marker_features = @{$runnable->output};
=head1 DESCRIPTION
The Finished version of EPCR
=head1 CONTACT
Post general queries to B
=cut
package Bio::EnsEMBL::Analysis::Runnable::Finished::EPCR;
use strict;
use warnings;
use Bio::EnsEMBL::Analysis::Runnable::EPCR;
use Bio::EnsEMBL::Utils::Exception qw(throw warning);
use vars qw(@ISA);
@ISA = qw(Bio::EnsEMBL::Analysis::Runnable::EPCR);
sub parse_results{
my ($self, $results) = @_;
if(!$results){
$results = $self->resultsfile;
}
if(!-e $results){
throw("Can't open ".$results." as it doesn't exist");
}
my $ff = $self->feature_factory;
my @output;
my $hash;
my $name;
## Parse output file and store data in hash table
open(FH, $results) or throw("FAILED to open ".$results);
while(){
chomp;
#chromosome:NCBI34:1:1:920598:1 615132..615340 121028
#chromosome:NCBI34:1:1:920598:1 622477..622687 121028
my ($start, $end, $dbid);
($name, $start, $end, $dbid) = $_ =~ m!(\S+)\s+(\d+)\.\.(\d+)\s+(\w+)!;
$hash->{$dbid} = [] unless $hash->{$dbid};
# store markers in hash table
push @{$hash->{$dbid}}, [$start, $end];
}
## Filter data to dismiss nested marker features
DBID:foreach my $dbid (keys %$hash) {
# sort the markers by coord start
my @markers = sort {$a->[0] <=> $b->[0]} @{$hash->{$dbid}};
M1:foreach my $m1 (@markers) {
next unless $m1;
my $start1 = $m1->[0];
my $end1 = $m1->[1];
#print "M1 $start1 -> $end1 dbid $dbid\n";
M2:for(my $i = 0;$i[0];
my $end2 = $m2->[1];
# ignore if marker 1 & 2 identical
next M2 if($start1==$start2 && $end1==$end2);
# stop after marker 1 end
next M1 if($end1<= $start2);
# delete marker 2 if nested in marker 1
if($start1<=$start2 && $end1>=$end2){
#print "\tM2 $start2 -> $end2 DELETE\n";
delete $markers[$i];
}
}
}
$hash->{$dbid} = \@markers;
}
## Create marker feature objects
foreach my $dbid (keys %$hash) {
my $m = $ff->create_marker($dbid);
$m->adaptor($self->analysis->adaptor);
foreach my $coord (@{$hash->{$dbid}}) {
next unless $coord;
my $start = $coord->[0];
my $end = $coord->[1];
my $mf = $ff->create_marker_feature($start, $end, 0, $m, $name,$self->query);
push(@output, $mf);
}
$self->hit_list($dbid);
}
$self->output(\@output);
close(FH) or throw("FAILED to close ".$results);
}
1;