BioPerl
view release on metacpan or search on metacpan
Bio/Matrix/IO.pm view on Meta::CPAN
rather than to the module maintainer directly. Many experienced and
reponsive experts will be able look at the problem and quickly
address it. Please include a thorough description of the problem
with code and data examples if at all possible.
=head2 Reporting Bugs
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:
https://github.com/bioperl/bioperl-live/issues
=head1 AUTHOR - Jason Stajich
Email jason-at-bioperl-dot-org
=head1 APPENDIX
The rest of the documentation details each of the object methods.
Internal methods are usually preceded with a _
=cut
# Let the code begin...
package Bio::Matrix::IO;
use strict;
use base qw(Bio::Root::IO);
=head2 new
Title : new
Usage : my $obj = Bio::Matrix::IO->new();
Function: Builds a new Bio::Matrix::IO object
Returns : an instance of Bio::Matrix::IO
Args :
=cut
sub new {
my($caller,@args) = @_;
my $class = ref($caller) || $caller;
# or do we want to call SUPER on an object if $caller is an
# object?
if( $class =~ /Bio::Matrix::IO::(\S+)/ ) {
my ($self) = $class->SUPER::new(@args);
$self->_initialize(@args);
return $self;
} else {
my %param = @args;
@param{ map { lc $_ } keys %param } = values %param; # lowercase keys
my $format = $param{'-format'} ||
$class->_guess_format( $param{'-file'} || $ARGV[0] ) ||
'scoring';
$format = "\L$format"; # normalize capitalization to lower case
# normalize capitalization
return unless( $class->_load_format_module($format) );
return "Bio::Matrix::IO::$format"->new(@args);
}
}
=head2 newFh
Title : newFh
Usage : $fh = Bio::Matrix::IO->newFh(-file=>$filename,-format=>'Format')
Function: does a new() followed by an fh()
Example : $fh = Bio::Matrix::IO->newFh(-file=>$filename,-format=>'Format')
$matrix = <$fh>; # read a matrix object
print $fh $matrix; # write a matrix object
Returns : filehandle tied to the Bio::SeqIO::Fh class
Args :
=cut
sub newFh {
my $class = shift;
return unless my $self = $class->new(@_);
return $self->fh;
}
=head2 fh
Title : fh
Usage : $obj->fh
Function: Get a filehandle type access to the matrix parser
Example : $fh = $obj->fh; # make a tied filehandle
$matrix = <$fh>; # read a matrix object
print $fh $matrix; # write a matrix object
Returns : filehandle tied to Bio::Matrix::IO class
Args : none
=cut
sub fh {
my $self = shift;
my $class = ref($self) || $self;
my $s = Symbol::gensym;
tie $$s,$class,$self;
return $s;
}
=head2 format
Title : format
Usage : $format = $obj->format()
Function: Get the matrix format
Returns : matrix format
Args : none
=cut
Bio/Matrix/IO.pm view on Meta::CPAN
=cut
sub next_matrix{
my ($self) = @_;
$self->throw_not_implemented();
}
=head2 write_matrix
Title : write_matrix
Usage : $io->write_matrix($matrix)
Function: Writes a matrix out to the data stream
Returns : none
Args : Array of Bio::Matrix::MatrixI object
- note that not all matricies can be converted to
each format, beware with mixing matrix types and output formats
=cut
sub write_matrix{
my ($self) = @_;
$self->throw_not_implemented();
}
sub _initialize {
my ($self,@args) = @_;
$self->_initialize_io(@args);
}
=head2 _load_format_module
Title : _load_format_module
Usage : *INTERNAL Matrix::IO stuff*
Function: Loads up (like use) a module at run time on demand
=cut
sub _load_format_module {
my ($self,$format) = @_;
my $module = "Bio::Matrix::IO::" . $format;
my $ok;
eval {
$ok = $self->_load_module($module);
};
if ( $@ ) {
print STDERR <<END;
$self: $format cannot be found
Exception $@
For more information about the Matrix::IO system please see the
Matrix::IO docs. This includes ways of checking for formats at
compile time, not run time
END
;
}
return $ok;
}
=head2 _guess_format
Title : _guess_format
Usage : $obj->_guess_format($filename)
Returns : guessed format of filename (lower case)
Args : filename
=cut
sub _guess_format {
my $class = shift;
return unless $_ = shift;
return 'scoring' if /BLOSUM|PAM$/i;
return 'phylip' if /\.dist$/i;
}
sub DESTROY {
my $self = shift;
$self->close();
}
sub TIEHANDLE {
my $class = shift;
return bless {'matrixio' => shift},$class;
}
sub READLINE {
my $self = shift;
return $self->{'matrixio'}->next_tree() || undef unless wantarray;
my (@list,$obj);
push @list,$obj while $obj = $self->{'treeio'}->next_tree();
return @list;
}
sub PRINT {
my $self = shift;
$self->{'matrixio'}->write_tree(@_);
}
1;
( run in 0.891 second using v1.01-cache-2.11-cpan-39bf76dae61 )