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);
$result->hit_factory($self->factory('hit'));
$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) {
$hit = $self->factory('hit')->create_object(%{$hit});
$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} || $hit->{-hsps}->[0]->{-score};
$add_hit = 0 unless $hit_score >= $self->{'_min_score'};
}
if($self->{'_confirm_bits'}) {
my $hit_bits = $hit->{-bits} || $hit->{-hsps}->[0]->{-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;
}
}
$self->{'_hitcount'}++;} |
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'} = [];
$self->{'_hitcount'} = 0;
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'};
$args{'-hit_factory'} = $self->factory('hit');
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/wiki/Mailing_lists - 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 the
web:
http://bugzilla.open-bio.org/
| AUTHOR - Steve Chervitz | Top |
Email sac-at-bioperl.org
The rest of the documentation details each of the object methods.
Internal methods are usually preceded with a _