Bio-Community

 view release on metacpan or  search on metacpan

lib/Bio/Community/IO/Driver/gaas.pm  view on Meta::CPAN


   my $in = Bio::Community::IO->new( -file => 'gaas_communities.txt', -format => 'gaas' );

   # See Bio::Community::IO for more information

=head1 DESCRIPTION

This Bio::Community::IO::Driver::gaas driver reads and writes files in the format
generated by GAAS (http://sourceforge.net/projects/gaas/). GAAS creates one such
file per community. Here is an example:

  # tax_name	tax_id	rel_abund
  Streptococcus pyogenes phage 315.1	198538	0.791035649011735
  Goatpox virus Pellor	376852	0.196094208626593
  Lumpy skin disease virus NI-2490	376849	0.0128701423616715

For each Bio::Community::Member $member generated from a GAAS file, $member->id()
contains the content of the tax_id field, while $member->desc() reflects the
tax_name field.

Note that GAAS format does not include counts for the community members but
relative abundances only. Thus, the get_members_count() method of the
Bio::Community objects generated using this driver is a relative abundance
(a decimal number) instead of the usual integers used for counts.

=head1 CONSTRUCTOR

See L<Bio::Community::IO>.

=head1 AUTHOR

Florent Angly L<florent.angly@gmail.com>

=head1 SUPPORT AND BUGS

User feedback is an integral part of the evolution of this and other Bioperl
modules. Please direct usage questions or support issues to the mailing list, 
L<bioperl-l@bioperl.org>, rather than to the module maintainer directly. Many
experienced and reponsive experts will be able look at the problem and quickly 
address it. Please include a thorough description of the problem with code and
data examples if at all possible.

If you have found a bug, please report it on the BioPerl bug tracking system
to help us keep track the bugs and their resolution:
L<https://redmine.open-bio.org/projects/bioperl/>

=head1 COPYRIGHT

Copyright 2011-2014 by Florent Angly <florent.angly@gmail.com>

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.10.1 or,
at your option, any later version of Perl 5 you may have available.

=cut


package Bio::Community::IO::Driver::gaas;

use Moose;
use namespace::autoclean;
use Method::Signatures;
use Bio::Community::Member;

extends 'Bio::Community::IO';
with 'Bio::Community::Role::IO';


our $multiple_communities    =  0;         # the format supports one community per file
our $explicit_ids            =  1;         # IDs are explicitly recorded
our $default_sort_members    =  -1;        # sorted by decreasing abundance
our $default_abundance_type  = 'fraction'; # fractional number between 0 and 1
our $default_missing_string  =  0;         # empty members get a '0'


has '_count' => (
   is => 'rw',
   isa => 'PositiveInt',
   required => 0,
   init_arg => undef,
   default => 0,
   lazy => 1,
);


method next_member () {
   # Read next line
   my $line;
   do {
      $line = $self->_readline;
      if (not defined $line) {
         return undef;
      }
   } while ( ($line =~ m/^#/) || ($line =~ m/^\s*$/) ); # skip comment and empty lines

   # Parse and validate the line 
   chomp $line;
   my ($name, $taxid, $rel_ab) = split "\t", $line;

   if ( (not defined $name  ) ||
        (not defined $taxid ) ||
        (not defined $rel_ab) ) {
      $self->throw("Error: The following line does not follow the GAAS format.\n-->$line<--\n");
   }

   my $member = Bio::Community::Member->new( -id => $taxid, -desc => $name );
   $self->_attach_taxon($member, $taxid, 0);
   ### TODO:handle things differently if GAAS did not use a taxonomy file??
   $self->_attach_weights($member);

   # Note that a relative abundance is returned, not a count
   return $member, $rel_ab;
}


method _next_community_init () {
   my $count = $self->_count;
   $count++;
   if ($count <= 1) {
      $self->_count($count);
      return ''; # name of community



( run in 0.538 second using v1.01-cache-2.11-cpan-39bf76dae61 )