Raw content of Bio::EnsEMBL::Analysis::Tools::Pmatch::MergedHit
# holds a MergedHit - produced by munging together CoordinatePairs
# MergedHit knows which contig and protein it is pairing, strand, overall
# coverage and details of component CoordinatePairs
package Bio::EnsEMBL::Analysis::Tools::Pmatch::MergedHit;
use Bio::EnsEMBL::Utils::Exception qw(verbose throw warning info);
use Bio::EnsEMBL::Utils::Argument qw( rearrange );
@ISA = qw();
=head2 new
Title : new
Usage :
Function: constructor
Example :
Returns :
Args :
=cut
sub new {
my ($class, @args) = @_;
my $self = bless {}, $class;
my ($query, $target, $strand,$coverage) = rearrange(['QUERY',
'TARGET',
'STRAND',
'COVERAGE'],@args);
$self->throw("No query") unless defined $query;
$self->query($query);
$self->throw("No target") unless defined $target;
$self->target($target);
$self->throw("No strand") unless defined $strand;
$self->strand($strand);
$self->throw("No coverage") unless defined $coverage;
$self->coverage($coverage);
$self->{'_coord_pairs'} = [];
return $self;
}
=head2 query
Title : query
Usage :
Function: get/set for query (fpccontig name)
Example :
Returns :
Args :
=cut
sub query {
my ($self,$arg) = @_;
if ($arg) {
$self->{'query'} = $arg;
}
return $self->{'query'};
}
=head2 target
Title : target
Usage :
Function: get/set for target (protein name)
Example :
Returns :
Args :
=cut
sub target {
my ($self,$arg) = @_;
if ($arg) {
$self->{'target'} = $arg;
}
return $self->{'target'};
}
=head2 coverage
Title : coverage
Usage :
Function: get/set for coverage (% of target covered by this hit
Example :
Returns :
Args :
=cut
sub coverage {
my ($self,$arg) = @_;
if ($arg) {
#if($arg < 0 || $arg > 100){
# throw("coverage is not between 0 and 100");
#}
$self->{'coverage'} = $arg;
}
return $self->{'coverage'};
}
=head2 strand
Title : strand
Usage :
Function: get/set for (query) strand
Example :
Returns :
Args :
=cut
sub strand {
my ($self,$arg) = @_;
if ($arg) {
$self->{'strand'} = $arg;
}
return $self->{'strand'};
}
=head2 add_CoordPair
Title : add_CoordPair
Usage :
Function: adds a CoordPair to the supporting data for this MergedHit
Example :
Returns :
Args :
=cut
sub add_CoordPair {
my ($self,$pair) = @_;
$self->throw('No coord pair') unless defined $pair;
$self->throw('$pair is not a Bio::EnsEMBL::Analysis::Tools::Pmatch::CoordPair') unless $pair->isa("Bio::EnsEMBL::Analysis::Tools::Pmatch::CoordPair");
push(@{$self->{_coord_pairs}},$pair);
# need to do some sorting?
if ($self->strand == 1) {
@{$self->{_coord_pairs}} = sort {$a->qstart <=> $b->qstart} @{$self->{_coord_pairs}};
}
else {
@{$self->{_coord_pairs}} = sort {$b->qstart <=> $a->qstart} @{$self->{_coord_pairs}};
}
$self->tstart(@{$self->{_coord_pairs}}[0]->tstart);
$self->qstart(@{$self->{_coord_pairs}}[0]->qstart);
$self->tend(@{$self->{_coord_pairs}}[scalar(@{$self->{_coord_pairs}})-1]->tend);
$self->qend(@{$self->{_coord_pairs}}[scalar(@{$self->{_coord_pairs}})-1]->qend);
}
=head2 subsume_MergedHit
Title : subsume_MergedHit
Usage :
Function: Incorporate all the pairs from another MergedHit into this one
Example :
Returns :
Args :
=cut
sub subsume_MergedHit {
my ($self,$hit) = @_;
$self->throw('No hit') unless defined $hit;
$self->throw('$hit is not a Bio::EnsEMBL::Analysis::Tools::Pmatch::MergedHit') unless $hit->isa("Bio::EnsEMBL::Analysis::Tools::Pmatch::MergedHit");
push(@{$self->{_coord_pairs}},$hit->each_CoordPair);
# need to do some sorting?
if ($self->strand == 1) {
@{$self->{_coord_pairs}} = sort {$a->qstart <=> $b->qstart} @{$self->{_coord_pairs}};
}
else {
@{$self->{_coord_pairs}} = sort {$b->qstart <=> $a->qstart} @{$self->{_coord_pairs}};
}
$self->tstart(@{$self->{_coord_pairs}}[0]->tstart);
$self->qstart(@{$self->{_coord_pairs}}[0]->qstart);
$self->tend(@{$self->{_coord_pairs}}[scalar(@{$self->{_coord_pairs}})-1]->tend);
$self->qend(@{$self->{_coord_pairs}}[scalar(@{$self->{_coord_pairs}})-1]->qend);
}
=head2 each_CoordPair
Title : each_CoordPair
Usage :
Function: returns the CoordPairs contibuting to this MergedHit
Example :
Returns :
Args :
=cut
sub each_CoordPair {
my ($self) = @_;
# sorted by qstart, based on strand
return @{$self->{_coord_pairs}};
}
=head2 tstart
Title : tstart
Usage :
Function: returns overall start of hit in protein coords
Example :
Returns :
Args :
=cut
sub tstart {
my ($self,$arg) = @_;
if ($arg) {
$self->{'tstart'} = $arg;
}
return $self->{'tstart'};
}
=head2 tend
Title : tend
Usage :
Function: returns overall end of hit in protein coords
Example :
Returns :
Args :
=cut
sub tend {
my ($self,$arg) = @_;
if ($arg) {
$self->{'tend'} = $arg;
}
return $self->{'tend'};
}
=head2 qstart
Title : qstart
Usage :
Function: returns overall start of hit in fpc contig coords
Example :
Returns :
Args :
=cut
sub qstart {
my ($self,$arg) = @_;
if ($arg) {
$self->{'qstart'} = $arg;
}
return $self->{'qstart'};
}
=head2 qend
Title : qend
Usage :
Function: returns overall end of hit in fpc contig coords
Example :
Returns :
Args :
=cut
sub qend {
my ($self,$arg) = @_;
if ($arg) {
$self->{'qend'} = $arg;
}
return $self->{'qend'};
}
1;