Mercurial > repos > mahtabm > ensembl
diff variant_effect_predictor/Bio/Assembly/IO.pm @ 0:1f6dce3d34e0
Uploaded
author | mahtabm |
---|---|
date | Thu, 11 Apr 2013 02:01:53 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/variant_effect_predictor/Bio/Assembly/IO.pm Thu Apr 11 02:01:53 2013 -0400 @@ -0,0 +1,229 @@ +# $Id: IO.pm,v 1.1 2002/11/04 11:47:49 heikki Exp $ +# +# BioPerl module for Bio::Assembly::IO +# +# based on the Bio::SeqIO module +# by Ewan Birney <birney@sanger.ac.uk> +# and Lincoln Stein <lstein@cshl.org> +# +# Copyright Robson Francisco de Souza +# +# You may distribute this module under the same terms as perl itself +# +# _history + +# POD documentation - main docs before the code + +=head1 NAME + +Bio::Assembly::IO - Handler for Assembly::IO Formats + +=head1 SYNOPSIS + + use Bio::Assembly::IO; + + $in = Bio::Assembly::IO->new(-file=>"<inputfilename", + -format=>'phrap'); + $out = Bio::Assembly::IO->new(-file=>">outputfilename", + -format=>'phrap'); + + while ( my $seq = $in->next_seq() ) { + $out->write_seq($seq); + } + +=head1 DESCRIPTION + +Bio::Assembly::IO is a handler module for formats in the Assembly::IO set +(e.g. Bio::Assembly::IO::phrap). + +=head1 FEEDBACK + +=head2 Mailing Lists + +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 lists Your participation is much appreciated. + + bioperl-l@bioperl.org - General discussion + http://bio.perl.org/MailList.html - About the mailing lists + +=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 email +or the web: + + bioperl-bugs@bio.perl.org + http://bugzilla.bioperl.org/ + +=head1 AUTHOR + +Robson Francisco de Souza + +E-mail: rfsouza@citri.iq.usp.br + +=head1 CONTRIBUTORS + +# + +=head1 APPENDIX + +The rest of the documentation details each of the object +methods. Internal methods are usually preceded with a _ + +=cut + +package Bio::Assembly::IO; + +use Bio::Root::Root; +use Bio::Root::IO; + +use strict; +use vars qw(@ISA); + +@ISA = qw(Bio::Root::Root Bio::Root::IO); + +=head2 new + + Title : new + Usage : Bio::Assembly::IO->new(-file =>$filename,-format=>'format') + Function: Returns a new assembly stream + Returns : A Bio::Assembly::IO::Handler initialised + with the appropriate format + Args : -file => $filename + -format => format + +=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::Assembly::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 + + $class->throw("Need at least a file name to proceed!") + unless (defined $param{'-file'} || defined $ARGV[0]); + + my $format = $param{'-format'} || + $class->_guess_format( $param{-file} || $ARGV[0] ); + $format = "\L$format"; # normalize capitalization to lower case + + # normalize capitalization + return undef unless( $class->_load_format_module($format) ); + return "Bio::Assembly::IO::$format"->new(@args); + } +} + +# _initialize is chained for all SeqIO classes + +sub _initialize { + my($self, @args) = @_; + # initialize the IO part + $self->_initialize_io(@args); +} + +=head2 next_assembly + + Title : next_assembly + Usage : $cluster = $stream->next_assembly() + Function: Reads the next assembly object from the stream and returns it. + Returns : a Bio::Assembly::ScaffoldI compliant object + Args : none + +=cut + +sub next_assembly { + my ($self, $seq) = @_; + $self->throw("Sorry, you cannot read from a generic Bio::Assembly::IO object."); +} + + +=head2 _load_format_module + + Title : _load_format_module + Usage : *INTERNAL Assembly::IO stuff* + Function: Loads up (like use) a module at run time on demand + Example : + Returns : + Args : + +=cut + +sub _load_format_module { + my ($self,$format) = @_; + my $module = "Bio::Assembly::IO::" . $format; + my $ok; + + eval { + $ok = $self->_load_module($module); + }; + if ( $@ ) { + print STDERR <<END; +$self: could not load $format - for more details on supported formats please see the Assembly::IO docs +Exception $@ +END + ; + } + return $ok; +} + +=head2 _guess_format + + Title : _guess_format + Usage : $obj->_guess_format($filename) + Function: guess format based on file suffix + Example : + Returns : guessed format of filename (lower case) + Args : + Notes : formats that _filehandle() will guess includes + only phrap, by now. + +=cut + +sub _guess_format { + my $class = shift; + my $arg = shift; + + return unless defined($arg); + return 'ace' if ($arg =~ /\.ace\.\d+$/i); + return 'phrap' if ($arg =~ /\.phrap\.out$/i); +} + +sub DESTROY { + my $self = shift; + + $self->close(); +} + +# I need some direction on these!! The module works so I haven't fiddled with them! +# Me neither! (rfsouza) + +sub TIEHANDLE { + my ($class,$val) = @_; + return bless {'seqio' => $val}, $class; +} + +sub READLINE { + my $self = shift; + return $self->{'seqio'}->next_seq() unless wantarray; + my (@list, $obj); + push @list, $obj while $obj = $self->{'seqio'}->next_seq(); + return @list; +} + +sub PRINT { + my $self = shift; + $self->{'seqio'}->write_seq(@_); +} + +1; +