Bio::SearchIO
IteratedSearchResultEventBuilder
Summary
Bio::SearchIO::IteratedSearchResultEventBuilder - Event Handler for
SearchIO events.
Package variables
No package variables defined.
Included modules
Inherit
Synopsis
# Do not use this object directly, this object is part of the SearchIO
# event based parsing system.
Description
This object handles Search Events generated by the SearchIO classes
and build appropriate Bio::Search::* objects from them.
Methods
Methods description
Title : new
Usage : my $obj = new Bio::SearchIO::IteratedSearchResultEventBuilder();
Function: Builds a new Bio::SearchIO::IteratedSearchResultEventBuilder object
Returns : Bio::SearchIO::IteratedSearchResultEventBuilder
Args : -hsp_factory => Bio::Factory::ObjectFactoryI
-hit_factory => Bio::Factory::ObjectFactoryI
-result_factory => Bio::Factory::ObjectFactoryI
-iteration_factory => Bio::Factory::ObjectFactoryI
-inclusion_threshold => e-value threshold for inclusion in the
PSI-BLAST score matrix model (blastpgp)
-signif => float or scientific notation number to be used
as a P- or Expect value cutoff
-score => integer or scientific notation number to be used
as a blast score value cutoff
-bits => integer or scientific notation number to be used
as a bit score value cutoff
-hit_filter => reference to a function to be used for
filtering hits based on arbitrary criteria.
See Bio::SearchIO::SearchResultEventBuilder for more information |
Title : will_handle
Usage : if( $handler->will_handle($event_type) ) { ... }
Function: Tests if this event builder knows how to process a specific event
Returns : boolean
Args : event type name |
Title : start_result
Usage : $handler->start_result($resulttype)
Function: Begins a result event cycle
Returns : none
Args : Type of Report |
Title : end_result
Usage : my @results = $parser->end_result
Function: Finishes a result handler cycle
Returns : A Bio::Search::Result::ResultI
Args : none |
Title : start_iteration
Usage : $handler->start_iteration()
Function: Starts an Iteration event cycle
Returns : none
Args : type of event and associated hashref |
Title : end_iteration
Usage : $handler->end_iteration()
Function: Ends an Iteration event cycle
Returns : Bio::Search::Iteration object
Args : type of event and associated hashref |
Usage : $obj->max_significance();
Purpose : Set/Get the P or Expect value used as significance screening cutoff.
This is the value of the -signif parameter supplied to new().
Hits with P or E-value above this are skipped.
Returns : Scientific notation number with this format: 1.0e-05.
Argument : Number (sci notation, float, integer) (when setting)
Throws : Bio::Root::BadParameter exception if the supplied argument is
: not a valid number.
Comments : Screening of significant hits uses the data provided on the
: description line. For NCBI BLAST1 and WU-BLAST, this data
: is P-value. for NCBI BLAST2 it is an Expect value. |
Usage : $obj->min_score();
Purpose : Gets the Blast score used as screening cutoff.
This is the value of the -score parameter supplied to new().
Hits with scores below this are skipped.
Returns : Integer (or undef if not set)
Argument : Integer (when setting)
Throws : Bio::Root::BadParameter exception if the supplied argument is
: not a valid number.
Comments : Screening of significant hits uses the data provided on the
: description line. |
Usage : $obj->min_bits();
Purpose : Gets the Blast bit score used as screening cutoff.
This is the value of the -bits parameter supplied to new().
Hits with bits score below this are skipped.
Returns : Integer (or undef if not set)
Argument : Integer (when setting)
Throws : Bio::Root::BadParameter exception if the supplied argument is
: not a valid number.
Comments : Screening of significant hits uses the data provided on the
: description line. |
Usage : $obj->hit_filter();
Purpose : Set/Get a function reference used for filtering out hits.
This is the value of the -hit_filter parameter supplied to new().
Hits that fail to pass the filter are skipped.
Returns : Function ref (or undef if not set)
Argument : Function ref (when setting)
Throws : Bio::Root::BadParameter exception if the supplied argument is
: not a function reference. |
Methods code
sub new
{ my ($class,@args) = @_;
my $self = $class->SUPER::new(@args);
my ($hitF, $resultF, $hspF, $iterationF) =
$self->_rearrange([qw(
HIT_FACTORY
RESULT_FACTORY
HSP_FACTORY
ITERATION_FACTORY
)],@args);
$self->_init_parse_params(@args);
$self->register_factory('result', $resultF ||
Bio::Factory::ObjectFactory->new(
-type => 'Bio::Search::Result::BlastResult',
-interface => 'Bio::Search::Result::ResultI'));
$self->register_factory('hit', $hitF ||
Bio::Factory::ObjectFactory->new(
-type => 'Bio::Search::Hit::BlastHit',
-interface => 'Bio::Search::Hit::HitI'));
$self->register_factory('hsp', $hspF ||
Bio::Factory::ObjectFactory->new(
-type => 'Bio::Search::HSP::GenericHSP',
-interface => 'Bio::Search::HSP::HSPI'));
$self->register_factory('iteration', $iterationF ||
Bio::Factory::ObjectFactory->new(
-type => 'Bio::Search::Iteration::GenericIteration',
-interface => 'Bio::Search::Iteration::IterationI'));
return $self;} |
sub _init_parse_params
{
my ($self, @args) = @_;
my($ithresh, $signif, $score, $bits, $hit_filter, $filt_func) =
$self->_rearrange([qw(INCLUSION_THRESHOLD
SIGNIF SCORE BITS HIT_FILTER FILT_FUNC
)], @args);
$self->inclusion_threshold( defined($ithresh) ? $ithresh : $DEFAULT_INCLUSION_THRESHOLD);
my $hit_filt = $hit_filter || $filt_func;
defined $hit_filter && $self->hit_filter($hit_filt);
defined $signif && $self->max_significance($signif);
defined $score && $self->min_score($score);
defined $bits && $self->min_bits($bits);} |
sub will_handle
{ my ($self,$type) = @_;
return ( $type eq 'hsp' || $type eq 'hit' || $type eq 'result' || $type eq 'iteration' ||
$type eq 'newhits' || $type eq 'oldhits' ); } |
sub start_result
{ my $self = shift;
$self->SUPER::start_result(@_);
$self->{'_iterations'} = [];
$self->{'_iteration_count'} = 0;
$self->{'_old_hit_names'} = undef;
$self->{'_hit_names_below'} = undef;
return; } |
sub end_result
{ my ($self,$type,$data) = @_;
if( defined $data->{'runid'} &&
$data->{'runid'} !~ /^\s+$/ ) {
if( $data->{'runid'} !~ /^lcl\|/) {
$data->{"RESULT-query_name"}= $data->{'runid'};
} else {
($data->{"RESULT-query_name"},$data->{"RESULT-query_description"}) =
split(/\s+/,$data->{"RESULT-query_description"},2);
}
if( my @a = split(/\|/,$data->{'RESULT-query_name'}) ) {
my $acc = pop @a ; $acc = pop @a if( ! defined $acc || $acc =~ /^\s+$/);
$data->{"RESULT-query_accession"}= $acc;
}
delete $data->{'runid'};
}
my %args = map { my $v = $data->{$_}; s/RESULT//; ($_ => $v); }
grep { /^RESULT/ } keys %{$data};
$args{'-algorithm'} = uc( $args{'-algorithm_name'} ||
$data->{'RESULT-algorithm_name'} || $type);
$args{'-iterations'} = $self->{'_iterations'};
my $result = $self->factory('result')->create_object(%args);
$self->{'_iterations'} = [];
return $result;} |
sub _add_hit
{ my ($self, $hit) = @_;
my $hit_name = uc($hit->name);
my $hit_signif = $hit->significance;
my $ithresh = $self->{'_inclusion_threshold'};
my $add_hit = 1;
my $hit_filter = $self->{'_hit_filter'};
if($hit_filter) {
$add_hit = 0 unless &$hit_filter($hit);
} else {
if($self->{'_confirm_significance'}) {
$add_hit = 0 unless $hit_signif <= $self->{'_max_significance'};
}
if($self->{'_confirm_score'}) {
my $hit_score = $hit->score;
$add_hit = 0 unless $hit_score >= $self->{'_min_score'};
}
if($self->{'_confirm_bits'}) {
my $hit_bits = $hit->bits;
$add_hit = 0 unless $hit_bits >= $self->{'_min_bits'};
}
}
$add_hit && $self->_store_hit($hit, $hit_name, $hit_signif);
$self->{'_old_hit_names'}->{$hit_name}++;
$self->{'_hit_names_below'}->{$hit_name}++ if $hit_signif <= $ithresh;} |
sub _store_hit
{ my ($self, $hit, $hit_name, $hit_signif) = @_;
my $ithresh = $self->{'_inclusion_threshold'};
if (exists $self->{'_old_hit_names'}->{$hit_name}) {
if (exists $self->{'_hit_names_below'}->{$hit_name}) {
push @{$self->{'_oldhits_below'}}, $hit;
} elsif ($hit_signif <= $ithresh) {
push @{$self->{'_oldhits_newly_below'}}, $hit;
} else {
push @{$self->{'_oldhits_not_below'}}, $hit;
}
} else {
if ($hit_signif <= $ithresh) {
push @{$self->{'_newhits_below'}}, $hit;
} else {
push @{$self->{'_newhits_not_below'}}, $hit;
}
}} |
sub start_iteration
{ my ($self,$type) = @_;
$self->{'_iteration_count'}++;
$self->{'_newhits_below'} = [];
$self->{'_newhits_not_below'} = [];
$self->{'_oldhits_below'} = [];
$self->{'_oldhits_newly_below'} = [];
$self->{'_oldhits_not_below'} = [];
return;} |
sub end_iteration
{ my ($self,$type,$data) = @_;
my %args = map { my $v = $data->{$_}; s/ITERATION//; ($_ => $v); }
grep { /^ITERATION/ } keys %{$data};
$args{'-number'} = $self->{'_iteration_count'};
$args{'-oldhits_below'} = $self->{'_oldhits_below'};
$args{'-oldhits_newly_below'} = $self->{'_oldhits_newly_below'};
$args{'-oldhits_not_below'} = $self->{'_oldhits_not_below'};
$args{'-newhits_below'} = $self->{'_newhits_below'};
$args{'-newhits_not_below'} = $self->{'_newhits_not_below'};
my $it = $self->factory('iteration')->create_object(%args);
push @{$self->{'_iterations'}}, $it;
return $it;} |
sub max_significance
{ my $self = shift;
if (@_) {
my $sig = shift;
if( $sig =~ /[^\d.e-]/ or $sig <= 0) {
$self->throw(-class => 'Bio::Root::BadParameter',
-text => "Invalid significance value: $sig\n".
"Must be a number greater than zero.",
-value=>$sig);
}
$self->{'_confirm_significance'} = 1;
$self->{'_max_significance'} = $sig;
}
sprintf "%.1e", $self->{'_max_significance'};} |
sub signif
{ shift->max_significance } |
sub min_score
{ my $self = shift;
if (@_) {
my $score = shift;
if( $score =~ /[^\de+]/ or $score <= 0) {
$self->throw(-class => 'Bio::Root::BadParameter',
-text => "Invalid score value: $score\n".
"Must be an integer greater than zero.",
-value => $score);
}
$self->{'_confirm_score'} = 1;
$self->{'_min_score'} = $score;
}
return $self->{'_min_score'};} |
sub min_bits
{ my $self = shift;
if (@_) {
my $bits = shift;
if( $bits =~ /[^\de+]/ or $bits <= 0) {
$self->throw(-class => 'Bio::Root::BadParameter',
-text => "Invalid bits value: $bits\n".
"Must be an integer greater than zero.",
-value => $bits);
}
$self->{'_confirm_bits'} = 1;
$self->{'_min_bits'} = $bits;
}
return $self->{'_min_bits'};} |
sub hit_filter
{ my $self = shift;
if (@_) {
my $func = shift;
if(not ref $func eq 'CODE') {
$self->throw(-class=>'Bio::Root::BadParameter',
-text=>"Not a function reference: $func\n".
"The -hit_filter parameter must be function reference.",
-value=> $func);
}
$self->{'_hit_filter'} = $func;
}
return $self->{'_hit_filter'};} |
sub inclusion_threshold
{ my $self = shift;
return $self->{'_inclusion_threshold'} = shift if @_;
return $self->{'_inclusion_threshold'};} |
General documentation
User feedback is an integral part of the evolution of this and other
Bioperl modules. Send your comments and suggestions preferably to
the Bioperl mailing list. Your participation is much appreciated.
bioperl-l@bioperl.org - General discussion
http://bioperl.org/MailList.shtml - About the mailing lists
Report bugs to the Bioperl bug tracking system to help us keep track
of the bugs and their resolution. Bug reports can be submitted via
email or the web:
bioperl-bugs@bioperl.org
http://bugzilla.bioperl.org/
| AUTHOR - Steve Chervitz | Top |
The rest of the documentation details each of the object methods.
Internal methods are usually preceded with a _