annotate variant_effect_predictor/Bio/EnsEMBL/StableIdHistoryTree.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 Bio::EnsEMBL::StableIdHistoryTree - object representing a stable ID history tree
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 my $reg = "Bio::EnsEMBL::Registry";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 my $archiveStableIdAdaptor =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 $reg->get_adaptor( 'human', 'core', 'ArchiveStableId' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 my $stable_id = 'ENSG00000068990';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 my $history =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 $archiveStableIdAdaptor->fetch_history_tree_by_stable_id('ENSG01');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 print "Unique stable IDs in this tree:\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 print join( ", ", @{ $history->get_unique_stable_ids } ), "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 print "\nReleases in this tree:\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 print join( ", ", @{ $history->get_release_display_names } ), "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 print "\nCoordinates of nodes in the tree:\n\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 foreach my $a ( @{ $history->get_all_ArchiveStableIds } ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 print " Stable ID: " . $a->stable_id . "." . $a->version . "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 print " Release: "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 . $a->release . " ("
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 . $a->assembly . ", "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 . $a->db_name . ")\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 print " coords: "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 . join( ', ', @{ $history->coords_by_ArchiveStableId($a) } )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 . "\n\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 This object represents a stable ID history tree graph.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 The graph is implemented as a collection of nodes (ArchiveStableId
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 objects) and links (StableIdEvent objects) which have positions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 on an (x,y) grid. The x axis is used for releases, the y axis for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 stable_ids. The idea is to create a plot similar to this (the numbers
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 shown on the nodes are the stable ID versions):
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 ENSG001 1-------------- 2--
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 \
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 ENSG003 1-----1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 /
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 ENSG002 1-------2----------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 38 39 40 41 42
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 The grid coordinates of the ArchiveStableId objects in this example
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 would be (note that coordinates are zero-based):
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 ENSG001.1 (0, 0)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 ENSG001.2 (2, 0)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 ENSG003.1 (release 41) (3, 1)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 ENSG003.1 (release 42) (4, 1)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 ENSG002.1 (0, 2)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 ENSG002.2 (1, 2)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 The tree will only contain those nodes which had a change in the stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 ID version. Therefore, in the above example, in release 39 ENSG001 was
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 present and had version 1 (but will not be drawn there, to unclutter the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 output).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 The grid positions will be calculated by the API and will try to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 untangle the tree (i.e. try to avoid overlapping lines).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 add_ArchiveStableIds
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 add_ArchiveStableIds_for_events
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 remove_ArchiveStableId
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 flush_ArchiveStableIds
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 add_StableIdEvents
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 remove_StableIdEvent
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 flush_StableIdEvents
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 get_all_ArchiveStableIds
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 get_all_StableIdEvents
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 get_latest_StableIdEvent
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 get_release_display_names
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 get_release_db_names
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 get_unique_stable_ids
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 optimise_tree
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 coords_by_ArchiveStableId
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 calculate_coords
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 consolidate_tree
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 reset_tree
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 current_dbname
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 current_release
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 current_assembly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 is_incomplete
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 =head1 RELATED MODULES
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 Bio::EnsEMBL::ArchiveStableId
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 Bio::EnsEMBL::DBSQL::ArchiveStableIdAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 Bio::EnsEMBL::StableIdEvent
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 package Bio::EnsEMBL::StableIdHistoryTree;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 no warnings 'uninitialized';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 use Bio::EnsEMBL::Utils::Argument qw(rearrange);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 use Bio::EnsEMBL::Utils::Exception qw(throw warning);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 Arg [CURRENT_DBNAME] : (optional) name of current db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 Arg [CURRENT_RELEASE] : (optional) current release number
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 Arg [CURRENT_ASSEMBLY] : (optional) current assembly name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 Example : my $history = Bio::EnsEMBL::StableIdHistoryTree->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 Description : object constructor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 Return type : Bio::EnsEMBL::StableIdHistoryTree
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 my $caller = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 my $class = ref($caller) || $caller;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 my $self = {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 bless $self, $class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 my ($current_dbname, $current_release, $current_assembly) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 rearrange([qw( CURRENT_DBNAME CURRENT_RELEASE CURRENT_ASSEMBLY )], @_ );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 # initialise
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 $self->{'current_dbname'} = $current_dbname;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 $self->{'current_release'} = $current_release;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 $self->{'current_assembly'} = $current_assembly;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 =head2 add_ArchiveStableIds
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 Arg[1..n] : Bio::EnsEMBL::ArchiveStableId's @archive_ids
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 The ArchiveStableIds to add to the the history tree
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 Example : my $archive_id = $archiveStableIdAdaptor->fetch_by_stable_id(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 'ENSG00024808');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 $history->add_ArchiveStableId($archive_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 Description : Adds ArchiveStableIds (nodes) to the history tree. No
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 calculation of grid coordinates is done at this point, you need
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 to initiate this manually with calculate_coords().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 ArchiveStableIds are only added once for each release (to avoid
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 duplicates).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 Return type : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 Exceptions : thrown on invalid or missing argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 Caller : Bio::EnsEMBL::DBSQL::ArchiveStableIdAdaptor::fetch_history_by_stable_id, general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 sub add_ArchiveStableIds {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 my ($self, @archive_ids) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 throw("You must provide one or more Bio::EnsEMBL::ArchiveStableIds to add.")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 unless (@archive_ids);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 foreach my $archive_id (@archive_ids) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 throw("Bio::EnsEMBL::ArchiveStableId object expected.")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 unless (ref($archive_id) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 $archive_id->isa('Bio::EnsEMBL::ArchiveStableId'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 $self->{'nodes'}->{$self->_node_id($archive_id)} = $archive_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 =head2 add_ArchiveStableIds_for_events
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 Example : my $history = Bio::EnsEMBL::StableIdHistoryTree->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 $history->add_StableIdEvents($event1, $event2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 $history->add_ArchiveStableIds_for_events;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 Description : Convenience method that adds all ArchiveStableIds for all
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 StableIdEvents attached to this object to the tree.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 Return type : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 Caller : Bio::EnsEMBL::DBSQL::ArchiveStableIdAdaptor::fetch_history_by_stable_id, general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 sub add_ArchiveStableIds_for_events {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 foreach my $event (@{ $self->get_all_StableIdEvents }) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 if ($event->old_ArchiveStableId) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 $self->add_ArchiveStableIds($event->old_ArchiveStableId);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 if ($event->new_ArchiveStableId) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 $self->add_ArchiveStableIds($event->new_ArchiveStableId);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 =head2 remove_ArchiveStableId
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 Arg[1] : Bio::EnsEMBL::ArchiveStableId $archive_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 the ArchiveStableId to remove from the tree
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 Example : $history->remove_ArchiveStableId($archive_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 Description : Removes an ArchiveStableId from the tree.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 Return type : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 Exceptions : thrown on missing or invalid argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 Caller : Bio::EnsEMBL::DBSQL::ArchiveStableIdAdaptor::fetch_history_by_stable_id, general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 sub remove_ArchiveStableId {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 my ($self, $archive_id) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 throw("Bio::EnsEMBL::ArchiveStableId object expected.")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 unless ($archive_id && ref($archive_id) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 $archive_id->isa('Bio::EnsEMBL::ArchiveStableId'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 my %nodes = %{ $self->{'nodes'} };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 delete $nodes{$self->_node_id($archive_id)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 $self->{'nodes'} = \%nodes;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 =head2 flush_ArchiveStableIds
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 Example : $history->flush_ArchiveStableIds;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 Description : Remove all ArchiveStableIds from the tree.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 Return type : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 sub flush_ArchiveStableIds {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 $self->{'nodes'} = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 # generate a unique node identifier
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 sub _node_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 my ($self, $archive_id) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 return $archive_id->stable_id . ':' . $archive_id->db_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 =head2 add_StableIdEvents
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 Arg[1..n] : Bio::EnsEMBL::StableIdEvent's @events
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 The StableIdEvents to add to the the history tree
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 Example : $history->add_StableIdEvents($event);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 Description : Adds StableIdEvents (links) to the history tree. Note that
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 ArchiveStableIds attached to the StableIdEvent aren't added to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 the tree automatically, you'll need to call
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 add_ArchiveStableIds_for_events later.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 Return type : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 Exceptions : thrown on invalid or missing argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 Caller : Bio::EnsEMBL::DBSQL::ArchiveStableIdAdaptor::fetch_history_by_stable_id, general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 sub add_StableIdEvents {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 my ($self, @events) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 throw("You must provide one or more Bio::EnsEMBL::StableIdsEvents to add.")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 unless (@events);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 foreach my $event (@events) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 throw("Bio::EnsEMBL::StableIdEvent object expected.")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 unless ($event->isa('Bio::EnsEMBL::StableIdEvent'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 $self->{'links'}->{$self->_link_id($event)} = $event;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 =head2 remove_StableIdEvent
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 Arg[1] : Bio::EnsEMBL::StableIdEvent $event
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 the StableIdEvent to remove from the tree
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 Example : $history->remove_StableIdEvent($event);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 Description : Removes a StableIdEvent from the tree.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 Return type : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 Exceptions : thrown on missing or invalid arguments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 Caller : Bio::EnsEMBL::DBSQL::ArchiveStableIdAdaptor::fetch_history_by_stable_id, general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 sub remove_StableIdEvent {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 my ($self, $event) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 throw("Bio::EnsEMBL::StableIdEvent object expected.") unless
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 ($event && ref($event) && $event->isa('Bio::EnsEMBL::StableIdEvent'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 my %links = %{ $self->{'links'} };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 delete $links{$self->_link_id($event)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 $self->{'links'} = \%links;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 =head2 flush_StableIdEvents
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 Example : $history->flush_StableIdEvents;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 Description : Removes all StableIdEvents from the tree.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 Return type : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 sub flush_StableIdEvents {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 $self->{'links'} = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 # generate a unique link identifier
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 sub _link_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 my ($self, $event) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 my ($old_id, $old_db_name, $new_id, $new_db_name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 if ($event->old_ArchiveStableId) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 $old_id = $event->old_ArchiveStableId->stable_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 $old_db_name = $event->old_ArchiveStableId->db_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 if ($event->new_ArchiveStableId) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 $new_id = $event->new_ArchiveStableId->stable_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 $new_db_name = $event->new_ArchiveStableId->db_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 return join(':', $old_id, $old_db_name, $new_id, $new_db_name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 =head2 get_all_ArchiveStableIds
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 Example : foreach my $arch_id (@{ $history->get_all_ArchiveStableIds }) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 print $arch_id->stable_id, '.', $arch_id->version, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 Description : Gets all ArchiveStableIds (nodes) in this tree.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 Return type : Arrayref of Bio::EnsEMBL::ArchiveStableId objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 sub get_all_ArchiveStableIds {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 return [ values %{ $self->{'nodes'} } ];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 =head2 get_all_current_ArchiveStableIds
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 Example : foreach my $arch_id (@{ $history->get_all_current_ArchiveStableIds }) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 print $arch_id->stable_id, '.', $arch_id->version, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 Description : Convenience method to get all current ArchiveStableIds in this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 tree.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 Note that no lazy loading of "current" status is done at that
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 stage; as long as you retrieve your StableIdHistoryTree object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 from ArchiveStableIdAdaptor, you'll get the right answer. In
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 other use cases, if you want to make sure you really get all
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 current stable IDs, loop over the result of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 get_all_ArchiveStableIds() and call
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 ArchiveStableId->current_version() on all of them.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 Return type : Arrayref of Bio::EnsEMBL::ArchiveStableId objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 sub get_all_current_ArchiveStableIds {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 my @current = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 foreach my $arch_id (@{ $self->get_all_ArchiveStableIds }) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 push @current, $arch_id if ($arch_id->is_current);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 return \@current;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 =head2 get_all_StableIdEvents
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 Example : foreach my $event (@{ $history->get_all_StableIdsEvents }) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 print "Old stable ID: ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 ($event->get_attribute('old', 'stable_id') or 'none'), "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 print "New stable ID: ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 ($event->get_attribute('new', 'stable_id') or 'none'), "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 print "Mapping score: ", $event->score, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 Description : Gets all StableIdsEvents (links) in this tree.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 Return type : Arrayref of Bio::EnsEMBL::StableIdEvent objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 sub get_all_StableIdEvents {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 return [ values %{ $self->{'links'} } ];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 =head2 get_latest_StableIdEvent
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 Arg[1] : Bio::EnsEMBL::ArchiveStableId $arch_id - the stable ID to get
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 the latest Event for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 Example : my $arch_id = Bio::EnsEMBL::ArchiveStableId->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 -stable_id => 'ENSG00001'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 my $event = $history->get_latest_Event($arch_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 Description : Returns the latest StableIdEvent found in the tree where a given
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 stable ID is the new stable ID. If more than one is found (e.g.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 in a merge scenario in the latest mapping), preference is given
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 to self-events.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 Return type : Bio::EnsEMBL::StableIdEvent
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 Exceptions : thrown on missing or wrong argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 Caller : Bio::EnsEMBL::DBSQL::ArchiveStableIdAdaptor::add_all_current_to_history, general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 sub get_latest_StableIdEvent {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 my $arch_id = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 unless ($arch_id and $arch_id->isa('Bio::EnsEMBL::ArchiveStableId')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 throw("Need a Bio::EnsEMBL::ArchiveStableId.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 my @all_events = @{ $self->get_all_StableIdEvents };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 my @self_events = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 while (my $event = shift(@all_events)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 if ($event->new_ArchiveStableId and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 $event->new_ArchiveStableId->stable_id eq $arch_id->stable_id) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 push @self_events, $event;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 my @sorted = sort { $b->new_ArchiveStableId->release <=>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 $a->new_ArchiveStableId->release } @self_events;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 # give priority to self events
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 my $latest;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 while ($latest = shift @sorted) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 last if (($latest->old_ArchiveStableId and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 $latest->old_ArchiveStableId->stable_id eq $arch_id->stable_id)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 or !$latest->old_ArchiveStableId);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 return $latest;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 =head2 get_release_display_names
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 Example : print "Unique release display_names in this tree:\n"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 foreach my $name (@{ $history->get_release_display_names }) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 print " $name\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 Description : Returns a chronologically sorted list of unique release
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 display_names in this tree.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 This method can be used to determine the number of columns when
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 plotting the history tree.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 Return type : Arrayref of strings.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 sub get_release_display_names {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 my @display_names = map { $_->[1] } @{ $self->_sort_releases };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 return \@display_names;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 =head2 get_release_db_names
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 Example : print "Unique release db_names in this tree:\n"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 foreach my $name (@{ $history->get_release_db_names }) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 print " $name\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 Description : Returns a chronologically sorted list of unique release
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 db_names in this tree.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 Return type : Arrayref of strings.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 sub get_release_db_names {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 my @db_names = map { $_->[0] } @{ $self->_sort_releases };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 return \@db_names;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 # Create a chronologically sorted list of releases.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 # Return type : Arrayref of arrayrefs (db_name, release)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 sub _sort_releases {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 unless ($self->{'sorted_tree'}->{'releases'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 my %unique = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 foreach my $archive_id (@{ $self->get_all_ArchiveStableIds }) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 $unique{join(':', $archive_id->db_name, $archive_id->release)} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 # sort releases by release number, then db_name; this should get them into
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 # chronological order
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 my @releases = sort { $a->[1] <=> $b->[1] || $a->[0] cmp $b->[0] }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 map { [ split(/:/, $_) ] } keys(%unique);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 $self->{'sorted_tree'}->{'releases'} = \@releases;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593 return $self->{'sorted_tree'}->{'releases'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597 =head2 get_unique_stable_ids
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 Example : print "Unique stable IDs in this tree:\n"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 foreach my $id (@{ $history->get_unique_stable_ids }) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601 print " $id\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 Description : Returns a list of unique stable IDs in this tree. Version is not
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 taken into account here. This method can be used to determine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 the number of rows when plotting the history with each stable ID
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 occupying one line.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 Sort algorithm will depend on what was chosen when the sorted
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 tree was generated. This ranges from a simple alphanumeric sort
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610 to algorithms trying to untangle the history tree. If no
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 pre-sorted data is found, an alphanumerically sorted list will
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612 be returned by default.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613 Return type : Arrayref of strings.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 sub get_unique_stable_ids {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 unless ($self->{'sorted_tree'}->{'stable_ids'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625 $self->{'sorted_tree'}->{'stable_ids'} = $self->_sort_stable_ids;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 return $self->{'sorted_tree'}->{'stable_ids'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633 # Returns a list of stable IDs in this history tree, sorted alphabetically.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 # This is the simplest sort function used and doesn't try to untangle the tree.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636 # Return type : Arrayref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638 sub _sort_stable_ids {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 my %unique = map { $_->stable_id => 1 } @{ $self->get_all_ArchiveStableIds };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641 return [sort keys %unique];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645 =head2 optimise_tree
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 Example : $history->optimise_tree;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648 Description : This method sorts the history tree so that the number of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649 overlapping branches is minimised (thus "untangling" the tree).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651 It uses a clustering algorithm for this which iteratively moves
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652 the nodes with the largest vertical distance next to each other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653 and looking for a mininum in total branch length. This might not
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654 produce the overall optimum but usually converges on a local
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 optimum very quickly.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656 Return type : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658 Caller : calculate_coords
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664 sub optimise_tree {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667 # get all non-self events
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668 my @links;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669 foreach my $event (@{ $self->get_all_StableIdEvents }) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670 next unless ($event->old_ArchiveStableId and $event->new_ArchiveStableId);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671 my $old_id = $event->old_ArchiveStableId->stable_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672 my $new_id = $event->new_ArchiveStableId->stable_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673 push @links, [$old_id, $new_id] if ($old_id ne $new_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676 # get initial list of sorted unique stable IDs and put them into a position
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677 # lookup hash
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678 my $i = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679 my %pos = map { $_ => $i++ } @{ $self->_sort_stable_ids };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681 my $opt_length;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682 my $successive_fails = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683 my $k = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684 my %seen;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686 # for debug purposes:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687 # find the number of permutations for the given number of stable IDs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688 my $fact = $self->_factorial(scalar(keys %pos));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690 OPT:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691 while ($successive_fails < 100) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693 # sort links by vertical distance
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694 #warn "sorting\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695 $self->_sort_links(\@links, \%pos);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697 # loop over sorted links
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698 SORTED:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699 foreach my $link (@links) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701 #warn " trying ".join('-', @$link)."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
703 $k++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
704
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
705 # remember last sort order
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
706 my %last = %pos;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
707
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
708 #my $this_order = join(':', sort { $pos{$a} <=> $pos{$b} } keys %pos);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
709 #warn " before $this_order\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
710
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
711 # try both to move bottom node next to top node's current position and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
712 # top node next to bottom node's position - one of the methods might give
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
713 # you better results
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
714 DIRECT:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
715 foreach my $direction (qw(up down)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
716
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
717 # move the nodes next to each other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
718 $self->_move_nodes($link, \%pos, $direction);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
719
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
720 # next if we've seen this sort order before
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
721 my $new_order = join(':', sort { $pos{$a} <=> $pos{$b} } keys %pos);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
722 #warn " after ($direction) $new_order\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
723 if ($seen{$new_order}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
724 #warn " seen\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
725 %pos = %last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
726 next DIRECT;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
727 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
728 $seen{$new_order} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
729
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
730 # calculate total link length for this sort order
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
731 my $total_length = $self->_total_link_length(\@links, \%pos);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
732
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
733 if (!$opt_length or $total_length < $opt_length) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
734 #warn " better ($total_length/$opt_length)\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
735 $opt_length = $total_length;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
736 $successive_fails = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
737 next OPT;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
738 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
739 #warn " worse ($total_length/$opt_length)\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
740 %pos = %last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
741 $successive_fails++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
742 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
743 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
744
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
745 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
746
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
747 last OPT;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
748
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
749 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
750
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
751 #warn "Needed $k tries (of $fact) to find optimal tree.\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
752
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
753 my @best = sort { $pos{$a} <=> $pos{$b} } keys %pos;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
754 $self->{'sorted_tree'}->{'stable_ids'} = \@best;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
755 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
756
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
757
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
758 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
759 # find the number of permutations for a give array size.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
760 # used for debugging code (compare implemented algorithm to looping over all
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
761 # possible permutations).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
762 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
763 sub _factorial {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
764 my ($self, $n) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
765 my $s = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
766 $s *= $n-- while $n > 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
767 return $s;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
768 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
769
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
770
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
771 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
772 # sort links by vertical distance
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
773 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
774 sub _sort_links {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
775 my ($self, $links, $pos) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
776
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
777 my @lookup;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
778
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
779 foreach my $link (@$links) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
780 my $dist = $pos->{$link->[0]} - $pos->{$link->[1]};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
781 $dist = -$dist if ($dist < 0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
782 push @lookup, [$dist, $link];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
783 #warn " $dist ".join(' ', @$link)."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
784 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
785
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
786 @$links = map { $_->[1] } sort { $b->[0] <=> $a->[0] } @lookup;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
787 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
788
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
789
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
790 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
791 # make two nodes adjacent by moving the second node next to the first node
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
792 # all other node coordinates are adjusted accordingly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
793 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
794 sub _move_nodes {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
795 my ($self, $link, $pos, $direction) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
796
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
797 my $first_pos = $pos->{$link->[0]};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
798 my $second_pos = $pos->{$link->[1]};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
799
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
800 # swap positions if necessary
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
801 if ($first_pos > $second_pos) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
802 my $tmp = $second_pos;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
803 $second_pos = $first_pos;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
804 $first_pos = $tmp;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
805 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
806 #warn " $first_pos:$second_pos\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
807
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
808 foreach my $p (keys %$pos) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
809
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
810 my $val = $pos->{$p};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
811
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
812 #warn " $p $val\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
813 if ($direction eq 'up') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
814 if ($val > $first_pos and $val < $second_pos) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
815 $val++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
816 } elsif ($val == $second_pos) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
817 $val = $first_pos + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
818 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
819 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
820 if ($val > $first_pos and $val < $second_pos) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
821 $val--;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
822 } elsif ($val == $first_pos) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
823 $val = $second_pos - 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
824 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
825 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
826
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
827 #warn " $p $val\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
828 $pos->{$p} = $val;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
829 #warn "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
830 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
831 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
832
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
833
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
834 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
835 # calculate the total link (vertical distance) length based on this sort order
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
836 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
837 sub _total_link_length {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
838 my ($self, $links, $pos) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
839
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
840 my $total_length;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
841
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
842 foreach my $link (@$links) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
843 my $length = $pos->{$link->[0]} - $pos->{$link->[1]};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
844 $length = -$length if ($length < 0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
845 $total_length += $length;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
846 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
847
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
848 return $total_length;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
849 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
850
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
851
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
852 =head2 coords_by_ArchiveStableId
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
853
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
854 Arg[1] : Bio::EnsEMBL::ArchiveStableId $archive_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
855 The ArchiveStableId to get tree grid coordinates for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
856 Example : my ($x, $y) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
857 @{ $history->coords_by_ArchiveStableId($archive_id) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
858 print $archive_id->stable_id, " coords: $x, $y\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
859 Description : Returns the coordinates of an ArchiveStableId in the history
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
860 tree grid. If the ArchiveStableId isn't found in this tree, an
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
861 empty list is returned.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
862
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
863 Coordinates are zero-based (i.e. the top leftmost element in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
864 the grid has coordinates [0, 0], not [1, 1]). This is to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
865 facilitate using them to create a matrix as a two-dimensional
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
866 array of arrays.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
867 Return type : Arrayref (x coordinate, y coordinate)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
868 Exceptions : thrown on wrong argument type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
869 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
870 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
871 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
872
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
873 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
874
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
875 sub coords_by_ArchiveStableId {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
876 my ($self, $archive_id) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
877
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
878 throw("Bio::EnsEMBL::ArchiveStableId object expected.")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
879 unless ($archive_id and ref($archive_id) and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
880 $archive_id->isa('Bio::EnsEMBL::ArchiveStableId'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
881
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
882 return $self->{'sorted_tree'}->{'coords'}->{$self->_node_id($archive_id)}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
883 || [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
884 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
885
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
886
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
887 =head2 calculate_coords
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
888
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
889 Example : $history->calculate_coords;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
890 Description : Pre-calculates the grid coordinates of all nodes in the tree.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
891 Return type : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
892 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
893 Caller : ArchiveStableIdAdaptor::fetch_history_by_stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
894 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
895 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
896
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
897 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
898
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
899 sub calculate_coords {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
900 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
901
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
902 # reset any previous tree cordinate calculations
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
903 $self->reset_tree;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
904
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
905 # the "master" information for the sorted tree is stored as the sorted lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
906 # of releases (x) and stable IDs (y). Sort them now.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
907 my $db_names = $self->get_release_db_names;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
908
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
909 # untangle tree by sorting stable IDs appropriately
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
910 $self->optimise_tree;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
911 my $stable_ids = $self->get_unique_stable_ids;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
912
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
913 # for performance reasons, additionally store coordinates in a lookup hash
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
914 foreach my $archive_id (@{ $self->get_all_ArchiveStableIds }) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
915
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
916 # coordinates are positions in the sorted lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
917 my $x = $self->_index_of($archive_id->db_name, $db_names);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
918 my $y = $self->_index_of($archive_id->stable_id, $stable_ids);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
919
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
920 $self->{'sorted_tree'}->{'coords'}->{$self->_node_id($archive_id)} =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
921 [ $x, $y ];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
922 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
923 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
924
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
925 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
926 # Description : Returns the index of an element in an array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
927 # Example : my @array = (a, b, c);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
928 # my $i = _index_of('b', \@array); # will return 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
929 # Return type : Int (or undef if element is not found in array)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
930 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
931 sub _index_of {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
932 my ($self, $element, $arrayref) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
933
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
934 throw("Expecting arrayref argument.") unless (ref($arrayref) eq 'ARRAY');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
935
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
936 my @array = @$arrayref;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
937
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
938 while (my $e = pop(@array)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
939 return scalar(@array) if ($e eq $element);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
940 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
941
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
942 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
943 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
944
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
945
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
946 =head2 consolidate_tree
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
947
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
948 Example : $history->consolidate_tree;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
949 Description : Consolidate the history tree. This means removing nodes where
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
950 there wasn't a change and bridging gaps in the history. The end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
951 result will be a sparse tree which only contains the necessary
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
952 information.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
953 Return type : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
954 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
955 Caller : ArchiveStableIdAdaptor->fetch_history_tree_by_stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
956 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
957 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
958
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
959 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
960
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
961 sub consolidate_tree {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
962 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
963
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
964 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
965 # get all self-events and creations/deletions and sort them (by stable ID and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
966 # chronologically)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
967 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
968 my @event_lookup;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
969
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
970 foreach my $event (@{ $self->get_all_StableIdEvents }) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
971
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
972 my $old_id = $event->old_ArchiveStableId;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
973 my $new_id = $event->new_ArchiveStableId;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
974
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
975 if (!$old_id or !$new_id or ($old_id->stable_id eq $new_id->stable_id)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
976 if ($old_id) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
977 push @event_lookup, [$old_id->stable_id, $old_id->release,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
978 $old_id->db_name, $event];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
979 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
980 push @event_lookup, [$new_id->stable_id, $new_id->release - 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
981 $new_id->db_name, $event];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
982 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
983 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
984 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
985
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
986 my @self_events = map { $_->[3] }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
987 sort { $a->[0] cmp $b->[0] || $a->[1] <=> $b->[1] || $a->[2] cmp $b->[2] }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
988 @event_lookup;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
989
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
990 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
991 # consolidate tree
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
992 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
993 my $last = shift(@self_events);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
994
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
995 while (my $event = shift(@self_events)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
996
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
997 my $lo = $last->old_ArchiveStableId;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
998 my $ln = $last->new_ArchiveStableId;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
999 my $eo = $event->old_ArchiveStableId;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1000 my $en = $event->new_ArchiveStableId;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1001
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1002 if ($lo and $eo and $en and $lo->stable_id eq $eo->stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1003 and $lo->version eq $eo->version) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1004
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1005 # this removes redundant nodes and connects the remaining nodes:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1006 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1007 # o--o--o -> o-----o
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1008 # 1 1 1 1 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1009
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1010 #warn 'A: '.$last->ident_string.' | '.$event->ident_string."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1011
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1012 $self->remove_StableIdEvent($last);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1013 $self->remove_StableIdEvent($event);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1014
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1015 $event->old_ArchiveStableId($lo);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1016
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1017 $self->add_StableIdEvents($event);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1018
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1019 } elsif ($ln and $eo and $ln->db_name ne $eo->db_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1020 and $ln->stable_id eq $eo->stable_id and $ln->version eq $eo->version) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1021
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1022 # try to brigde gaps
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1023
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1024 if ($en) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1025
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1026 # o--o o--o -> o--o-----o
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1027 # 1 2 2 2 1 2 2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1028 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1029 # o o--o -> o-----o
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1030 # 1 1 1 1 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1031
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1032 #warn 'X: '.$last->ident_string.' | '.$event->ident_string."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1033
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1034 $self->remove_StableIdEvent($event);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1035 $event->old_ArchiveStableId($ln);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1036 $self->add_StableIdEvents($event);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1037
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1038 } elsif ($lo) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1039
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1040 # there's a deletion event, deal with it differently
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1041
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1042 if ($lo->version eq $ln->version) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1043
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1044 # o--o o -> o-----o
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1045 # 1 1 1 1 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1046
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1047 #warn 'Y: '.$last->ident_string.' | '.$event->ident_string."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1048
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1049 $self->remove_StableIdEvent($last);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1050 $last->new_ArchiveStableId($eo);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1051 $self->add_StableIdEvents($last);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1052
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1053 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1054
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1055 # o--o o -> o--o--o
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1056 # 1 2 2 1 2 2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1057
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1058 #warn 'Z: '.$last->ident_string.' | '.$event->ident_string."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1059
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1060 $self->remove_StableIdEvent($event);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1061 $event->old_ArchiveStableId($ln);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1062 $event->new_ArchiveStableId($eo);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1063 $self->add_StableIdEvents($event);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1064
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1065 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1066
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1067 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1068
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1069 # creation followed by deletion in next mapping
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1070 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1071 # o o -> o--o
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1072 # 1 1 1 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1073
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1074 #warn 'Q: '.$last->ident_string.' | '.$event->ident_string."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1075
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1076 $self->remove_StableIdEvent($last);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1077 $self->remove_StableIdEvent($event);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1078 $event->old_ArchiveStableId($ln);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1079 $event->new_ArchiveStableId($eo);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1080 $self->add_StableIdEvents($event);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1081
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1082 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1083
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1084 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1085 #warn 'C: '.$last->ident_string.' | '.$event->ident_string."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1086 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1087
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1088 $last = $event;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1089 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1090
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1091 # now add ArchiveStableIds of the remaining events to the tree
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1092 $self->add_ArchiveStableIds_for_events;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1093 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1094
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1095
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1096 =head2 reset_tree
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1097
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1098 Example : $history->reset_tree;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1099 Description : Resets all pre-calculated tree grid data. Mostly used internally
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1100 by methods that modify the tree.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1101 Return type : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1102 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1103 Caller : internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1104 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1105 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1106
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1107 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1109 sub reset_tree {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1110 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1111 $self->{'sorted_tree'} = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1112 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1113
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1114
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1115 =head2 current_dbname
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1116
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1117 Arg[1] : (optional) String $dbname - the dbname to set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1118 Example : my $dbname = $history->current_dbname;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1119 Description : Getter/setter for current dbname.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1120 Return type : String
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1121 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1122 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1123 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1124 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1125
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1126 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1127
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1128 sub current_dbname {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1129 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1130 $self->{'current_dbname'} = shift if (@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1131 return $self->{'current_dbname'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1132 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1134
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1135 =head2 current_release
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1137 Arg[1] : (optional) Int $release - the release to set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1138 Example : my $release = $history->current_release;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1139 Description : Getter/setter for current release.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1140 Return type : Int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1141 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1142 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1143 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1144 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1146 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1147
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1148 sub current_release {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1149 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1150 $self->{'current_release'} = shift if (@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1151 return $self->{'current_release'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1152 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1153
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1155 =head2 current_assembly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1156
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1157 Arg[1] : (optional) String $assembly - the assembly to set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1158 Example : my $assembly = $history->current_assembly;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1159 Description : Getter/setter for current assembly.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1160 Return type : String
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1161 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1162 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1163 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1164 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1165
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1166 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1168 sub current_assembly {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1169 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1170 $self->{'current_assembly'} = shift if (@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1171 return $self->{'current_assembly'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1172 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1174
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1175 =head2 is_incomplete
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1177 Arg[1] : (optional) Boolean $incomplete
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1178 Example : if ($history->is_incomplete) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1179 print "Returned tree is incomplete due to too many mappings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1180 in the database.\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1181 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1182 Description : Getter/setter for incomplete flag. This is used by
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1183 ArchiveStableIdAdaptor to indicate that it finished building
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1184 the tree prematurely due to too many mappins in the db and can
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1185 be used by applications to print warning messages.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1186 Return type : Boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1187 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1188 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1189 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1190 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1191
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1192 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1194 sub is_incomplete {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1195 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1196 $self->{'incomplete'} = shift if (@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1197 return $self->{'incomplete'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1198 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1199
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1200
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1201 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1202