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 )