BioPerl
view release on metacpan or search on metacpan
Bio/Matrix/PSM/IO.pm view on Meta::CPAN
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
the bugs and their resolution. Bug reports can be submitted via the
web:
https://github.com/bioperl/bioperl-live/issues
=head1 AUTHOR - Stefan Kirov
Email skirov@utk.edu
=head1 APPENDIX
=cut
# Let the code begin...
package Bio::Matrix::PSM::IO;
use vars qw(@PSMFORMATS);
use strict;
use base qw(Bio::Root::IO);
@PSMFORMATS = qw(meme transfac mast psiblast masta);
=head2 new
Title : new
Usage : my $psmIO = Bio::Matrix::PSM::IO->new(-format=>'meme',
-file=>$file);
Function: Associates a file with the appropriate parser
Throws : Throws if the file passed is in HTML format or
if some criteria for the file
format are not met. See L<Bio::Matrix::PSM::IO::meme> and
L<Bio::Matrix::PSM::IO::transfac> for more details.
Example :
Returns : psm object, associated with a file with matrix file
Args : hash
=cut
sub new {
my($caller,@args) = @_;
my $class = ref($caller) || $caller;
my $self;
# or do we want to call SUPER on an object if $caller is an
# object?
if( $class =~ /Bio::Matrix::PSM::IO(\S+)/ ) {
$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';
$class->throw("$format format unrecognized or an argument error occurred\n.") if (!grep(/$format/,@Bio::Matrix::PSM::IO::PSMFORMATS));
$format = "\L$format"; # normalize capitalization to lower case
# normalize capitalization
return unless( $class->_load_format_module($format) );
return "Bio::Matrix::PSM::IO::$format"->new(@args);
}
}
=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
Returns : filehandle tied to Bio::Matrix::PSM::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 _load_format_module
Title : _load_format_module
Usage : *INTERNAL Matrix::PSM::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::PSM::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::PSM::IO system please see the
Matrix::PSM::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 'meme' if /.meme$|meme.html$/i;
return 'transfac' if /\.dat$/i;
return 'mast' if /^mast\.|\.mast.html$|.mast$/i;
}
=head2 next_psm
Title : next_psm
Usage : my $psm=$psmIO->next_psm();
Function: Reads the next PSM from the input file, associated with this object
Throws : Throws if there ara format violations in the input file (checking is not
very strict with all drivers).
Example :
Returns : Bio::Matrix::PSM::Psm object
Args : none
=cut
sub next_psm {
my $self = shift;
$self->throw_not_implemented();
}
=head2 _parseMatrix
Title : _parseMatrix
Usage :
Function: Parses the next site matrix information in the meme file
Throws :
Example : Internal stuff
Returns : hash as for constructing a SiteMatrix object (see SiteMatrixI)
Args : string
=cut
sub _parseMatrix {
my $self = shift;
$self->throw_not_implemented();
}
=head2 _parseInstance
Title : _parseInstance
Usage :
Function: Parses the next sites instances from the meme file
Throws :
Example : Internal stuff
Returns : Bio::Matrix::PSM::SiteMatrix object
Args : array references
=cut
sub _parseInstance {
my $self = shift;
$self->throw_not_implemented();
}
=head2 _parse_coordinates
( run in 1.531 second using v1.01-cache-2.11-cpan-39bf76dae61 )