annotate variant_effect_predictor/Bio/EnsEMBL/Compara/GenomicAlignTree.pm @ 1:d6778b5d8382 draft default tip

Deleted selected files
author willmclaren
date Fri, 03 Aug 2012 10:05:43 -0400
parents 21066c0abaf5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 =head1 LICENSE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 This software is distributed under a modified Apache license.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 For license details, please see
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 =head1 CONTACT
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17 <helpdesk@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21 Bio::EnsEMBL::Compara::GenomicAlignTree
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 Specific subclass of NestedSet to add functionality when the nodes of this tree
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28 are GenomicAlign objects and the tree is a representation of a Protein derived
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29 Phylogenetic tree
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31 =head1 APPENDIX
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33 The rest of the documentation details each of the object methods. Internal methods are usually preceded with a _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38 package Bio::EnsEMBL::Compara::GenomicAlignTree;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41 use Bio::EnsEMBL::Utils::Argument;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 use Bio::EnsEMBL::Utils::Exception;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43 use Bio::SimpleAlign;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 use IO::File;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 use Bio::EnsEMBL::Compara::NestedSet;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 use Bio::EnsEMBL::Compara::BaseGenomicAlignSet;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49 our @ISA = qw(Bio::EnsEMBL::Compara::NestedSet Bio::EnsEMBL::Compara::BaseGenomicAlignSet);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52 =head2 left_node_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54 Arg [1] : (optional) $left_node_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 Example : $object->left_node_id($left_node_id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56 Example : $left_node_id = $object->left_node_id();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 Description : Getter/setter for the left_node_id attribute
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58 Returntype : integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65 sub left_node_id {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67 if (@_) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68 $self->{_left_node_id} = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 return $self->{_left_node_id};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74 =head2 right_node_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76 Arg [1] : (optional) $right_node_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77 Example : $object->right_node_id($right_node_id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78 Example : $right_node_id = $object->right_node_id();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 Description : Getter/setter for the right_node_id attribute
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 Returntype : integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87 sub right_node_id {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89 if (@_) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90 $self->{_right_node_id} = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 return $self->{_right_node_id};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96 =head2 left_node
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98 Arg [1] : -none-
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99 Example : $left_node = $object->left_node();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 Description : Get the left_node object from the database.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101 Returntype : Bio::EnsEMBL::Compara::GenomicAlignTree object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108 sub left_node {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 if ($self->{_left_node_id} and $self->adaptor) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 return $self->adaptor->fetch_node_by_node_id($self->{_left_node_id});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113 return undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117 =head2 right_node
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119 Arg [1] : -none-
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 Example : $left_node = $object->right_node();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121 Description : Get the right_node object from the database.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 Returntype : Bio::EnsEMBL::Compara::GenomicAlignTree object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 sub right_node {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 if ($self->{_right_node_id} and $self->adaptor) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132 return $self->adaptor->fetch_node_by_node_id($self->{_right_node_id});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134 return undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137 =head2 ancestral_genomic_align_block_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 Arg [1] : (optional) $ancestral_genomic_align_block_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140 Example : $object->ancestral_genomic_align_block_id($ancestral_genomic_align_block_id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 Example : $ancestral_genomic_align_block_id = $object->ancestral_genomic_align_block_id();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 Description : Getter/setter for the ancestral_genomic_align_block_id attribute
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143 This attribute is intended for the root of the tree only!
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 Returntype : int
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151 sub ancestral_genomic_align_block_id {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153 if (@_) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 $self->{_ancestral_genomic_align_block_id} = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 return $self->{_ancestral_genomic_align_block_id};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 =head2 modern_genomic_align_block_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 Arg [1] : (optional) $modern_genomic_align_block_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 Example : $object->modern_genomic_align_block_id($modern_genomic_align_block_id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164 Example : $modern_genomic_align_block_id = $object->modern_genomic_align_block_id();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 Description : Getter/setter for the modern_genomic_align_block_id attribute
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166 Returntype :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173 sub modern_genomic_align_block_id {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175 if (@_) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 $self->{_modern_genomic_align_block_id} = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178 return $self->{_modern_genomic_align_block_id};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 =head2 genomic_align_group
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 Arg [1] : (optional) $genomic_align_group
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 Example : $object->genomic_align_group($genomic_align_group);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186 Example : $genomic_align_group = $object->genomic_align_group();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 Description : Getter/setter for the genomic_align_group attribute
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188 Returntype : Bio::EnsEMBL::Compara::GenomicAlignGroup object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 sub genomic_align_group {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197 if (@_) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 $self->{_genomic_align_group} = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200 return $self->{_genomic_align_group};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204 =head2 get_all_genomic_aligns_for_node
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 Arg [1] : -none-
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207 Example : $genomic_aligns = $object->get_all_genomic_aligns_for_node
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 Description : Getter for all the GenomicAligns contained in the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209 genomic_align_group object on a node. This method is a short
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210 cut for $object->genomic_align_group->get_all_GenomicAligns()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211 Returntype : listref of Bio::EnsEMBL::Compara::GenomicAlign objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218 sub get_all_genomic_aligns_for_node {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219 my $self = shift(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220 return [] if (!$self->genomic_align_group);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 return $self->genomic_align_group->get_all_GenomicAligns;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 =head2 genomic_align_array (DEPRECATED)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226 Arg [1] : -none-
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 Example : $genomic_aligns = $object->genomic_align_array
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 Description : Alias for get_all_genomic_aligns_for_node. TO BE DEPRECATED
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229 Returntype : listref of Bio::EnsEMBL::Compara::GenomicAlign objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236 sub genomic_align_array {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237 my $self = shift(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239 deprecate("Use Bio::EnsEMBL::Compara::GenomicAlignTree->get_all_genomic_aligns_for_node() method instead");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240 return($self->get_all_genomic_aligns_for_node);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 =head2 get_all_GenomicAligns (DEPRECATED)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 Arg [1] : -none-
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247 Example : $genomic_aligns = $object->get_all_GenomicAligns
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 Description : Alias for get_all_genomic_aligns_for_node. TO BE DEPRECATED
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249 Returntype : listref of Bio::EnsEMBL::Compara::GenomicAlign objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 sub get_all_GenomicAligns {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257 my $self = shift(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 deprecate("Use Bio::EnsEMBL::Compara::GenomicAlignTree->get_all_genomic_aligns_for_node() method instead");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 return($self->get_all_genomic_aligns_for_node);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264 =head2 reference_genomic_align
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266 Arg [1] : (optional) $reference_genomic_align
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267 Example : $object->reference_genomic_align($reference_genomic_align);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268 Example : $reference_genomic_align = $object->reference_genomic_align();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269 Description : Getter/setter for the reference_genomic_align attribute
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270 Returntype : Bio::EnsEMBL::Compara::GenomicAlign object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277 sub reference_genomic_align {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280 if (@_) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281 $self->{reference_genomic_align} = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 return $self->{reference_genomic_align};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287 =head2 reference_genomic_align_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289 Arg [1] : integer $reference_genomic_align_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290 Example : $genomic_align_block->reference_genomic_align_id(4321);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291 Description: get/set for attribute reference_genomic_align_id. A value of 0 will set the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292 reference_genomic_align_id attribute to undef. When looking for genomic
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 alignments in a given slice or dnafrag, the reference_genomic_align
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294 corresponds to the Bio::EnsEMBL::Compara::GenomicAlign included in the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295 starting slice or dnafrag. The reference_genomic_align_id is the dbID
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296 corresponding to the reference_genomic_align. All remaining
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297 Bio::EnsEMBL::Compara::GenomicAlign objects included in the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298 Bio::EnsEMBL::Compara::GenomicAlignBlock are the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299 non_reference_genomic_aligns.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300 Synchronises reference_genomic_align and reference_genomic_align_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 attributes.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302 Returntype : integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 Exceptions : throw if $reference_genomic_align_id id not a postive number
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304 Caller : $genomic_align_block->reference_genomic_align_id(int)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309 sub reference_genomic_align_id {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310 my ($self, $reference_genomic_align_id) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312 if (defined($reference_genomic_align_id)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313 if ($reference_genomic_align_id !~ /^\d+$/) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314 throw "[$reference_genomic_align_id] should be a positive number.";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316 $self->{'reference_genomic_align_id'} = ($reference_genomic_align_id or undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318 ## Synchronises reference_genomic_align and reference_genomic_align_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319 if (defined($self->{'reference_genomic_align'}) and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320 defined($self->{'reference_genomic_align'}->dbID) and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321 ($self->{'reference_genomic_align'}->dbID != ($self->{'reference_genomic_align_id'} or 0))) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322 $self->{'reference_genomic_align'} = undef; ## Attribute will be set on request
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325 ## Try to get data from other sources...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326 } elsif (!defined($self->{'reference_genomic_align_id'})) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328 ## ...from the reference_genomic_align attribute
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329 if (defined($self->{'reference_genomic_align'}) and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330 defined($self->{'reference_genomic_align'}->dbID)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331 $self->{'reference_genomic_align_id'} = $self->{'reference_genomic_align'}->dbID;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335 return $self->{'reference_genomic_align_id'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 =head2 reference_genomic_align_node
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341 Arg [1] : (optional) $reference_genomic_align_node
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342 Example : $object->reference_genomic_align_node($reference_genomic_align_node);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343 Example : $reference_genomic_align_node = $object->reference_genomic_align_node();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344 Description : Getter/setter for the reference_genomic_align_node attribute
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345 Returntype : Bio::EnsEMBL::Compara::GenomicAlignTree object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352 sub reference_genomic_align_node {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
353 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
354
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
355 if (@_) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
356 $self->{reference_genomic_align_node} = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
357 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
358
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
359 return $self->{reference_genomic_align_node};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
360 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
361
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
362
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
363 =head2 aligned_sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
364
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
365 Arg [1] : -none-
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
366 Example : $aligned_sequence = $object->aligned_sequence();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
367 Description : Get the aligned sequence for this node. When the node
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
368 contains one single sequence, it returns its aligned sequence.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
369 For composite segments, it returns the combined aligned seq.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
370 Returntype : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
371 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
372 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
373 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
374
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
375 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
376
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
377 sub aligned_sequence {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
378 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
379 return $self->genomic_align_group->aligned_sequence(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
380 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
381
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
382
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
383 =head2 group_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
384
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
385 Arg [1] : integer $group_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
386 Example : my $group_id = $genomic_align_tree->group_id;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
387 Example : $genomic_align_tree->group_id(1234);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
388 Description: get/set for attribute group_id of the underlying
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
389 GenomicAlignBlock objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
390 Returntype : integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
391 Exceptions : A GenomicAlignTree is made of two GenomicAlignBlock
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
392 object. The method fail when gettign the value if the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
393 two group_ids do not match
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
394 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
395
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
396 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
397
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
398 sub group_id {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
399 my ($self, $group_id) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
400
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
401 if (defined($group_id)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
402 $self->{'group_id'} = $group_id;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
403 # Set the group_id on the genomic_align_blocks...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
404 my %genomic_align_blocks;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
405 #foreach my $this_genomic_align_node (@{$self->get_all_sorted_genomic_align_nodes()}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
406 foreach my $this_genomic_align_node (@{$self->get_all_nodes()}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
407 next if (!defined $this_genomic_align_node->genomic_align_group);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
408 foreach my $genomic_align (@{$this_genomic_align_node->genomic_align_group->get_all_GenomicAligns}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
409 my $this_genomic_align_block = $genomic_align->genomic_align_block;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
410 if ($this_genomic_align_block and !defined($genomic_align_blocks{$this_genomic_align_block})) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
411 $this_genomic_align_block->group_id($group_id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
412 $genomic_align_blocks{$this_genomic_align_block} = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
413 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
414 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
415 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
416 } elsif (!defined($self->{'group_id'}) and defined($self->{adaptor})) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
417 # Try to get the ID from other sources...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
418 my %group_ids;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
419 my $genomic_align_block_adaptor = $self->adaptor->dba->get_GenomicAlignBlockAdaptor;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
420 foreach my $this_genomic_align_node (@{$self->get_all_nodes()}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
421 next if (!defined $this_genomic_align_node->genomic_align_group);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
422 foreach my $genomic_align (@{$this_genomic_align_node->genomic_align_group->get_all_GenomicAligns}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
423 my $this_genomic_align_block_id = $genomic_align->genomic_align_block_id;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
424 my $this_genomic_align_block = $genomic_align_block_adaptor->fetch_by_dbID($this_genomic_align_block_id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
425 if ($this_genomic_align_block->group_id) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
426 $group_ids{$this_genomic_align_block->group_id} = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
427 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
428 $group_ids{"undef"} = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
429 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
430 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
431 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
432 if (keys %group_ids == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
433 if (!defined($group_ids{"undef"})) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
434 $self->{'group_id'} = (keys %group_ids)[0];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
435 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
436 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
437 warning("Different group_ids found for this GenomicAlignTree\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
438 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
439 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
440 return $self->{'group_id'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
441 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
442
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
443
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
444 =head2 name
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
445
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
446 Arg [1] : (optional) string $name
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
447 Example : $object->name($name);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
448 Example : $name = $object->name();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
449 Description : Getter/setter for the name attribute.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
450 Returntype : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
451 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
452 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
453 Status : At risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
454
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
455 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
456
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
457 sub name {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
458 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
459
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
460 if (@_) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
461 $self->{_name} = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
462 } elsif (!$self->{_name}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
463 my $genomic_align_group = $self->genomic_align_group;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
464 if (defined($self->SUPER::name()) and $self->SUPER::name() ne "") {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
465 ## Uses the name defined before blessing this object as a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
466 ## Bio::EnsEMBL::Compara::GenomicAlignTree in the Ortheus pipeline
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
467 $self->{_name} = $self->SUPER::name();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
468 } elsif ($self->is_leaf) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
469 my $gdb_name;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
470 if($genomic_align_group->genome_db->name =~ /(.)[^ ]+_(.{3})/) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
471 $gdb_name = "${1}${2}";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
472 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
473 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
474 $gdb_name = $genomic_align_group->genome_db->name();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
475 $gdb_name =~ tr/_//;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
476 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
477 $gdb_name = ucfirst($gdb_name);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
478 $self->{_name} = $gdb_name.'_'.$genomic_align_group->dnafrag->name."_".
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
479 $genomic_align_group->dnafrag_start."_".$genomic_align_group->dnafrag_end."[".
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
480 (($genomic_align_group->dnafrag_strand eq "-1")?"-":"+")."]";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
481 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
482 $self->{_name} = join("-", map {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
483 my $name = $_->genomic_align_group->genome_db->name;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
484 if($name =~ /(.)[^ ]+_(.{3})/) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
485 $name = "$1$2";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
486 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
487 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
488 $name =~ tr/_//;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
489 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
490 $name = ucfirst($name);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
491 $name;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
492 } @{$self->get_all_leaves})."[".scalar(@{$self->get_all_leaves})."]";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
493 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
494 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
495
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
496 return $self->{_name};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
497 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
498
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
499
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
500 =head2 get_all_sorted_genomic_align_nodes
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
501
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
502 Arg [1] : (optional) Bio::EnsEMBL::Compara::GenomicAlignTree $reference_genomic_align_node
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
503 Example : $object->get_all_sorted_genomic_align_nodes($ref_genomic_align_node);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
504 Example : $nodes = $object->get_all_sorted_genomic_align_nodes();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
505 Description : If ref_genomic_align_node is set, sorts the tree based on the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
506 reference_genomic_align_node
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
507 If ref_genomic_align_node is not set, sorts the tree based on
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
508 the species name
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
509 Returntype : Bio::EnsEMBL::Compara::GenomicAlignTree
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
510 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
511 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
512 Status : At risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
513
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
514 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
515
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
516 sub get_all_sorted_genomic_align_nodes {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
517 my ($self, $reference_genomic_align_node) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
518 my $sorted_genomic_align_nodes = [];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
519
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
520 if (!$reference_genomic_align_node and $self->reference_genomic_align_node) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
521 $reference_genomic_align_node = $self->reference_genomic_align_node;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
522 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
523
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
524 my $children = $self->children;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
525 if (@$children >= 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
526 $children = [sort _sort_children @$children];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
527 push(@$sorted_genomic_align_nodes, @{$children->[0]->get_all_sorted_genomic_align_nodes(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
528 $reference_genomic_align_node)});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
529 push(@$sorted_genomic_align_nodes, $self);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
530 for (my $i = 1; $i < @$children; $i++) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
531 push(@$sorted_genomic_align_nodes, @{$children->[$i]->get_all_sorted_genomic_align_nodes(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
532 $reference_genomic_align_node)});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
533 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
534 } elsif (@$children == 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
535 push(@$sorted_genomic_align_nodes, $self);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
536 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
537
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
538 return $sorted_genomic_align_nodes;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
539 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
540
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
541
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
542 =head2 restrict_between_alignment_positions
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
543
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
544 Arg[1] : [optional] int $start, refers to the start of the alignment
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
545 Arg[2] : [optional] int $end, refers to the start of the alignment
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
546 Arg[3] : [optional] boolean $skip_empty_GenomicAligns
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
547 Example : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
548 Description: restrict this GenomicAlignBlock. It returns a new object unless no
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
549 restriction is needed. In that case, it returns the original unchanged
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
550 object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
551 This method uses coordinates relative to the alignment itself.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
552 For instance if you have an alignment like:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
553 1 1 2 2 3
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
554 1 5 0 5 0 5 0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
555 AAC--CTTGTGGTA-CTACTT-----ACTTT
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
556 AACCCCTT-TGGTATCTACTTACCTAACTTT
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
557 and you restrict it between 5 and 25, you will get back a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
558 object containing the following alignment:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
559 1 1
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
560 1 5 0 5
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
561 CTTGTGGTA-CTACTT----
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
562 CTT-TGGTATCTACTTACCT
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
563
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
564 See restrict_between_reference_positions() elsewhere in this document
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
565 for an alternative method using absolute genomic coordinates.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
566
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
567 NB: This method works only for GenomicAlignBlock which have been
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
568 fetched from the DB as it is adjusting the dnafrag coordinates
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
569 and the cigar_line only and not the actual sequences stored in the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
570 object if any. If you want to restrict an object with no coordinates
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
571 a simple substr() will do!
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
572
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
573 Returntype : Bio::EnsEMBL::Compara::GenomicAlignBlock object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
574 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
575 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
576 Status : At risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
577
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
578 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
579
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
580 sub restrict_between_alignment_positions {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
581 my ($self, $start, $end, $skip_empty_GenomicAligns, $reference_genomic_align) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
582 my $genomic_align_tree;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
583 $genomic_align_tree = $self->copy();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
584 $genomic_align_tree->adaptor($self->adaptor);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
585 foreach my $this_node (@{$genomic_align_tree->get_all_nodes}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
586 $this_node->adaptor($self->adaptor);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
587 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
588 my $final_alignment_length = $end - $start + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
589
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
590 #Get all the nodes and restrict but only remove leaves if necessary. Call minimize_tree at the end to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
591 #remove the internal nodes
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
592 foreach my $this_node (@{$genomic_align_tree->get_all_nodes}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
593 my $genomic_align_group = $this_node->genomic_align_group;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
594 next if (!$genomic_align_group);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
595 my $new_genomic_aligns = [];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
596 my $length = $this_node->length;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
597 foreach my $this_genomic_align (@{$genomic_align_group->get_all_GenomicAligns}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
598 my $restricted_genomic_align = $this_genomic_align->restrict($start, $end, $length);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
599
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
600 if ($genomic_align_tree->reference_genomic_align eq $this_genomic_align) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
601 ## Update the reference_genomic_align
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
602
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
603 $genomic_align_tree->reference_genomic_align($restricted_genomic_align);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
604 $genomic_align_tree->reference_genomic_align_node($this_node);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
605 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
606 if (!$skip_empty_GenomicAligns or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
607 $restricted_genomic_align->dnafrag_start <= $restricted_genomic_align->dnafrag_end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
608 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
609 ## Always skip composite segments outside of the range of restriction
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
610 ## The cigar_line will contain only X's
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
611 next if ($restricted_genomic_align->cigar_line =~ /^\d*X$/);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
612
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
613 #Set the genomic_align_block_id of the restricted genomic_align
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
614 $restricted_genomic_align->genomic_align_block_id($this_genomic_align->genomic_align_block_id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
615 #$restricted_genomic_align->genomic_align_block($genomic_align_tree);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
616
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
617 push(@$new_genomic_aligns, $restricted_genomic_align);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
618 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
619 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
620 if (@$new_genomic_aligns) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
621 $genomic_align_group->{genomic_align_array} = undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
622 foreach my $this_genomic_align (@$new_genomic_aligns) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
623 $genomic_align_group->add_GenomicAlign($this_genomic_align);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
624 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
625 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
626 #Only remove leaves. Use minimise_tree to tidy up the internal nodes
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
627 if ($this_node->is_leaf) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
628 $this_node->disavow_parent();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
629 my $reference_genomic_align = $genomic_align_tree->reference_genomic_align;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
630 if ($reference_genomic_align) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
631 my $reference_genomic_align_node = $genomic_align_tree->reference_genomic_align_node;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
632 $genomic_align_tree = $genomic_align_tree->minimize_tree();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
633 ## Make sure links are not broken after tree minimization
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
634 $genomic_align_tree->reference_genomic_align($reference_genomic_align);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
635
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
636 #Set the genomic_align_block_id of the restricted genomic_align
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
637 $genomic_align_tree->reference_genomic_align->genomic_align_block_id($reference_genomic_align->genomic_align_block_id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
638
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
639 #$genomic_align_tree->reference_genomic_align->genomic_align_block($genomic_align_tree);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
640 $genomic_align_tree->reference_genomic_align_node($reference_genomic_align_node);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
641 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
642 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
643 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
644 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
645 $genomic_align_tree = $genomic_align_tree->minimize_tree();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
646 $genomic_align_tree->length($final_alignment_length);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
647
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
648 return $genomic_align_tree;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
649 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
650
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
651
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
652 =head2 restrict_between_reference_positions
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
653
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
654 Arg[1] : [optional] int $start, refers to the reference_dnafrag
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
655 Arg[2] : [optional] int $end, refers to the reference_dnafrag
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
656 Arg[3] : [optional] Bio::EnsEMBL::Compara::GenomicAlign $reference_GenomicAlign
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
657 Arg[4] : [optional] boolean $skip_empty_GenomicAligns [ALWAYS FALSE]
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
658 Example : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
659 Description: restrict this GenomicAlignBlock. It returns a new object unless no
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
660 restriction is needed. In that case, it returns the original unchanged
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
661 object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
662 It might be the case that the restricted region coincide with a gap
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
663 in one or several GenomicAligns. By default these GenomicAligns are
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
664 returned with a dnafrag_end equals to its dnafrag_start + 1. For instance,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
665 a GenomicAlign with dnafrag_start = 12345 and dnafrag_end = 12344
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
666 correspond to a block which goes on this region from before 12345 to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
667 after 12344, ie just between 12344 and 12345. You can choose to remove
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
668 these empty GenomicAligns by setting $skip_empty_GenomicAligns to any
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
669 true value.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
670 Returntype : Bio::EnsEMBL::Compara::GenomicAlignBlock object in scalar context. In
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
671 list context, returns the previous object and the start and end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
672 positions of the restriction in alignment coordinates (from 1 to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
673 alignment_length)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
674 Exceptions : return undef if reference positions lie outside of the alignment
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
675 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
676 Status : At risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
677
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
678 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
679
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
680 =comment
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
681
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
682 sub restrict_between_reference_positions {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
683 my ($self, $start, $end, $reference_genomic_align, $skip_empty_GenomicAligns) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
684 my $genomic_align_tree;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
685
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
686 $reference_genomic_align ||= $self->reference_genomic_align;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
687 throw("A reference Bio::EnsEMBL::Compara::GenomicAlignTree must be given")
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
688 if (!$reference_genomic_align);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
689
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
690 my @restricted_genomic_align_tree_params = $self->SUPER::restrict_between_reference_positions($start, $end, $reference_genomic_align, $skip_empty_GenomicAligns);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
691 my $restricted_genomic_align_tree = $restricted_genomic_align_tree_params[0];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
692
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
693 #return $self if (!$restricted_genomic_align_tree or $restricted_genomic_align_tree eq $self);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
694
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
695 return wantarray ? @restricted_genomic_align_tree_params : $restricted_genomic_align_tree;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
696 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
697
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
698 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
699
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
700 =head2 copy
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
701
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
702 Arg : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
703 Example : my $new_tree = $this_tree->copy()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
704 Description : Create a copy of this Bio::EnsEMBL::Compara::GenomicAlignTree
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
705 object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
706 Returntype : Bio::EnsEMBL::Compara::GenomicAlignTree
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
707 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
708 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
709 Status : At risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
710
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
711 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
712
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
713 sub copy {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
714 my $self = shift(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
715 my $new_copy;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
716
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
717 $new_copy = $self->SUPER::copy();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
718
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
719 $new_copy->genomic_align_group($self->genomic_align_group->copy) if ($self->genomic_align_group);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
720
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
721 if ($self->reference_genomic_align_node) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
722 my $ref_ga = $self->reference_genomic_align;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
723 #Need to find the reference_genomic_align in the genomic_align_group
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
724 foreach my $leaf (@{$new_copy->get_all_leaves}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
725 foreach my $gag ($leaf->genomic_align_group) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
726 foreach my $ga (@{$gag->genomic_align_array}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
727 if ($ref_ga->dnafrag_id == $ga->dnafrag_id &&
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
728 $ref_ga->dnafrag_start == $ga->dnafrag_start &&
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
729 $ref_ga->dnafrag_end == $ga->dnafrag_end &&
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
730 $ref_ga->dnafrag_strand == $ga->dnafrag_strand) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
731 $new_copy->reference_genomic_align($ga);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
732 last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
733 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
734 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
735 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
736 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
737 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
738
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
739
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
740 $new_copy->reference_genomic_align_node($self->reference_genomic_align_node->copy) if ($self->reference_genomic_align_node);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
741
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
742 #These are not deep copies
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
743 #$new_copy->reference_genomic_align($self->reference_genomic_align) if ($self->reference_genomic_align);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
744 #$new_copy->reference_genomic_align_node($self->reference_genomic_align_node) if ($self->reference_genomic_align_node);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
745
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
746 #There are lots of bits missing from this copy
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
747 #Still to add?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
748 #parent_link
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
749 #obj_id_to_link
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
750
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
751 $new_copy->{_original_strand} = $self->{_original_strand} if (defined $self->{_original_strand});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
752 $new_copy->{_parent_id} = $self->{_parent_id} if (defined $self->{_parent_id});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
753 $new_copy->{_root_id} = $self->{_root_id} if (defined $self->{_root_id});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
754 $new_copy->{_left_node_id} = $self->{_left_node_id} if (defined $self->{_left_node_id});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
755 $new_copy->{_right_node_id} = $self->{_right_node_id} if (defined $self->{_right_node_id});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
756 $new_copy->{_node_id} = $self->{_node_id} if (defined $self->{_node_id});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
757 $new_copy->{_reference_slice} = $self->{_reference_slice} if (defined $self->{_reference_slice});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
758 $new_copy->{_reference_slice_start} = $self->{_reference_slice_start} if (defined $self->{_reference_slice_start});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
759 $new_copy->{_reference_slice_end} = $self->{_reference_slice_end} if (defined $self->{_reference_slice_end});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
760 $new_copy->{_reference_slice_strand} = $self->{_reference_slice_strand} if (defined $self->{_reference_slice_strand});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
761
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
762 return $new_copy;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
763 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
764
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
765 =head2 print
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
766
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
767 Arg : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
768 Example : print()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
769 Description : Print the fields in a Bio::EnsEMBL::Compara::GenomicAlignTree
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
770 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
771 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
772 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
773 Status : At risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
774
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
775 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
776
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
777 sub print {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
778 my $self = shift(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
779 my $level = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
780 my $reference_genomic_align = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
781 if (!$level) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
782 print STDERR $self->newick_format(), "\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
783 $reference_genomic_align = ($self->reference_genomic_align or "");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
784 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
785 $level++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
786 my $mark = "- ";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
787 if (grep {$_ eq $reference_genomic_align} @{$self->get_all_genomic_aligns_for_node}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
788 $mark = "* ";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
789 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
790 print STDERR " " x $level, $mark,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
791 "[", $self->node_id, "/", ($self->get_original_strand?"+":"-"), "] ",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
792 $self->genomic_align_group->genome_db->name,":",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
793 $self->genomic_align_group->dnafrag->name,":",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
794 $self->genomic_align_group->dnafrag_start,":",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
795 $self->genomic_align_group->dnafrag_end,":",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
796 $self->genomic_align_group->dnafrag_strand,":",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
797 " (", ($self->left_node_id?$self->left_node->node_id."/".$self->left_node->root->node_id:"...."),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
798 " - ", ($self->right_node_id?$self->right_node->node_id."/".$self->right_node->root->node_id:"...."),")\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
799 foreach my $this_genomic_align (@{$self->get_all_genomic_aligns_for_node}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
800 if ($this_genomic_align eq $reference_genomic_align) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
801 print " " x 8, "* ", $this_genomic_align->aligned_sequence("+FAKE_SEQ"), "\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
802 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
803 print " " x 10, $this_genomic_align->aligned_sequence("+FAKE_SEQ"), "\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
804 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
805 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
806 foreach my $node (sort _sort_children @{$self->children}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
807 $node->print($level, $reference_genomic_align);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
808 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
809 $level--;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
810 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
811
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
812
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
813 =head2 get_all_nodes_from_leaves_to_this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
814
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
815 Arg[1] : Bio::EnsEMBL::Compara::GenomicAlignTree $all_nodes
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
816 Example : my $all_nodes = get_all_nodes_from_leaves_to_this()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
817 Description :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
818 Returntype : Bio::EnsEMBL::Compara::GenomicAlignTree object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
819 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
820 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
821 Status : At risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
822
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
823 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
824
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
825 sub get_all_nodes_from_leaves_to_this {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
826 my $self = shift(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
827 my $all_nodes = (shift or []);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
828 foreach my $node (sort _sort_children @{$self->children}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
829 $all_nodes = $node->get_all_nodes_from_leaves_to_this($all_nodes);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
830 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
831 push(@$all_nodes, $self);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
832 return $all_nodes;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
833 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
834
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
835
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
836 =head2 get_all_leaves
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
837
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
838 Title : get_all_leaves
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
839 Usage : my @leaves = @{$tree->get_all_leaves};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
840 Function: searching from the given starting node, searches and creates list
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
841 of all leaves in this subtree and returns by reference.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
842 This method overwrites the parent method because it sorts
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
843 the leaves according to their node_id. Here, we use this method
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
844 to get all leaves in another sorting function. Not only it doesn't
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
845 make much sense to sort something that will be sorted again, but
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
846 it can also produce some Perl errors as sort methods uses $a and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
847 $b which are package global variables.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
848 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
849 Returns : reference to list of NestedSet objects (all leaves)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
850 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
851 Status : At risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
852
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
853 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
854
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
855 sub get_all_leaves {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
856 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
857
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
858 my $leaves = {};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
859 $self->_recursive_get_all_leaves($leaves);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
860 my @leaf_list = values(%{$leaves});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
861
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
862 return \@leaf_list;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
863 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
864
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
865
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
866 =head2 _sort_children
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
867
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
868 Arg : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
869 Example : sort _sort_children @$children
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
870 Description : sort function for sorting the nodes of a Bio::EnsEMBL::Compara::GenomicAlignTree object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
871 Returntype : int (-1,0,1)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
872 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
873 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
874 Status : At risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
875
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
876 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
877
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
878 sub _sort_children {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
879 my $reference_genomic_align_node;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
880
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
881 if (defined ($a->root) && defined($b->root) && $a->root eq $b->root and $a->root->reference_genomic_align_node) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
882 $reference_genomic_align_node = $a->root->reference_genomic_align_node;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
883 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
884
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
885 ## Reference GenomicAlign based sorting
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
886 if ($reference_genomic_align_node) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
887 if (grep {$_ eq $reference_genomic_align_node} @{$a->get_all_leaves}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
888 return -1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
889 } elsif (grep {$_ eq $reference_genomic_align_node} @{$b->get_all_leaves}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
890 return 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
891 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
892 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
893
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
894 ## Species name based sorting
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
895 my $species_a = $a->_name_for_sorting;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
896 my $species_b = $b->_name_for_sorting;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
897
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
898 return $species_a cmp $species_b;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
899 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
900
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
901 =head2 _name_for_sorting
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
902
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
903 Arg : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
904 Example : my $species_a = $a->_name_for_sorting;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
905 Description : if the node is a leaf, create a name based on the species
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
906 name, dnafrag name, group_id and the start position. If the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
907 node is an internal node, create a name based on the species
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
908 name, dnafrag name and the start position
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
909 Returntype : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
910 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
911 Caller : _sort_children
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
912 Status : At risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
913
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
914 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
915
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
916 sub _name_for_sorting {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
917 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
918 my $name;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
919
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
920 if ($self->is_leaf) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
921 $name = sprintf("%s.%s.%s.%020d",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
922 $self->genomic_align_group->genome_db->name,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
923 $self->genomic_align_group->dnafrag->name,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
924 ($self->genomic_align_group->dbID or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
925 $self->genomic_align_group->{original_dbID} or 0),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
926 $self->genomic_align_group->dnafrag_start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
927 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
928 $name = join(" - ", sort map {sprintf("%s.%s.%020d",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
929 $_->genomic_align_group->genome_db->name,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
930 $_->genomic_align_group->dnafrag->name,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
931 $_->genomic_align_group->dnafrag_start)} @{$self->get_all_leaves});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
932 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
933
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
934 return $name;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
935 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
936
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
937 =head2 reverse_complement
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
938
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
939 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
940 Example : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
941 Description: reverse complement the tree,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
942 modifying dnafrag_strand and cigar_line of each GenomicAlign in consequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
943 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
944 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
945 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
946 Status : At risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
947
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
948 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
949
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
950 sub reverse_complement {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
951 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
952
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
953 if (defined($self->{_original_strand})) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
954 $self->{_original_strand} = 1 - $self->{_original_strand};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
955 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
956 $self->{_original_strand} = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
957 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
958
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
959 foreach my $this_node (@{$self->get_all_nodes}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
960 my $genomic_align_group = $this_node->genomic_align_group;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
961 next if (!$genomic_align_group);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
962 my $gas = $genomic_align_group->get_all_GenomicAligns;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
963 foreach my $ga (@{$gas}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
964 $ga->reverse_complement;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
965 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
966 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
967 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
968
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
969 sub length {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
970 my ($self, $length) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
971
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
972 if (defined($length)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
973 $self->{'length'} = $length;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
974 } elsif (!defined($self->{'length'})) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
975 # Try to get the ID from other sources...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
976 if (defined($self->{'adaptor'}) and defined($self->dbID)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
977 # ...from the database, using the dbID of the Bio::Ensembl::Compara::GenomicAlignBlock object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
978 $self->adaptor->retrieve_all_direct_attributes($self);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
979 } elsif (@{$self->get_all_genomic_aligns_for_node} and $self->get_all_genomic_aligns_for_node->[0]->aligned_sequence("+FAKE_SEQ")) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
980 $self->{'length'} = CORE::length($self->get_all_genomic_aligns_for_node->[0]->aligned_sequence("+FAKE_SEQ"));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
981 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
982 foreach my $this_node (@{$self->get_all_nodes}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
983 my $genomic_align_group = $this_node->genomic_align_group;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
984 next if (!$genomic_align_group);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
985 $self->{'length'} = CORE::length($genomic_align_group->get_all_GenomicAligns->[0]->aligned_sequence("+FAKE_SEQ"));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
986 last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
987 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
988 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
989 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
990 return $self->{'length'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
991 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
992
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
993 =head2 alignment_strings
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
994
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
995 Arg [1] : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
996 Example : $genomic_align_tree->alignment_strings
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
997 Description: Returns the alignment string of all the sequences in the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
998 alignment
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
999 Returntype : array reference containing several strings
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1000 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1001 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1002 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1003
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1004 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1005
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1006 sub alignment_strings {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1007 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1008 my $alignment_strings = [];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1009
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1010 foreach my $this_node (@{$self->get_all_nodes}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1011 my $genomic_align_group = $this_node->genomic_align_group;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1012 next if (!$genomic_align_group);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1013 foreach my $genomic_align (@{$genomic_align_group->get_all_GenomicAligns}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1014 push(@$alignment_strings, $genomic_align->aligned_sequence);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1015 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1016 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1017
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1018 return $alignment_strings;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1019 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1020
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1021 =head2 method_link_species_set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1022
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1023 Arg [1] : Bio::EnsEMBL::Compara::MethodLinkSpeciesSet $method_link_species_set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1024 Example : $method_link_species_set = $genomic_align_tree->method_link_species_set;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1025 Description: Getter for attribute method_link_species_set. Takes this from the first Bio::EnsEMBL::Compara::GenomicAlign
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1026 object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1027 Returntype : Bio::EnsEMBL::Compara::MethodLinkSpeciesSet object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1028 Exceptions : thrown if $method_link_species_set is not a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1029 Bio::EnsEMBL::Compara::MethodLinkSpeciesSet object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1030 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1031 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1032
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1033 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1034
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1035 sub method_link_species_set {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1036 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1037
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1038 my $method_link_species_set = $self->get_all_leaves->[0]->genomic_align_group->genomic_align_array->[0]->method_link_species_set;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1039
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1040 throw("$method_link_species_set is not a Bio::EnsEMBL::Compara::MethodLinkSpeciesSet object")
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1041 unless ($method_link_species_set->isa("Bio::EnsEMBL::Compara::MethodLinkSpeciesSet"));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1042
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1043 return $method_link_species_set;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1044 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1045
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1046 =head2 method_link_species_set_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1047
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1048 Arg [1] : integer $method_link_species_set_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1049 Example : $method_link_species_set_id = $genomic_align_tree->method_link_species_set_id;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1050 Description: Getter for the attribute method_link_species_set_id. Takes this from the first
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1051 Bio::EnsEMBL::Compara::GenomicAlign object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1052 Returntype : integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1053 Caller : object::methodname
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1054 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1055
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1056 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1057
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1058 sub method_link_species_set_id {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1059 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1060
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1061 my $method_link_species_set_id = $self->get_all_leaves->[0]->genomic_align_group->genomic_align_array->[0]->method_link_species_set->dbID;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1062
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1063 return $method_link_species_set_id;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1064 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1065
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1066 #sub DESTROY {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1067 # my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1068 # $self->release_tree unless ($self->{_parent_link});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1069 # }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1070
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1071 1;