Bio-FeatureIO
view release on metacpan or search on metacpan
lib/Bio/FeatureIO/vecscreen_simple.pm view on Meta::CPAN
return unless $self->mode eq 'r'; # returns if can't read next_feature when we're in write mode
while ( my $line = $self->_readline() ) {
chomp $line;
if ( $line =~ /^>Vector (\S+)/ ) {
$self->{parse_state}{seqname} = $1;
} elsif ( $line =~ /^\s*WARNING/ ) {
$self->warn("$self->{parse_state}{seqname}: vecscreen says: $line\n");
} elsif ( $line =~ /\S/ ) {
$self->{parse_state}{seqname}
or $self->throw("Unexpected line in vecscreen output '$line'");
#if it's not a vector line, it should be either a match type or
#a coordinates line
my $lcline = lc $line;
if ( $line =~ /^(\d+)\s+(\d+)\s*$/ ) {
my ($s,$e) = ($1,$2);
my $matchtype = $self->{parse_state}{matchtype};
$matchtype =~ s/\s/_/g; #replace whitespace with underscores for the primary tag
return Bio::SeqFeature::Generic->new( -start => $s,
-end => $e,
-primary => $matchtype,
-seq_id => $self->{parse_state}{seqname},
);
} elsif ( $lcline eq 'no hits found' ) {
$self->{parse_state}{seqname} = '';
} elsif ( grep $lcline eq $_, 'strong match', 'moderate match', 'weak match', 'suspect origin') {
$self->{parse_state}{matchtype} = $lcline;
} else {
$self->throw("Parse error. Expected a match type or coordinate line but got '$line'");
}
} else {
#blank line, ignore it and reset parser
$self->{parse_state}{seqname} = ''; #< a line with whitespace
#indicates a boundary
#between output for
#different sequences
$self->{parse_state}{matchtype} = '';
}
}
return;
}
=head2 write_feature (NOT IMPLEMENTED)
Title : write_feature
Usage : $io->write_feature($feature)
Function: write a Bio::SeqFeatureI object in vecscreen -f 3 format
Example :
Args : Bio::SeqFeatureI object
Returns :
=cut
sub write_feature {
shift->throw_not_implemented;
}
###
1;#do not remove
###
( run in 0.627 second using v1.01-cache-2.11-cpan-e1769b4cff6 )