Bio-Community
view release on metacpan or search on metacpan
lib/Bio/Community/IO.pm view on Meta::CPAN
=head2 write_metacommunity
Usage : $out->write_metacommunity($meta);
Function: Write a metacommunity.
Args : A Bio::Community::Meta object
Returns : 1 for success
=cut
method write_metacommunity (Bio::Community::Meta $meta) {
if (not defined $self->_meta) {
$self->_meta($meta);
$self->_write_metacommunity_init($meta);
while (my $community = $meta->next_community) {
$self->write_community($community);
}
# _write_metacommunity_finish will happen before close()
} else {
$self->throw('Can write only one metacommunity');
}
return 1;
}
method _write_metacommunity_init (Bio::Community::Meta $meta) {
# Driver-side method to initialize writing a metacommunity
$self->throw_not_implemented;
}
method _write_metacommunity_finish (Bio::Community::Meta $meta) {
# Driver-side method to finalize writing a metacommunity
$self->throw_not_implemented;
}
before 'close' => sub {
my $self = shift;
if ($self->mode eq 'r') {
$self->_next_metacommunity_finish();
} else {
# Finish preparing the metacommunity for writing
$self->_write_metacommunity_finish($self->_meta);
# For objects consuming Bio::Community::Role::Table, write the table now
if (does_role($self, 'Bio::Community::Role::Table')) {
$self->_write_table unless $self->_was_written;
}
}
return 1;
};
#method _process_member (Bio::Community::Member $member, Bio::Community $community) {
method _process_member ($member, $community) {
my $ab_value;
my $ab_type = $self->abundance_type;
if ($ab_type eq 'count') {
$ab_value = $community->get_count($member);
} elsif ($ab_type eq 'absolute') {
$ab_value = $community->get_abs_ab($member);
} elsif ($ab_type eq 'percentage') {
$ab_value = $community->get_rel_ab($member);
} elsif ($ab_type eq 'fraction') {
$ab_value = $community->get_rel_ab($member) / 100;
} else {
$self->throw("$ab_value is not a valid abundance type.\n");
}
$self->write_member($member, $ab_value);
return 1;
}
=head2 skip_empty_communities
Usage : $in->skip_empty_communities;
Function: Get or set whether empty communities (with no members) should be
read/written or skipped.
Args : 0 or 1
Returns : 0 or 1
=cut
has 'skip_empty_communities' => (
is => 'rw',
isa => 'Bool',
required => 0,
lazy => 1,
default => 0,
init_arg => '-skip_empty_communities',
);
=head2 sort_members
Usage : $in->sort_members();
Function: When writing a community to a file, sort the community members based
on their abundance: 0 (off), 1 (by increasing abundance), -1 (by
decreasing abundance). The default is specific to each driver used.
Args : 0, 1 or -1
Returns : 0, 1 or -1
=cut
has 'sort_members' => (
is => 'ro',
isa => 'NumericSort',
required => 0,
lazy => 1,
init_arg => '-sort_members',
default => sub { return eval('$'.ref(shift).'::default_sort_members') || 0 },
);
=head2 abundance_type
Usage : $in->abundance_type();
Function: When writing a community to a file, report member abundance in one
of four possible representations:
* count : observed count
* absolute : absolute abundance
* percentage: relative abundance, in percent (0-100%)
* fraction : relative abundance, as a fractional number (0-1)
The default is specific to each driver
Args : count, absolute, percentage or fraction
Returns : count, absolute, percentage or fraction
=cut
has 'abundance_type' => (
is => 'ro',
isa => 'AbundanceRepr',
required => 0,
lazy => 1,
init_arg => '-abundance_type',
default => sub { return eval('$'.ref(shift).'::default_abundance_type') || 'percentage' },
);
=head2 missing_string
Usage : $in->missing_string();
Function: When writing a community to a file, specify what abundance string to
use for members that are not present in the community. The default is
specific to each driver used.
Args : string e.g. '', '0', 'n/a', '-'
Returns : string
=cut
has 'missing_string' => (
is => 'ro',
isa => 'Str',
required => 0,
lazy => 1,
init_arg => '-missing_string',
default => sub { return eval('$'.ref(shift).'::default_missing_string') || 0 },
);
=head2 multiple_communities
Usage : $in->multiple_communities();
Function: Return whether or not the file format can represent multiple
communities in a single file.
Args : 0 or 1
Returns : 0 or 1
=cut
has 'multiple_communities' => (
is => 'ro',
isa => 'Bool',
required => 0,
lazy => 1,
default => sub { return eval('$'.ref(shift).'::multiple_communities') || 0 },
);
=head2 explicit_ids
Usage : $in->explicit_ids();
Function: Return whether or not the file format explicitly records member IDs.
Args : 0 or 1
Returns : 0 or 1
=cut
has 'explicit_ids' => (
is => 'ro',
isa => 'Bool',
required => 0,
lazy => 1,
default => sub { return eval('$'.ref(shift).'::explicit_ids') || 0 },
);
( run in 2.773 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )