Mercurial > repos > mahtabm > ensembl
diff variant_effect_predictor/Bio/EnsEMBL/Variation/Population.pm @ 0:1f6dce3d34e0
Uploaded
author | mahtabm |
---|---|
date | Thu, 11 Apr 2013 02:01:53 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/variant_effect_predictor/Bio/EnsEMBL/Variation/Population.pm Thu Apr 11 02:01:53 2013 -0400 @@ -0,0 +1,266 @@ +=head1 LICENSE + + Copyright (c) 1999-2012 The European Bioinformatics Institute and + Genome Research Limited. All rights reserved. + + This software is distributed under a modified Apache license. + For license details, please see + + http://www.ensembl.org/info/about/code_licence.html + +=head1 CONTACT + + Please email comments or questions to the public Ensembl + developers list at <dev@ensembl.org>. + + Questions may also be sent to the Ensembl help desk at + <helpdesk@ensembl.org>. + +=cut + +# 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 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 string + + return $self->adaptor()->fetch_synonyms($self->dbID(),$source); + +} + +=head2 get_all_Individuals + + Arg [1] : none + Example : @individuals = @{$p->get_all_individuals()}; + Description: Retrieves all Individuals belonging to this Population. + Returntype : reference to list of Bio::EnsEMBL::Variation::Individual objects + Exceptions : none + Caller : general + Status : At Risk + +=cut + +sub get_all_Individuals { + my $self = shift; + + my $ia = $self->adaptor->db->get_IndividualAdaptor; + + return (defined $ia ? $ia->fetch_all_by_Population($self) : []); +} + +1;