1
# $Id: largefasta.pm,v 1.10 2002/02/18 17:17:25 bosborne Exp $
1
# $Id: largefasta.pm,v 1.18 2002/12/27 19:42:32 birney Exp $
2
2
# BioPerl module for Bio::SeqIO::largefasta
4
4
# Cared for by Jason Stajich
58
58
bioperl-bugs@bio.perl.org
59
http://bio.perl.org/bioperl-bugs/
59
http://bugzilla.bioperl.org/
61
61
=head1 AUTHORS - Jason Stajich
63
Email: jason@chg.mc.duke.edu
63
Email: jason@bioperl.org
77
77
# Object preamble - inherits from Bio::Root::Object
80
use Bio::Seq::LargePrimarySeq;
81
use Bio::Seq::LargeSeq;
80
use Bio::Seq::SeqFactory;
83
82
$FASTALINELEN = 60;
84
83
@ISA = qw(Bio::SeqIO);
87
$self->SUPER::_initialize(@args);
88
if( ! defined $self->sequence_factory ) {
89
$self->sequence_factory(new Bio::Seq::SeqFactory
90
(-verbose => $self->verbose(),
91
-type => 'Bio::Seq::LargePrimarySeq'));
97
return next_primary_seq( $_[0], 1 );
100
=head2 next_primary_seq
103
Usage : $seq = $stream->next_seq()
104
Function: returns the next sequence in the stream
105
Returns : Bio::PrimarySeq object
110
sub next_primary_seq {
111
my( $self, $as_next_seq ) = @_;
113
107
# local $/ = "\n";
114
my $largepseq = new Bio::Seq::LargePrimarySeq();
115
my ($id,$fulldesc,$entry);
118
while( defined ($entry = $self->_readline) ) {
119
if( $seen == 1 && $entry =~ /^\s*>/ ) {
120
$self->_pushback($entry);
123
if ( $entry eq '>' ) { $seen = 1; next; }
124
elsif( $entry =~ /\s*>(.+?)$/ ) {
126
($id,$fulldesc) = ($1 =~ /^\s*(\S+)\s*(.*)$/)
127
or $self->warn("Can't parse fasta header");
128
$largepseq->display_id($id);
129
$largepseq->primary_id($id);
130
$largepseq->desc($fulldesc);
133
$largepseq->add_sequence_as_string($entry);
135
(++$count % 1000 == 0 && $self->verbose() > 0) && print "line $count\n";
137
if( ! $seen ) { return undef; }
139
return new Bio::Seq::LargeSeq(-primaryseq => $largepseq );
108
my $largeseq = $self->sequence_factory->create();
109
my ($id,$fulldesc,$entry);
112
while( defined ($entry = $self->_readline) ) {
113
if( $seen == 1 && $entry =~ /^\s*>/ ) {
114
$self->_pushback($entry);
117
# if ( ($entry eq '>') || eof($self->_fh) ) { $seen = 1; next; }
118
if ( ($entry eq '>') ) { $seen = 1; next; }
119
elsif( $entry =~ /\s*>(.+?)$/ ) {
121
($id,$fulldesc) = ($1 =~ /^\s*(\S+)\s*(.*)$/)
122
or $self->warn("Can't parse fasta header");
123
$largeseq->display_id($id);
124
$largeseq->primary_id($id);
125
$largeseq->desc($fulldesc);
128
$largeseq->add_sequence_as_string($entry);
130
(++$count % 1000 == 0 && $self->verbose() > 0) && print "line $count\n";
132
if( ! $seen ) { return undef; }