Mercurial > repos > mahtabm > ensembl
comparison variant_effect_predictor/Bio/EnsEMBL/Variation/Population.pm @ 0:1f6dce3d34e0
Uploaded
author | mahtabm |
---|---|
date | Thu, 11 Apr 2013 02:01:53 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:1f6dce3d34e0 |
---|---|
1 =head1 LICENSE | |
2 | |
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and | |
4 Genome Research Limited. All rights reserved. | |
5 | |
6 This software is distributed under a modified Apache license. | |
7 For license details, please see | |
8 | |
9 http://www.ensembl.org/info/about/code_licence.html | |
10 | |
11 =head1 CONTACT | |
12 | |
13 Please email comments or questions to the public Ensembl | |
14 developers list at <dev@ensembl.org>. | |
15 | |
16 Questions may also be sent to the Ensembl help desk at | |
17 <helpdesk@ensembl.org>. | |
18 | |
19 =cut | |
20 | |
21 # Ensembl module for Bio::EnsEMBL::Variation::Population | |
22 # | |
23 # Copyright (c) 2004 Ensembl | |
24 # | |
25 | |
26 | |
27 =head1 NAME | |
28 | |
29 Bio::EnsEMBL::Variation::Population - A population represents a phenotypic | |
30 group, ethnic group, set of individuals used in an assay, etc. | |
31 | |
32 =head1 SYNOPSIS | |
33 | |
34 # Population | |
35 $pop = Bio::EnsEMBL::Variation::Population->new | |
36 (-name => 'WEST AFRICA', | |
37 -description => 'Sub-Saharan Nations bordering Atlantic north' . | |
38 ' of Congo River, and Central/Southern Atlantic' . | |
39 ' Island Nations.'); | |
40 | |
41 ... | |
42 | |
43 # print out all sub populations of a population | |
44 # same could work for super populations | |
45 | |
46 print_sub_pops($pop); | |
47 | |
48 sub print_sub_pops { | |
49 my $pop = shift; | |
50 my $level = shift || 0; | |
51 | |
52 my $sub_pops = $pop->get_all_sub_Populations(); | |
53 | |
54 foreach my $sp (@$sub_pops) { | |
55 print ' ' x $level++, | |
56 'name: ', $sp->name(), | |
57 'desc: ', $sp->description(), | |
58 'size: ', $sp->size(),"\n"; | |
59 print_sub_pops($sp, $level); | |
60 } | |
61 } | |
62 | |
63 | |
64 | |
65 =head1 DESCRIPTION | |
66 | |
67 This is a class representing a population. A population may consist of any | |
68 grouping of individuals, including phenotypic groups (e.g. people with | |
69 diabetes), ethnic groups (e.g. caucasians), individuals used in an assay | |
70 (e.g. subjects in experiment X), etc. | |
71 | |
72 Populations may be arranged into an arbitrary hierarchy of sub and super | |
73 populations. | |
74 | |
75 =head1 METHODS | |
76 | |
77 =cut | |
78 | |
79 use strict; | |
80 use warnings; | |
81 | |
82 package Bio::EnsEMBL::Variation::Population; | |
83 | |
84 use Bio::EnsEMBL::Variation::Sample; | |
85 use Bio::EnsEMBL::Utils::Argument qw(rearrange); | |
86 use Bio::EnsEMBL::Utils::Exception qw(throw); | |
87 | |
88 our @ISA = ('Bio::EnsEMBL::Variation::Sample'); | |
89 | |
90 | |
91 =head2 new | |
92 | |
93 Arg [-dbID]: int - unique internal identifier of the sample | |
94 Arg [-ADAPTOR]: Bio::EnsEMBL::PopulationAdaptor | |
95 Arg [-NAME]: string - name of the population | |
96 Arg [-DESCRIPTION]: string - description of the population | |
97 Arg [-SIZE]: int - the size of the population | |
98 Arg [-SUB_POPULATIONS]: listref of Bio::EnsEMBL::Population objects | |
99 Example : $pop = Bio::EnsEMBL::Variation::Population->new | |
100 (-name => 'WEST AFRICA', | |
101 -description => 'Sub-Saharan Nations bordering Atlantic north' . | |
102 ' of Congo River, and Central/Southern Atlantic' . | |
103 ' Island Nations.' | |
104 -sub_populations => \@sub_pops); | |
105 Description: Constructor. Instantiates a new Population object | |
106 Returntype : Bio::EnsEMBL::Variation::Population | |
107 Exceptions : none | |
108 Caller : general | |
109 Status : At Risk | |
110 | |
111 =cut | |
112 | |
113 sub new { | |
114 my $caller = shift; | |
115 | |
116 my $class = ref($caller) || $caller; | |
117 | |
118 my ($dbID, $adaptor, $name, $desc, $size, $is_strain, $sub_pops) = | |
119 rearrange(['DBID','ADAPTOR','NAME', 'DESCRIPTION', 'SIZE', | |
120 'SUB_POPULATIONS'], @_); | |
121 | |
122 return bless {'dbID' => $dbID, | |
123 'adaptor' => $adaptor, | |
124 'name' => $name, | |
125 'description' => $desc, | |
126 'size' => $size, | |
127 'sub_populations' => $sub_pops}, $class; | |
128 } | |
129 | |
130 | |
131 | |
132 =head2 get_all_sub_Populations | |
133 | |
134 Arg [1] : none | |
135 Example : foreach my $sub_pop (@{$pop->get_all_sub_Populations}) { | |
136 my $sub_sub_pops = $sub_pop->get_all_sub_Populations(); | |
137 } | |
138 Description: Retrieves all populations which are conceptually a sub set | |
139 of this population. | |
140 Returntype : reference to list of Bio::EnsEMBL::Variation::Population objects | |
141 Exceptions : none | |
142 Caller : general | |
143 Status : At Risk | |
144 | |
145 =cut | |
146 | |
147 sub get_all_sub_Populations { | |
148 my $self = shift; | |
149 | |
150 if(!defined($self->{'sub_populations'}) && $self->{'adaptor'}) { | |
151 # lazy-load from database | |
152 $self->{'sub_populations'} = | |
153 $self->{'adaptor'}->fetch_all_by_super_Population($self); | |
154 } | |
155 return $self->{'sub_populations'} || []; | |
156 } | |
157 | |
158 | |
159 | |
160 =head2 get_all_super_Populations | |
161 | |
162 Arg [1] : none | |
163 Example : foreach my $sup_pop (@{$pop->get_all_super_Populations}) { | |
164 my $sup_sup_pops = $sup_pop->get_all_super_Populations(); | |
165 } | |
166 Description: Retrieves all populations which this population is a part of | |
167 from the database. | |
168 Super populations may not be directly added in order to avoid | |
169 circular references and memory leaks. You must add | |
170 sub_Populations instead and store this in the database. | |
171 Returntype : reference to list of Bio::EnsEMBL::Variation::Population objects | |
172 Exceptions : none | |
173 Caller : general | |
174 Status : At Risk | |
175 | |
176 =cut | |
177 | |
178 sub get_all_super_Populations { | |
179 my $self = shift; | |
180 | |
181 return [] if(!$self->{'adaptor'}); | |
182 | |
183 # load from database - do not cache to avoid circular references (mem leak)! | |
184 return $self->{'adaptor'}->fetch_all_by_sub_Population($self); | |
185 } | |
186 | |
187 | |
188 | |
189 =head2 add_sub_Population | |
190 | |
191 Arg [1] : Bio::EnsEMBL::Variation::Population $pop | |
192 Example : $pop->add_sub_Population($sub_pop); | |
193 $sub_pop->add_super_Population($pop); | |
194 Description: Adds a sub population to this population. | |
195 Returntype : none | |
196 Exceptions : throw on incorrect argument | |
197 Caller : general | |
198 Status : At Risk | |
199 | |
200 =cut | |
201 | |
202 sub add_sub_Population { | |
203 my $self = shift; | |
204 my $pop = shift; | |
205 | |
206 if(!ref($pop) || !$pop->isa('Bio::EnsEMBL::Variation::Population')) { | |
207 throw('Bio::EnsEMBL::Variation::Population argument expected.'); | |
208 } | |
209 | |
210 if($pop == $self) { | |
211 throw("Cannot add self as sub population."); | |
212 } | |
213 | |
214 $self->{'sub_populations'} ||= []; | |
215 push @{$self->{'sub_populations'}}, $pop; | |
216 | |
217 return $pop; | |
218 } | |
219 | |
220 =head2 get_all_synonyms | |
221 | |
222 Arg [1] : (optional) string $source - the source of the synonyms to | |
223 return. | |
224 Example : @dbsnp_syns = @{$p->get_all_synonyms('dbSNP')}; | |
225 @all_syns = @{$p->get_all_synonyms()}; | |
226 Description: Retrieves synonyms for this Population. If a source argument | |
227 is provided all synonyms from that source are returned, | |
228 otherwise all synonyms are returned. | |
229 Returntype : reference to list of strings | |
230 Exceptions : none | |
231 Caller : general | |
232 Status : At Risk | |
233 | |
234 =cut | |
235 | |
236 sub get_all_synonyms { | |
237 my $self = shift; | |
238 my $source = shift; | |
239 | |
240 return [] if(!$self->adaptor()); #if there is no adaptor, return empty string | |
241 | |
242 return $self->adaptor()->fetch_synonyms($self->dbID(),$source); | |
243 | |
244 } | |
245 | |
246 =head2 get_all_Individuals | |
247 | |
248 Arg [1] : none | |
249 Example : @individuals = @{$p->get_all_individuals()}; | |
250 Description: Retrieves all Individuals belonging to this Population. | |
251 Returntype : reference to list of Bio::EnsEMBL::Variation::Individual objects | |
252 Exceptions : none | |
253 Caller : general | |
254 Status : At Risk | |
255 | |
256 =cut | |
257 | |
258 sub get_all_Individuals { | |
259 my $self = shift; | |
260 | |
261 my $ia = $self->adaptor->db->get_IndividualAdaptor; | |
262 | |
263 return (defined $ia ? $ia->fetch_all_by_Population($self) : []); | |
264 } | |
265 | |
266 1; |