| Summary | Included libraries | Package variables | Synopsis | Description | General documentation | Methods |
use Bio::SearchIO;
my $parser = new Bio::SearchIO(-file => 'file.psl',
-format => 'psl');
while( my $result = $parser->next_result ) {
}
| _initialize | No description | Code |
| next_result | Description | Code |
| start_element | Description | Code |
| end_element | Description | Code |
| element | Description | Code |
| characters | Description | Code |
| _mode | Description | Code |
| within_element | Description | Code |
| in_element | Description | Code |
| start_document | Description | Code |
| end_document | Description | Code |
| result_count | Description | Code |
| report_count | No description | Code |
| program_name | Description | Code |
| next_result | code | next | Top |
Title : next_result |
| start_element | code | prev | next | Top |
Title : start_element |
| end_element | code | prev | next | Top |
Title : start_element |
| element | code | prev | next | Top |
Title : element |
| characters | code | prev | next | Top |
Title : characters |
| _mode | code | prev | next | Top |
Title : _mode |
| within_element | code | prev | next | Top |
Title : within_element |
| in_element | code | prev | next | Top |
Title : in_element |
| start_document | code | prev | next | Top |
Title : start_document |
| end_document | code | prev | next | Top |
Title : end_document |
| result_count | code | prev | next | Top |
Title : result_count |
| program_name | code | prev | next | Top |
Title : program_name |
| _initialize | description | prev | next | Top |
my ($self,@args) = @_; $self->SUPER::_initialize(@args); my ($pname) = $self->_rearrange([qw(PROGRAM_NAME)], @args); $self->program_name($pname || $DefaultProgramName); $self->_eventHandler->register_factory('result', Bio::Search::Result::ResultFactory->new(-type => 'Bio::Search::Result::GenericResult')); $self->_eventHandler->register_factory('hit', Bio::Search::Hit::HitFactory->new(-type => 'Bio::Search::Hit::GenericHit')); $self->_eventHandler->register_factory('hsp', Bio::Search::HSP::HSPFactory->new(-type => 'Bio::Search::HSP::PSLHSP'));}
| next_result | description | prev | next | Top |
my ($self) = @_; my ($lastquery,$lasthit); local $/ = "\n"; local $_; while( defined ($_ = $self->_readline) ) { #clear header if exists}
if(/^psLayout/){ #pass over header lines lines
while(!/^\d+\s+\d+\s+/) { $_ = $self->_readline; } } my ( $matches,$mismatches,$rep_matches,$n_count, $q_num_insert,$q_base_insert, $t_num_insert, $t_base_insert, $strand, $q_name, $q_length, $q_start, $q_end, $t_name, $t_length,$t_start, $t_end, $block_count, $block_sizes, $q_starts, $t_starts ) = split; my $score = sprintf "%.2f", ( 100 * ( $matches + $mismatches + $rep_matches ) / $q_length );
# this is overall percent identity...
my $percent_id = sprintf "%.2f", ( 100 * ($matches + $rep_matches)/( $matches + $mismatches + $rep_matches )
);
# Remember Jim's code is 0 based
if( defined $lastquery && $lastquery ne $q_name ) { $self->end_element({'Name' => 'Hit'}); $self->end_element({'Name' => 'PSLOutput'}); $self->_pushback($_); return $self->end_document; } elsif( ! defined $lastquery ) { $self->{'_result_count'}++; $self->start_element({'Name' => 'PSLOutput'}); $self->element({'Name' => 'PSLOutput_program', 'Data' => $self->program_name}); $self->element({'Name' => 'PSLOutput_query-def', 'Data' => $q_name}); $self->element({'Name' => 'PSLOutput_query-len', 'Data' => $q_length}); $self->start_element({'Name' => 'Hit'}); $self->element({'Name' => 'Hit_id', 'Data' => $t_name}); $self->element({'Name' => 'Hit_len', 'Data' => $t_length}); $self->element({'Name' => 'Hit_score', 'Data' => $score}); } elsif( $lasthit ne $t_name ) { $self->end_element({'Name' => 'Hit'}); $self->start_element({'Name' => 'Hit'}); $self->element({'Name' => 'Hit_id', 'Data' => $t_name}); $self->element({'Name' => 'Hit_len', 'Data' => $t_length}); $self->element({'Name' => 'Hit_score', 'Data' => $score}); } my $identical = $matches + $rep_matches; $self->start_element({'Name' => 'Hsp'}); $self->element({'Name' => 'Hsp_score', 'Data' => $score}); $self->element({'Name' => 'Hsp_identity', 'Data' => $identical}); $self->element({'Name' => 'Hsp_positive', 'Data' => $identical}); $self->element({'Name' => 'Hsp_mismatches', 'Data' => $mismatches}); $self->element({'Name' => 'Hsp_gaps', 'Data' => $q_base_insert + $t_base_insert}); # query gaps are the number of target inserts and vice-versa
$self->element({'Name' => 'Hsp_querygaps', 'Data' => $t_base_insert}); $self->element({'Name' => 'Hsp_hitgaps', 'Data' => $q_base_insert}); if( $strand eq '+' ) { $self->element({'Name' => 'Hsp_query-from', 'Data' => $q_start + 1}); $self->element({'Name' => 'Hsp_query-to', 'Data' => $q_end}); } else { $self->element({'Name' => 'Hsp_query-to', 'Data' => $q_start + 1}); $self->element({'Name' => 'Hsp_query-from', 'Data' => $q_end}); } my $hsplen = $q_base_insert + $t_base_insert + abs( $t_end - $t_start) + abs( $q_end - $q_start); $self->element({'Name' => 'Hsp_hit-from', 'Data' => $t_start + 1 }); $self->element({'Name' => 'Hsp_hit-to', 'Data' => $t_end}); $self->element({'Name' => 'Hsp_align-len', 'Data' => $hsplen}); # cleanup trailing commas in some output
$block_sizes =~ s/\,$//; $q_starts =~ s/\,$//; $t_starts =~ s/\,$//; my @blocksizes = split(/,/,$block_sizes); # block sizes
my @qstarts = split(/,/,$q_starts); # starting position of each block
# in query
my @tstarts = split(/,/,$t_starts); # starting position of each block
# in target
my (@qgapblocks,@hgapblocks); for( my $i = 0; $i < $block_count; $i++) { if( $strand eq '+' ) { push @qgapblocks, [ $qstarts[$i] + 1, $blocksizes[$i]]; } else { push @qgapblocks, [ $q_length - $qstarts[$i], $blocksizes[$i]]; } push @hgapblocks, [ $tstarts[$i] + 1, $blocksizes[$i]]; } $self->element({'Name' => 'Hsp_qgapblocks', 'Data' =>\@ qgapblocks}); $self->element({'Name' => 'Hsp_hgapblocks', 'Data' =>\@ hgapblocks}); $self->end_element({'Name' => 'Hsp'}); $lastquery = $q_name; $lasthit = $t_name; } if( defined $lasthit || defined $lastquery ) { $self->end_element({'Name' => 'Hit'}); $self->end_element({'Name' => 'Result'}); return $self->end_document; }
| start_element | description | prev | next | Top |
my ($self,$data) = @_; # we currently don't care about attributes}
my $nm = $data->{'Name'}; if( my $type = $MODEMAP{$nm} ) { $self->_mode($type); if( $self->_eventHandler->will_handle($type) ) { my $func = sprintf("start_%s",lc $type); $self->_eventHandler->$func($data->{'Attributes'}); } unshift @{$self->{'_elements'}}, $type; } if($nm eq 'PSLOutput') { $self->{'_values'} = {}; $self->{'_result'}= undef; $self->{'_mode'} = ''; }
| end_element | description | prev | next | Top |
my ($self,$data) = @_; my $nm = $data->{'Name'}; my $rc; # Hsp are sort of weird, in that they end when another}
# object begins so have to detect this in end_element for now
if( my $type = $MODEMAP{$nm} ) { if( $self->_eventHandler->will_handle($type) ) { my $func = sprintf("end_%s",lc $type); $rc = $self->_eventHandler->$func($self->{'_reporttype'}, $self->{'_values'}); } shift @{$self->{'_elements'}}; } elsif( $MAPPING{$nm} ) { if ( ref($MAPPING{$nm}) =~ /hash/i ) { my $key = (keys %{$MAPPING{$nm}})[0]; $self->{'_values'}->{$key}->{$MAPPING{$nm}->{$key}} = $self->{'_last_data'}; } else { $self->{'_values'}->{$MAPPING{$nm}} = $self->{'_last_data'}; } } else { $self->warn( __PACKAGE__."::end_element: unknown nm '$nm', ignoring\n"); } $self->{'_last_data'} = ''; # remove read data if we are at
# end of an element
$self->{'_result'} = $rc if( defined $nm && defined $MODEMAP{$nm} && $MODEMAP{$nm} eq 'result' ); return $rc;
| element | description | prev | next | Top |
my ($self,$data) = @_; $self->start_element($data); $self->characters($data); $self->end_element($data);}
| characters | description | prev | next | Top |
my ($self,$data) = @_; return unless ( defined $data->{'Data'} ); if( $data->{'Data'} =~ /^\s+$/ ) { return unless $data->{'Name'} =~ /Hsp\_(midline|qseq|hseq)/; } if( $self->in_element('hsp') && $data->{'Name'} =~ /Hsp\_(qseq|hseq|midline)/ ) { $self->{'_last_hspdata'}->{$data->{'Name'}} .= $data->{'Data'}; } $self->{'_last_data'} = $data->{'Data'};}
| _mode | description | prev | next | Top |
my ($self,$value) = @_; if( defined $value) { $self->{'_mode'} = $value; } return $self->{'_mode'};}
| within_element | description | prev | next | Top |
my ($self,$name) = @_; return 0 if ( ! defined $name && ! defined $self->{'_elements'} || scalar @{$self->{'_elements'}} == 0) ; foreach ( @{$self->{'_elements'}} ) { if( $_ eq $name ) { return 1; } } return 0;}
| in_element | description | prev | next | Top |
my ($self,$name) = @_; return 0 if ! defined $self->{'_elements'}->[0]; return ( $self->{'_elements'}->[0] eq $name)}
| start_document | description | prev | next | Top |
my ($self) = @_; $self->{'_lasttype'} = ''; $self->{'_values'} = {}; $self->{'_result'}= undef; $self->{'_mode'} = ''; $self->{'_elements'} = [];}
| end_document | description | prev | next | Top |
my ($self,@args) = @_; return $self->{'_result'};}
| result_count | description | prev | next | Top |
my $self = shift; return $self->{'_result_count'};}
| report_count | description | prev | next | Top |
shift->result_count}
| program_name | description | prev | next | Top |
my $self = shift; $self->{'program_name'} = shift if @_; return $self->{'program_name'} || $DefaultProgramName;}
| FEEDBACK | Top |
| Mailing Lists | Top |
bioperl-l@bioperl.org - General discussion
http://bioperl.org/wiki/Mailing_lists - About the mailing lists
| Reporting Bugs | Top |
http://bugzilla.open-bio.org/
| AUTHOR - Jason Stajich | Top |
| APPENDIX | Top |
| new | Top |
Title : new
Usage : my $obj = new Bio::SearchIO::psl();
Function: Builds a new Bio::SearchIO::psl object
Returns : an instance of Bio::SearchIO::psl
Args :