Bio-AlignIO-stockholm
view release on metacpan or search on metacpan
lib/Bio/AlignIO/stockholm.pm view on Meta::CPAN
database_comment
custom
dblink
alignment_comment
num_sequences
seq_annotation
);
# This maps the tagname back to a tagname-annotation value combination.
# Some data is stored using get/set methods ('Methods'), others
# are mapped b/c of more complex annotation types.
our %WRITEMAP = (
'accession' => 'AC/Method',
'id' => 'ID/Method',
'description' => 'DE/Method',
'record_authors' => 'AU/SimpleValue',
'seed_source' => 'SE/SimpleValue',
'build_command' => 'BM/SimpleValue',
'gathering_threshold' => 'GA/SimpleValue',
'noise_cutoff' => 'NC/SimpleValue',
'trusted_cutoff' => 'TC/SimpleValue',
'entry_type' => 'TP/SimpleValue',
'num_sequences' => 'SQ/SimpleValue',
'previous_ids' => 'PI/SimpleValue',
'database_comment' => 'DC/SimpleValue',
'dblink' => 'DR/DBLink',
'reference' => 'RX/Reference',
'ref_number' => 'RN/number',
'ref_comment' => 'RC/comment',
'ref_pubmed' => 'RM/pubmed',
'ref_title' => 'RT/title',
'ref_authors' => 'RA/authors',
'ref_location' => 'RL/location',
'alignment_comment' => 'CC/Comment',
'seq_annotation' => 'DR/Collection',
#Pfam-specific
'build_method' => 'AM/SimpleValue',
'pfam_family_accession' => 'NE/SimpleValue',
'seq_start_stop' => 'NL/SimpleValue',
# Rfam-specific GF lines
'sec_structure_source' => 'SS/SimpleValue',
# custom; this is used to carry over anything from the input alignment
# not mapped to LocatableSeqs or SimpleAlign in a meaningful way
'custom' => 'XX/SimpleValue'
);
# This maps the tagname back to a tagname-annotation value combination.
# Some data is stored using get/set methods ('Methods'), others
# are mapped b/c of more complex annotation types.
=head2 new
Title : new
Usage : my $alignio = Bio::AlignIO->new(-format => 'stockholm'
-file => '>file');
Function: Initialize a new L<Bio::AlignIO::stockholm> reader or writer
Returns : L<Bio::AlignIO> object
Args : -line_length : length of the line for the alignment block
-alphabet : symbol alphabet to set the sequences to. If not set,
the parser will try to guess based on the alignment
accession (if present), defaulting to 'dna'.
-spaces : (optional, def = 1) boolean to add a space in between
the "# STOCKHOLM 1.0" header and the annotation and
the annotation and the alignment.
=cut
sub _initialize {
my ( $self, @args ) = @_;
$self->SUPER::_initialize(@args);
my ($handler, $linelength, $spaces) = $self->_rearrange([qw(HANDLER LINE_LENGTH SPACES)],@args);
$spaces = defined $spaces ? $spaces : 1;
$self->spaces($spaces);
# hash for functions for decoding keys.
$handler ? $self->alignhandler($handler) :
$self->alignhandler(Bio::AlignIO::Handler::GenericAlignHandler->new(
-format => 'stockholm',
-verbose => $self->verbose,
));
$linelength && $self->line_length($linelength);
}
=head2 next_aln
Title : next_aln
Usage : $aln = $stream->next_aln()
Function: returns the next alignment in the stream.
Returns : L<Bio::Align::AlignI> object
Args : NONE
=cut
sub next_aln {
my $self = shift;
my $handler = $self->alignhandler;
# advance to alignment header
while( defined(my $line = $self->_readline) ) {
if ($line =~ m{^\#\s*STOCKHOLM\s+}xmso) {
last;
}
}
$self->{block_line} = 0;
# go into main body of alignment
my ($data_chunk, $isa_primary, $name, $alphabet);
my $last_feat = '';
while( defined(my $line = $self->_readline) ) {
# only blank lines are in between blocks, so reset block line
my ($primary_tag, $secondary_tag, $data, $nse, $feat, $align, $concat);
if ($line =~ m{^\s*$}xmso) {
$self->{block_line} &&= 0;
next;
}
# End of Record
if (index($line, '//') == 0) {
# fencepost
$handler->data_handler($data_chunk);
undef $data_chunk;
( run in 4.518 seconds using v1.01-cache-2.11-cpan-5c0b1e786e0 )