Raw content of Bio::EnsEMBL::Compara::Filter::BestHit
package Bio::EnsEMBL::Compara::Filter::BestHit;
use vars qw(@ISA);
use strict;
=head2 filter
Title : filter
Usage : filter(\@)
Function: Clean the Array of Bio::EnsEMBL::DnaDnaAlignFeature in 2 steps,
First, sort FeaturePairs by score descending, identity % descending
Second, hits are kept if they do not exactly overlap the subject sequence of previous strored,
higher scored hits.
Returns : Array reference of Bio::EnsEMBL::DnaDnaAlignFeature
Args : Array reference of Bio::EnsEMBL::DnaDnaAlignFeature
=cut
sub filter {
my ($self,$DnaDnaAlignFeatures) = @_;
@{$DnaDnaAlignFeatures} = sort {$b->score <=> $a->score ||
$b->percent_id <=> $a->percent_id} @{$DnaDnaAlignFeatures};
my @DnaDnaAlignFeatures_filtered;
foreach my $fp (@{$DnaDnaAlignFeatures}) {
if ($fp->strand < 0) {
$fp->reverse_complement;
}
my $add_fp = 1;
foreach my $feature_filtered (@DnaDnaAlignFeatures_filtered) {
my ($start,$end) = ($feature_filtered->start,$feature_filtered->end);
if ($fp->start == $start && $fp->end == $end) {
$add_fp = 0;
last;
}
}
push @DnaDnaAlignFeatures_filtered, $fp if ($add_fp);
}
return \@DnaDnaAlignFeatures_filtered;
}
1;