comparison variant_effect_predictor/Bio/EnsEMBL/Compara/Homology.pm @ 0:21066c0abaf5 draft

Uploaded
author willmclaren
date Fri, 03 Aug 2012 10:04:48 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:21066c0abaf5
1 package Bio::EnsEMBL::Compara::Homology;
2
3 use strict;
4 use Bio::EnsEMBL::Utils::Exception qw( deprecate throw warning );
5
6 use base ('Bio::EnsEMBL::Compara::AlignedMemberSet');
7
8 =head1 NAME
9
10 Bio::EnsEMBL::Compara::Homology - Homology between two proteins
11
12 =head1 SYNOPSIS
13
14 use Bio::EnsEMBL::Registry;
15
16 my $homology_adaptor = $reg->get_adaptor("Multi", "compara", "Homology");
17
18 ## Please, refer to Bio::EnsEMBL::Compara::DBSQL::MemberAdaptor
19 ## to see how to get a Member from the database. Also, you can
20 ## find alternative ways to fetch homologies in the POD for the
21 ## Bio::EnsEMBL::Compara::DBSQL::HomologyAdaptor module.
22
23 my $homologies = $homology_adaptor->fetch_all_by_Member($member);
24
25 foreach my $this_homology (@$homologies) {
26 my $homologue_genes = $this_homology->gene_list();
27 print join(" and ", @$homologue_genes), " are ",
28 $this_homology->description, "\n";
29 }
30
31 =head1 AUTHOR
32
33 Ensembl Team
34
35 =head1 COPYRIGHT
36
37 Copyright (c) 1999-2012. Ensembl Team
38
39 You may distribute this module under the same terms as perl itself
40
41 =head1 CONTACT
42
43 This modules is part of the EnsEMBL project (http://www.ensembl.org)
44
45 Questions can be posted to the ensembl-dev mailing list:
46 dev@ensembl.org
47
48 =head1 INHERITANCE
49
50 This class inherits all the methods and attributes from Bio::EnsEMBL::DBSQL::BaseAdaptor
51
52 =head1 APPENDIX
53
54 The rest of the documentation details each of the object methods. Internal methods are usually preceded with a _
55
56 =cut
57
58
59 =head2 subtype
60
61 Arg [1] : string $subtype (optional)
62 Example : $subtype = $homology->subtype();
63 $homology->subtype($subtype);
64 Description: getter/setter of string description of homology subtype.
65 Examples: 'Chordata', 'Euteleostomi', 'Homo sapiens'
66 Returntype : string
67 Exceptions : none
68 Caller : general
69
70 =cut
71
72 sub subtype {
73 my $self = shift;
74 # deprecate("Use taxonomy_level() instead.");
75 return $self->taxonomy_level(@_);
76 }
77
78
79 =head2 taxonomy_level
80
81 Arg [1] : string $taxonomy_level (optional)
82 Example : $taxonomy_level = $homology->taxonomy_level();
83 $homology->taxonomy_level($taxonomy_level);
84 Description: getter/setter of string description of homology taxonomy_level.
85 Examples: 'Chordata', 'Euteleostomi', 'Homo sapiens'
86 Returntype : string
87 Exceptions : none
88 Caller : general
89
90 =cut
91
92 sub taxonomy_level {
93 my $self = shift;
94 $self->{'_subtype'} = shift if(@_);
95 $self->{'_subtype'} = '' unless($self->{'_subtype'});
96 return $self->{'_subtype'};
97 }
98
99
100 =head2 taxonomy_alias
101
102 Arg [1] : string $taxonomy_alias (optional)
103 Example : $taxonomy_alias = $homology->taxonomy_alias();
104 $homology->taxonomy_alias($taxonomy_alias);
105 Description: get string description of homology taxonomy_alias.
106 Examples: 'Chordates', 'Bony vertebrates', 'Homo sapiens'
107 Defaults to taxonomy_level if alias is not in the db
108 Returntype : string
109 Exceptions : none
110 Caller : general
111
112 =cut
113
114 sub taxonomy_alias {
115
116 my $self = shift;
117
118 my $ancestor_node_id = $self->ancestor_node_id;
119 return unless $ancestor_node_id;
120
121 my $ancestor_node = $self->adaptor->db->get_GeneTreeNodeAdaptor->fetch_node_by_node_id($ancestor_node_id);
122 return unless $ancestor_node;
123
124 my $taxon_id = $ancestor_node->get_tagvalue('taxon_id');
125 return unless $taxon_id;
126
127 my $taxon = $self->adaptor->db->get_NCBITaxonAdaptor->fetch_node_by_taxon_id($taxon_id);
128 return unless $taxon;
129
130 return $taxon->ensembl_alias();
131 }
132
133
134 =head2 n
135
136 Arg [1] : float $n (optional)
137 Example : $n = $homology->n();
138 $homology->n(3);
139 Description: getter/setter of number of nonsynonymous positions for the homology.
140 Returntype : float
141 Exceptions : none
142 Caller : general
143
144 =cut
145
146 sub n {
147 my $self = shift;
148 $self->{'_n'} = shift if(@_);
149 return $self->{'_n'};
150 }
151
152
153 =head2 s
154
155 Arg [1] : float $s (optional)
156 Example : $s = $homology->s();
157 $homology->s(4);
158 Description: getter/setter of number of synonymous positions for the homology.
159 Returntype : float
160 Exceptions : none
161 Caller : general
162
163 =cut
164
165 sub s {
166 my $self = shift;
167 $self->{'_s'} = shift if(@_);
168 return $self->{'_s'};
169 }
170
171
172 =head2 lnl
173
174 Arg [1] : float $lnl (optional)
175 Example : $lnl = $homology->lnl();
176 $homology->lnl(-1234.567);
177 Description: getter/setter of number of the negative log likelihood for the dnds homology calculation.
178 Returntype : float
179 Exceptions : none
180 Caller : general
181
182 =cut
183
184 sub lnl {
185 my $self = shift;
186 $self->{'_lnl'} = shift if(@_);
187 return $self->{'_lnl'};
188 }
189
190 =head2 threshold_on_ds
191
192 Arg [1] : float $threshold_ond_ds (optional)
193 Example : $lnl = $homology->threshold_on_ds();
194 $homology->threshold_on_ds(1.01340);
195 Description: getter/setter of the threshold on ds for which the dnds ratio still makes sense.
196 Returntype : float
197 Exceptions : none
198 Caller : general
199
200 =cut
201
202 sub threshold_on_ds {
203 my $self = shift;
204 $self->{'_threshold_on_ds'} = shift if(@_);
205 return $self->{'_threshold_on_ds'};
206 }
207
208 =head2 dn
209
210 Arg [1] : floating $dn (can be undef)
211 Arg [2] : boolean $apply_threshold_on_ds (optional, default = 1)
212 Can be 0 or 1.
213 Example : $homology->dn or $homology->dn(0.1209)
214 if you want to retrieve dn without applying threshold_on_ds, the right call
215 is $homology->dn(undef,0).
216 Description: set/get the non synonymous subtitution rate
217 Returntype : floating
218 Exceptions :
219 Caller :
220
221 =cut
222
223
224 sub dn {
225 my ($self, $dn, $apply_threshold_on_ds) = @_;
226
227 $self->{'_dn'} = $dn if (defined $dn);
228 $apply_threshold_on_ds = 1 unless (defined $apply_threshold_on_ds);
229
230 unless (defined $self->ds(undef, $apply_threshold_on_ds)) {
231 return undef;
232 }
233
234 return $self->{'_dn'};
235 }
236
237 =head2 ds
238
239 Arg [1] : floating $ds (can be undef)
240 Arg [2] : boolean $apply_threshold_on_ds (optional, default = 1)
241 Can be 0 or 1.
242 Example : $homology->ds or $homology->ds(0.9846)
243 if you want to retrieve ds without applying threshold_on_ds, the right call
244 is $homology->dn(undef,0).
245 Description: set/get the synonymous subtitution rate
246 Returntype : floating
247 Exceptions :
248 Caller :
249
250 =cut
251
252
253 sub ds {
254 my ($self, $ds, $apply_threshold_on_ds) = @_;
255
256 $self->{'_ds'} = $ds if (defined $ds);
257 $apply_threshold_on_ds = 1 unless (defined $apply_threshold_on_ds);
258
259 if (defined $self->{'_ds'} &&
260 defined $self->{'_threshold_on_ds'} &&
261 $self->{'_ds'} > $self->{'_threshold_on_ds'}) {
262
263 if ($apply_threshold_on_ds) {
264 return undef;
265 } else {
266 warning("Threshold on ds values is switched off. Be aware that you may obtain saturated ds values that are not to be trusted, neither the dn/ds ratio\n");
267 }
268 }
269
270 return $self->{'_ds'};
271 }
272
273 =head2 dnds_ratio
274
275 Arg [1] : boolean $apply_threshold_on_ds (optional, default = 1)
276 Can be 0 or 1.
277 Example : $homology->dnds_ratio or
278 $homology->dnds_ratio(0) if you want to obtain a result
279 even when the dS is above the threshold on dS.
280 Description: return the ratio of dN/dS
281 Returntype : floating
282 Exceptions :
283 Caller :
284
285 =cut
286
287
288 sub dnds_ratio {
289 my $self = shift;
290 my $apply_threshold_on_ds = shift;
291
292 $apply_threshold_on_ds = 1 unless (defined $apply_threshold_on_ds);
293
294 my $ds = $self->ds(undef, $apply_threshold_on_ds);
295 my $dn = $self->dn(undef, $apply_threshold_on_ds);
296
297 unless (defined $dn &&
298 defined $ds &&
299 $ds !=0) {
300 return undef;
301 }
302
303 unless (defined $self->{'_dnds_ratio'}) {
304 $self->{'_dnds_ratio'} = sprintf("%.5f",$dn/$ds);
305 }
306
307 return $self->{'_dnds_ratio'};
308 }
309
310
311
312 =head2 print_homology
313
314 Example : $homology->print_homology
315 Description: This method prints a short descriptor of the homology
316 USE ONLY FOR DEBUGGING not for data output since the
317 format of this output may change as need dictates.
318
319 =cut
320
321 sub print_homology {
322 my $self = shift;
323
324 printf("Homology %d,%s,%s : ", $self->dbID, $self->description, $self->subtype);
325 foreach my $member (@{$self->gene_list}) {
326 printf("%s(%d)\t", $member->stable_id, $member->dbID);
327 }
328 print("\n");
329 }
330
331
332 =head2 get_all_PeptideAlignFeature
333
334 Description: returns a reference to an empty array as we don't have any
335 PeptideAlignFeatures associated to the homologies
336 Returntype : array ref
337 Exceptions :
338 Caller :
339
340 =cut
341
342 sub get_all_PeptideAlignFeature {
343
344 deprecated("Homologies don't have PeptideAlignFeatures any more. Use DBSQL::PeptideAlignFeatureAdaptor::fetch_all_by_qmember_id_hmember_id() instead");
345 return [];
346 }
347
348
349
350
351 =head2 homology_key
352
353 Example : my $key = $homology->homology_key;
354 Description: returns a string uniquely identifying this homology in world space.
355 uses the gene_stable_ids of the members and orders them by taxon_id
356 and concatonates them together.
357 Returntype : string
358 Exceptions :
359 Caller :
360
361 =cut
362
363 sub homology_key {
364 my $self = shift;
365 return $self->{'_homology_key'} if(defined($self->{'_homology_key'}));
366
367 my @genes = sort {$a->taxon_id <=> $b->taxon_id || $a->stable_id cmp $b->stable_id} @{$self->gene_list};
368 @genes = map ($_->stable_id, @genes);
369
370 my $homology_key = join('_', @genes);
371 return $homology_key;
372 }
373
374
375 =head2 node_id
376
377 Arg [1] : int $node_id (optional)
378 Example : $node_id = $homology->node_id();
379 $homology->subtype($node_id);
380 Description: getter/setter of integer that refer to a node_id in the protein_tree data.
381 Returntype : int
382 Exceptions : none
383 Caller : general
384
385 =cut
386
387 sub node_id {
388 my $self = shift;
389
390 $self->{'_ancestor_node_id'} = shift if(@_);
391 $self->{'_ancestor_node_id'} = '' unless($self->{'_ancestor_node_id'});
392 return $self->{'_ancestor_node_id'};
393
394 }
395
396 =head2 ancestor_node_id
397
398 Arg [1] : int $ancestor_node_id (optional)
399 Example : $ancestor_node_id = $homology->ancestor_node_id();
400 $homology->subtype($ancestor_node_id);
401 Description: getter/setter of integer that refer to the ancestor_node_id in the protein_tree data.
402 Returntype : int
403 Exceptions : none
404 Caller : general
405
406 =cut
407
408 sub ancestor_node_id {
409 my $self = shift;
410
411 $self->{'_ancestor_node_id'} = shift if(@_);
412 $self->{'_ancestor_node_id'} = '' unless($self->{'_ancestor_node_id'});
413 return $self->{'_ancestor_node_id'};
414
415 }
416
417
418 =head2 tree_node_id
419
420 Arg [1] : int $tree_node_id (optional)
421 Example : $tree_node_id = $homology->tree_node_id();
422 $homology->subtype($tree_node_id);
423 Description: getter/setter of integer that refer to the tree node_id in the protein_tree data.
424 Returntype : int
425 Exceptions : none
426 Caller : general
427
428 =cut
429
430 sub tree_node_id {
431 my $self = shift;
432
433 $self->{'_tree_node_id'} = shift if(@_);
434 $self->{'_tree_node_id'} = '' unless($self->{'_tree_node_id'});
435 return $self->{'_tree_node_id'};
436
437 }
438
439
440 1;
441