Raw content of Bio::EnsEMBL::Variation::Population
# Ensembl module for Bio::EnsEMBL::Variation::Population
#
# Copyright (c) 2004 Ensembl
#
=head1 NAME
Bio::EnsEMBL::Variation::Population - A population represents a phenotypic
group, ethnic group, set of individuals used in an assay, etc.
=head1 SYNOPSIS
# Population
$pop = Bio::EnsEMBL::Variation::Population->new
(-name => 'WEST AFRICA',
-description => 'Sub-Saharan Nations bordering Atlantic north' .
' of Congo River, and Central/Southern Atlantic' .
' Island Nations.');
...
# print out all sub populations of a population
# same could work for super populations
print_sub_pops($pop);
sub print_sub_pops {
my $pop = shift;
my $level = shift || 0;
my $sub_pops = $pop->get_all_sub_Populations();
foreach my $sp (@$sub_pops) {
print ' ' x $level++,
'name: ', $sp->name(),
'desc: ', $sp->description(),
'size: ', $sp->size(),"\n";
print_sub_pops($sp, $level);
}
}
=head1 DESCRIPTION
This is a class representing a population. A population may consist of any
grouping of individuals, including phenotypic groups (e.g. people with
diabetes), ethnic groups (e.g. caucasians), individuals used in an assay
(e.g. subjects in experiment X), etc.
Populations may be arranged into an arbitrary hierarchy of sub and super
populations.
=head1 CONTACT
Post questions to the Ensembl development list: ensembl-dev@ebi.ac.uk
=head1 METHODS
=cut
use strict;
use warnings;
package Bio::EnsEMBL::Variation::Population;
use Bio::EnsEMBL::Variation::Sample;
use Bio::EnsEMBL::Utils::Argument qw(rearrange);
use Bio::EnsEMBL::Utils::Exception qw(throw);
our @ISA = ('Bio::EnsEMBL::Variation::Sample');
=head2 new
Arg [-dbID]: int - unique internal identifier of the sample
Arg [-ADAPTOR]: Bio::EnsEMBL::PopulationAdaptor
Arg [-NAME]: string - name of the population
Arg [-DESCRIPTION]: string - description of the population
Arg [-SIZE]: int - the size of the population
Arg [-SUB_POPULATIONS]: listref of Bio::EnsEMBL::Population objects
Example : $pop = Bio::EnsEMBL::Variation::Population->new
(-name => 'WEST AFRICA',
-description => 'Sub-Saharan Nations bordering Atlantic north' .
' of Congo River, and Central/Southern Atlantic' .
' Island Nations.'
-sub_populations => \@sub_pops);
Description: Constructor. Instantiates a new Population object
Returntype : Bio::EnsEMBL::Variation::Population
Exceptions : none
Caller : general
Status : At Risk
=cut
sub new {
my $caller = shift;
my $class = ref($caller) || $caller;
my ($dbID, $adaptor, $name, $desc, $size, $is_strain, $sub_pops) =
rearrange(['DBID','ADAPTOR','NAME', 'DESCRIPTION', 'SIZE',
'SUB_POPULATIONS'], @_);
return bless {'dbID' => $dbID,
'adaptor' => $adaptor,
'name' => $name,
'description' => $desc,
'size' => $size,
'sub_populations' => $sub_pops}, $class;
}
=head2 get_all_sub_Populations
Arg [1] : none
Example : foreach my $sub_pop (@{$pop->get_all_sub_Populations}) {
my $sub_sub_pops = $sub_pop->get_all_sub_Populations();
}
Description: Retrieves all populations which are conceptually a sub set
of this population.
Returntype : reference to list of Bio::EnsEMBL::Variation::Population objects
Exceptions : none
Caller : general
Status : At Risk
=cut
sub get_all_sub_Populations {
my $self = shift;
if(!defined($self->{'sub_populations'}) && $self->{'adaptor'}) {
# lazy-load from database
$self->{'sub_populations'} =
$self->{'adaptor'}->fetch_all_by_super_Population($self);
}
return $self->{'sub_populations'} || [];
}
=head2 get_all_super_Populations
Arg [1] : none
Example : foreach my $sup_pop (@{$pop->get_all_super_Populations}) {
my $sup_sup_pops = $sup_pop->get_all_super_Populations();
}
Description: Retrieves all populations which this population is a part of
from the database.
Super populations may not be directly added in order to avoid
circular references and memory leaks. You must add
sub_Populations instead and store this in the database.
Returntype : reference to list of Bio::EnsEMBL::Variation::Population objects
Exceptions : none
Caller : general
Status : At Risk
=cut
sub get_all_super_Populations {
my $self = shift;
return [] if(!$self->{'adaptor'});
# load from database - do not cache to avoid circular references (mem leak)!
return $self->{'adaptor'}->fetch_all_by_sub_Population($self);
}
=head2 add_sub_Population
Arg [1] : Bio::EnsEMBL::Variation::Population $pop
Example : $pop->add_sub_Population($sub_pop);
$sub_pop->add_super_Population($pop);
Description: Adds a sub population to this population.
Returntype : none
Exceptions : throw on incorrect argument
Caller : general
Status : At Risk
=cut
sub add_sub_Population {
my $self = shift;
my $pop = shift;
if(!ref($pop) || !$pop->isa('Bio::EnsEMBL::Variation::Population')) {
throw('Bio::EnsEMBL::Variation::Population argument expected.');
}
if($pop == $self) {
throw("Cannot add self as sub population.");
}
$self->{'sub_populations'} ||= [];
push @{$self->{'sub_populations'}}, $pop;
return $pop;
}
=head2 get_all_synonyms
Arg [1] : (optional) string $source - the source of the synonyms to
return.
Example : @dbsnp_syns = @{$p->get_all_synonyms('dbSNP')};
@all_syns = @{$p->get_all_synonyms()};
Description: Retrieves synonyms for this Population. If a source argument
is provided all synonyms from that source are returned,
otherwise all synonyms are returned.
Returntype : reference to list of strings
Exceptions : none
Caller : general
Status : At Risk
=cut
sub get_all_synonyms {
my $self = shift;
my $source = shift;
return [] if(!$self->adaptor()); #if there is no adaptor, return empty strin
return $self->adaptor()->fetch_synonyms($self->dbID(),$source);
}
1;