diff variant_effect_predictor/Bio/SeqIO/MultiFile.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/SeqIO/MultiFile.pm	Thu Apr 11 02:01:53 2013 -0400
@@ -0,0 +1,251 @@
+# $Id: MultiFile.pm,v 1.8 2002/10/22 07:38:42 lapp Exp $
+#
+# BioPerl module for Bio::SeqIO::MultiFile
+#
+# Cared for by Ewan Birney <birney@ebi.ac.uk>
+#
+# Copyright Ewan Birney
+#
+# You may distribute this module under the same terms as perl itself
+
+# POD documentation - main docs before the code
+
+=head1 NAME
+
+Bio::SeqIO::MultiFile - Treating a set of files as a single input stream
+
+=head1 SYNOPSIS
+
+   $seqin = Bio::SeqIO::MultiFile( '-format' => 'Fasta',
+                                   '-files'  => ['file1','file2'] );
+   while((my $seq = $seqin->next_seq)) {
+       # do something with $seq
+   }
+
+=head1 DESCRIPTION
+
+Bio::SeqIO::MultiFile provides a simple way of bundling a whole
+set of identically formatted sequence input files as a single stream.
+
+=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 one of the Bioperl mailing lists.
+Your participation is much appreciated.
+
+  bioperl-l@bioperl.org                 - General discussion
+  http://www.bioperl.org/MailList.shtml - 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 - Ewan Birney
+
+Email birney@ebi.ac.uk
+
+Describe contact details here
+
+=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::SeqIO::MultiFile;
+use strict;
+use vars qw(@ISA);
+use Bio::SeqIO;
+
+@ISA = qw(Bio::SeqIO);
+
+
+# _initialize is where the heavy stuff will happen when new is called
+
+sub _initialize {
+  my($self,@args) = @_;
+
+  $self->SUPER::_initialize(@args);
+
+  my ($file_array,$format) = $self->_rearrange([qw(
+					 FILES
+					 FORMAT
+					)],
+				     @args,
+				     );
+  if( !defined $file_array || ! ref $file_array ) {
+      $self->throw("Must have an array files for MultiFile");
+  }
+
+  if( !defined $format ) {
+      $self->throw("Must have a format for MultiFile");
+  }
+
+  $self->{'_file_array'} = [];
+
+  $self->_set_file(@$file_array);
+  $self->_format($format);
+  if( $self->_load_file() == 0 ) {
+     $self->throw("Unable even to initialise the first file");
+  }
+}
+
+=head2 next_seq
+
+ Title   : next_seq
+ Usage   :
+ Function:
+ Example :
+ Returns : 
+ Args    :
+
+
+=cut
+
+sub next_seq{
+   my ($self,@args) = @_;
+
+   my $seq = $self->_current_seqio->next_seq();
+   if( !defined $seq ) {
+       if( $self->_load_file() == 0) {
+	   return undef;
+       } else {
+	   return $self->next_seq();
+       }
+   } else {
+       return $seq;
+   }
+   
+}
+
+=head2 next_primary_seq
+
+ Title   : next_primary_seq
+ Usage   :
+ Function:
+ Example :
+ Returns : 
+ Args    :
+
+
+=cut
+
+sub next_primary_seq{
+   my ($self,@args) = @_;
+
+   my $seq = $self->_current_seqio->next_primary_seq();
+   if( !defined $seq ) {
+       if( $self->_load_file() == 0) {
+	   return undef;
+       } else {
+	   return $self->next_primary_seq();
+       }
+   } else {
+       return $seq;
+   }
+
+}
+
+=head2 _load_file
+
+ Title   : _load_file
+ Usage   :
+ Function:
+ Example :
+ Returns : 
+ Args    :
+
+
+=cut
+
+sub _load_file{
+   my ($self,@args) = @_;
+
+   my $file = shift(@{$self->{'_file_array'}});
+   if( !defined $file ) {
+       return 0;
+   }
+   my $seqio = Bio::SeqIO->new( '-format' => $self->_format(), -file => $file);
+   # should throw an exception - but if not...
+   if( !defined $seqio) {
+       $self->throw("no seqio built for $file!");
+   }
+
+   $self->_current_seqio($seqio);
+   return 1;
+}
+
+=head2 _set_file
+
+ Title   : _set_file
+ Usage   :
+ Function:
+ Example :
+ Returns : 
+ Args    :
+
+
+=cut
+
+sub _set_file{
+   my ($self,@files) = @_;
+
+   push(@{$self->{'_file_array'}},@files);
+   
+}
+
+=head2 _current_seqio
+
+ Title   : _current_seqio
+ Usage   : $obj->_current_seqio($newval)
+ Function: 
+ Example : 
+ Returns : value of _current_seqio
+ Args    : newvalue (optional)
+
+
+=cut
+
+sub _current_seqio{
+   my ($obj,$value) = @_;
+   if( defined $value) {
+      $obj->{'_current_seqio'} = $value;
+    }
+    return $obj->{'_current_seqio'};
+
+}
+
+=head2 _format
+
+ Title   : _format
+ Usage   : $obj->_format($newval)
+ Function: 
+ Example : 
+ Returns : value of _format
+ Args    : newvalue (optional)
+
+
+=cut
+
+sub _format{
+   my ($obj,$value) = @_;
+   if( defined $value) {
+      $obj->{'_format'} = $value;
+    }
+    return $obj->{'_format'};
+
+}
+
+1;