annotate variant_effect_predictor/Bio/EnsEMBL/DBSQL/ArchiveStableIdAdaptor.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
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::ArchiveStableIdAdaptor
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 $registry = "Bio::EnsEMBL::Registry";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 my $archiveStableIdAdaptor =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 $registry->get_adaptor( 'Human', 'Core', 'ArchiveStableId' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 my $stable_id = 'ENSG00000068990';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 my $arch_id = $archiveStableIdAdaptor->fetch_by_stable_id($stable_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 print("Latest incarnation of this stable ID:\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 printf( " Stable ID: %s.%d\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 $arch_id->stable_id(), $arch_id->version() );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 print(" Release: "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 . $arch_id->release() . " ("
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 . $arch_id->assembly() . ", "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 . $arch_id->db_name()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 . ")\n" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 print "\nStable ID history:\n\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 my $history =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 $archiveStableIdAdaptor->fetch_history_tree_by_stable_id(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 $stable_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 foreach my $a ( @{ $history->get_all_ArchiveStableIds } ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 printf( " Stable ID: %s.%d\n", $a->stable_id(), $a->version() );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 print(" Release: "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 . $a->release() . " ("
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 . $a->assembly() . ", "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 . $a->db_name()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 . ")\n\n" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 ArchiveStableIdAdaptor does all SQL to create ArchiveStableIds and works
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 stable_id_event
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 mapping_session
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 peptite_archive
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 gene_archive
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 tables inside the core database.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 This whole module has a status of At Risk as it is under development.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 fetch_by_stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 fetch_by_stable_id_version
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 fetch_by_stable_id_dbname
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 fetch_all_by_archive_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 fetch_predecessors_by_archive_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 fetch_successors_by_archive_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 fetch_history_tree_by_stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 add_all_current_to_history
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 list_dbnames
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 previous_dbname
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 next_dbname
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 get_peptide
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 get_current_release
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 get_current_assembly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 =head1 RELATED MODULES
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 Bio::EnsEMBL::ArchiveStableId
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 Bio::EnsEMBL::StableIdEvent
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 Bio::EnsEMBL::StableIdHistoryTree
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 package Bio::EnsEMBL::DBSQL::ArchiveStableIdAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 no warnings qw(uninitialized);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 use Bio::EnsEMBL::DBSQL::BaseAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 our @ISA = qw(Bio::EnsEMBL::DBSQL::BaseAdaptor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 use Bio::EnsEMBL::ArchiveStableId;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 use Bio::EnsEMBL::StableIdEvent;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 use Bio::EnsEMBL::StableIdHistoryTree;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 use Bio::EnsEMBL::Utils::Exception qw(deprecate warning throw);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 use constant MAX_ROWS => 30;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 use constant NUM_HIGH_SCORERS => 20;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 =head2 fetch_by_stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 Arg [1] : string $stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 Arg [2] : (optional) string $type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 Description : Retrives an ArchiveStableId that is the latest incarnation of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 given stable_id.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 Returntype : Bio::EnsEMBL::ArchiveStableId or undef if not in database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 sub fetch_by_stable_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 my $stable_id = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 my $arch_id = Bio::EnsEMBL::ArchiveStableId->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 -stable_id => $stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 -adaptor => $self
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 @_ ? $arch_id->type(shift) : $self->_resolve_type($arch_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 if ($self->lookup_current($arch_id)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 # stable ID is in current release
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 $arch_id->version($arch_id->current_version);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 $arch_id->db_name($self->dbc->dbname);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 $arch_id->release($self->get_current_release);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 $arch_id->assembly($self->get_current_assembly);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 # look for latest version of this stable id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 my $extra_sql = defined($arch_id->{'type'}) ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 " AND sie.type = '@{[lc($arch_id->{'type'})]}'" : '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 my $r = $self->_fetch_archive_id($stable_id, $extra_sql, $extra_sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 if ($r->{'new_stable_id'} and $r->{'new_stable_id'} eq $stable_id) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 # latest event is a self event, use new_* data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 $arch_id->version($r->{'new_version'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 $arch_id->release($r->{'new_release'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 $arch_id->assembly($r->{'new_assembly'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 $arch_id->db_name($r->{'new_db_name'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 # latest event is a deletion event (or mapping to other ID; this clause
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 # is only used to cope with buggy data where deletion events are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 # missing), use old_* data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 $arch_id->version($r->{'old_version'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 $arch_id->release($r->{'old_release'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 $arch_id->assembly($r->{'old_assembly'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 $arch_id->db_name($r->{'old_db_name'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 $arch_id->type(ucfirst(lc($r->{'type'})));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 if (! defined $arch_id->db_name) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 # couldn't find stable ID in archive or current db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 $arch_id->is_latest(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 return $arch_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 =head2 fetch_by_stable_id_version
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 Arg [1] : string $stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 Arg [2] : int $version
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 Description : Retrieve an ArchiveStableId with given version and stable ID.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 Returntype : Bio::EnsEMBL::ArchiveStableId
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 sub fetch_by_stable_id_version {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 my $stable_id = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 my $version = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 my $arch_id = Bio::EnsEMBL::ArchiveStableId->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 -stable_id => $stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 -version => $version,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 -adaptor => $self
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 @_ ? $arch_id->type(shift) : $self->_resolve_type($arch_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 if ($self->lookup_current($arch_id) && $arch_id->is_current) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 # this version is the current one
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 $arch_id->db_name($self->dbc->dbname);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 $arch_id->release($self->get_current_release);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 $arch_id->assembly($self->get_current_assembly);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 # find latest release this stable ID version is found in archive
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 my $extra_sql1 = qq(AND sie.old_version = "$version");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 my $extra_sql2 = qq(AND sie.new_version = "$version");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 my $r = $self->_fetch_archive_id($stable_id, $extra_sql1, $extra_sql2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 if ($r->{'new_stable_id'} and $r->{'new_stable_id'} eq $stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 and $r->{'new_version'} == $version) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 # latest event is a self event, use new_* data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 $arch_id->release($r->{'new_release'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 $arch_id->assembly($r->{'new_assembly'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 $arch_id->db_name($r->{'new_db_name'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 # latest event is a deletion event (or mapping to other ID; this clause
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 # is only used to cope with buggy data where deletion events are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 # missing), use old_* data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 $arch_id->release($r->{'old_release'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 $arch_id->assembly($r->{'old_assembly'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 $arch_id->db_name($r->{'old_db_name'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 $arch_id->type(ucfirst(lc($r->{'type'})));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 if (! defined $arch_id->db_name) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 # couldn't find stable ID version in archive or current release
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 return $arch_id;
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 fetch_by_stable_id_dbname
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 Arg [1] : string $stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 Arg [2] : string $db_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 Description : Create an ArchiveStableId from given arguments.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 Returntype : Bio::EnsEMBL::ArchiveStableId or undef if not in database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 sub fetch_by_stable_id_dbname {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 my $stable_id = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 my $db_name = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 my $arch_id = Bio::EnsEMBL::ArchiveStableId->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 -stable_id => $stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 -db_name => $db_name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 -adaptor => $self
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 @_ ? $arch_id->type(shift) : $self->_resolve_type($arch_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 if ($self->lookup_current($arch_id) and $db_name eq $self->dbc->dbname) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 # this version is the current one
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 $arch_id->version($arch_id->current_version);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 $arch_id->release($self->get_current_release);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 $arch_id->assembly($self->get_current_assembly);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 # find version for this dbname in the stable ID archive
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 my $extra_sql = defined($arch_id->{'type'}) ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 " AND sie.type = '@{[lc($arch_id->{'type'})]}'" : '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 my $extra_sql1 = $extra_sql . qq( AND ms.old_db_name = "$db_name");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 my $extra_sql2 = $extra_sql . qq( AND ms.new_db_name = "$db_name");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 my $r = $self->_fetch_archive_id($stable_id, $extra_sql1, $extra_sql2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 if ($r->{'new_stable_id'} and $r->{'new_stable_id'} eq $stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 and $r->{'new_db_name'} eq $db_name) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 # latest event is a self event, use new_* data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 $arch_id->release($r->{'new_release'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 $arch_id->assembly($r->{'new_assembly'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 $arch_id->version($r->{'new_version'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 # latest event is a deletion event (or mapping to other ID; this clause
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 # is only used to cope with buggy data where deletion events are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 # missing), use old_* data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 $arch_id->release($r->{'old_release'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 $arch_id->assembly($r->{'old_assembly'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 $arch_id->version($r->{'old_version'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 $arch_id->type(ucfirst(lc($r->{'type'})));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 if (! defined $arch_id->version ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 # couldn't find stable ID version in archive or current release
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 return $arch_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 # Helper method to do fetch ArchiveStableId from db.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 # Used by fetch_by_stable_id(), fetch_by_stable_id_version() and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 # fetch_by_stable_id_dbname().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 # Returns hashref as returned by DBI::sth::fetchrow_hashref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 sub _fetch_archive_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 my $stable_id = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 my $extra_sql1 = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 my $extra_sql2 = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 # using a UNION is much faster in this query than somthing like
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 # "... AND (sie.old_stable_id = ? OR sie.new_stable_id = ?)"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 my $sql = qq(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 (SELECT * FROM stable_id_event sie, mapping_session ms
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 WHERE sie.mapping_session_id = ms.mapping_session_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 AND sie.old_stable_id = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 $extra_sql1)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 UNION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 (SELECT * FROM stable_id_event sie, mapping_session ms
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 WHERE sie.mapping_session_id = ms.mapping_session_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 AND sie.new_stable_id = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 $extra_sql2)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 ORDER BY created DESC
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 LIMIT 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 my $sth = $self->prepare($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 $sth->execute($stable_id,$stable_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 my $r = $sth->fetchrow_hashref;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 $sth->finish;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 return $r;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 =head2 fetch_all_by_archive_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 Arg [1] : Bio::EnsEMBL::ArchiveStableId $archive_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 Arg [2] : String $return_type - type of ArchiveStableId to fetch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 Example : my $arch_id = $arch_adaptor->fetch_by_stable_id('ENSG0001');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 my @archived_transcripts =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 $arch_adaptor->fetch_all_by_archive_id($arch_id, 'Transcript');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 Description : Given a ArchiveStableId it retrieves associated ArchiveStableIds
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 of specified type (e.g. retrieve transcripts for genes or vice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 versa).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 See also fetch_associated_archived() for a different approach to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 retrieve this data.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 Returntype : listref Bio::EnsEMBL::ArchiveStableId
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 Caller : Bio::EnsEMBL::ArchiveStableId->get_all_gene_archive_ids,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 get_all_transcript_archive_ids, get_all_translation_archive_ids
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 sub fetch_all_by_archive_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 my $archive_id = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 my $return_type = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 my @result = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 my $lc_self_type = lc($archive_id->type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 my $lc_return_type = lc($return_type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 my $sql = qq(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 SELECT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 ga.${lc_return_type}_stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 ga.${lc_return_type}_version,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 m.old_db_name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 m.old_release,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 m.old_assembly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 FROM gene_archive ga, mapping_session m
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 WHERE ga.${lc_self_type}_stable_id = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 AND ga.${lc_self_type}_version = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 AND ga.mapping_session_id = m.mapping_session_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 my $sth = $self->prepare($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 $sth->bind_param(1, $archive_id->stable_id, SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 $sth->bind_param(2, $archive_id->version, SQL_SMALLINT);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 $sth->execute;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 my ($stable_id, $version, $db_name, $release, $assembly);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 $sth->bind_columns(\$stable_id, \$version, \$db_name, \$release, \$assembly);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 while ($sth->fetch) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 my $new_arch_id = Bio::EnsEMBL::ArchiveStableId->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 -stable_id => $stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 -version => $version,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 -db_name => $db_name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 -release => $release,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 -assembly => $assembly,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 -type => $return_type,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 -adaptor => $self
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 push( @result, $new_arch_id );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 $sth->finish();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 return \@result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 =head2 fetch_associated_archived
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 Arg[1] : Bio::EnsEMBL::ArchiveStableId $arch_id -
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 the ArchiveStableId to fetch associated archived IDs for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 Example : my ($arch_gene, $arch_tr, $arch_tl, $pep_seq) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 @{ $archive_adaptor->fetch_associated_archived($arch_id) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 Description : Fetches associated archived stable IDs from the db for a given
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 ArchiveStableId (version is taken into account).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 Return type : Listref of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 ArchiveStableId archived gene
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 ArchiveStableId archived transcript
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 (optional) ArchiveStableId archived translation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 (optional) peptide sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 Exceptions : thrown on missing or wrong argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 thrown if ArchiveStableID has no type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 Caller : Bio::EnsEMBL::ArchiveStableId->get_all_associated_archived()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 sub fetch_associated_archived {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 my $arch_id = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 throw("Need a Bio::EnsEMBL::ArchiveStableId") unless ($arch_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 and ref($arch_id) and $arch_id->isa('Bio::EnsEMBL::ArchiveStableId'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 my $type = $arch_id->type();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 if ( !defined($type) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 throw("Can't deduce ArchiveStableId type.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 $type = lc($type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 my $sql = qq(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 SELECT ga.gene_stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 ga.gene_version,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 ga.transcript_stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 ga.transcript_version,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 ga.translation_stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 ga.translation_version,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 pa.peptide_seq,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 ms.old_release,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 ms.old_assembly,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 ms.old_db_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 FROM (mapping_session ms, gene_archive ga)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 LEFT JOIN peptide_archive pa
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 ON ga.peptide_archive_id = pa.peptide_archive_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 WHERE ga.mapping_session_id = ms.mapping_session_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 AND ga.${type}_stable_id = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 AND ga.${type}_version = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 my $sth = $self->prepare($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 $sth->bind_param(1, $arch_id->stable_id, SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 $sth->bind_param(2, $arch_id->version, SQL_SMALLINT);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 $sth->execute;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 my @result = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 while (my $r = $sth->fetchrow_hashref) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 my @row = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 # create ArchiveStableIds genes, transcripts and translations
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 push @row, Bio::EnsEMBL::ArchiveStableId->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 -stable_id => $r->{'gene_stable_id'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 -version => $r->{'gene_version'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 -db_name => $r->{'old_db_name'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 -release => $r->{'old_release'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 -assembly => $r->{'old_assembly'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 -type => 'Gene',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 -adaptor => $self
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 push @row, Bio::EnsEMBL::ArchiveStableId->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 -stable_id => $r->{'transcript_stable_id'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 -version => $r->{'transcript_version'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 -db_name => $r->{'old_db_name'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 -release => $r->{'old_release'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 -assembly => $r->{'old_assembly'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 -type => 'Transcript',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 -adaptor => $self
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 if ($r->{'translation_stable_id'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 push @row, Bio::EnsEMBL::ArchiveStableId->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 -stable_id => $r->{'translation_stable_id'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 -version => $r->{'translation_version'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 -db_name => $r->{'old_db_name'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 -release => $r->{'old_release'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 -assembly => $r->{'old_assembly'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 -type => 'Translation',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 -adaptor => $self
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 # push peptide sequence onto result list
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 push @row, $r->{'peptide_seq'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 push @result, \@row;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 return \@result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 =head2 fetch_predecessors_by_archive_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 Arg [1] : Bio::EnsEMBL::ArchiveStableId
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 Description : Retrieve a list of ArchiveStableIds that were mapped to the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 given one. This method goes back only one level, to retrieve
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 a full predecessor history use fetch_predecessor_history, or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 ideally fetch_history_tree_by_stable_id for the complete
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 history network.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 Returntype : listref Bio::EnsEMBL::ArchiveStableId
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 Caller : Bio::EnsEMBL::ArchiveStableId->get_all_predecessors
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 sub fetch_predecessors_by_archive_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 my $arch_id = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 my @result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 if( ! ( defined $arch_id->stable_id() &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 defined $arch_id->db_name() )) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 throw( "Need db_name for predecessor retrieval" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 my $sql = qq(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 SELECT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 sie.old_stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577 sie.old_version,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 sie.type,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 m.old_db_name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 m.old_release,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 m.old_assembly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 FROM mapping_session m, stable_id_event sie
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 WHERE sie.mapping_session_id = m.mapping_session_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 AND sie.new_stable_id = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 AND m.new_db_name = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 my $sth = $self->prepare($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 $sth->bind_param(1, $arch_id->stable_id, SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590 $sth->bind_param(2, $arch_id->db_name, SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593 my ($old_stable_id, $old_version, $type, $old_db_name, $old_release, $old_assembly);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 $sth->bind_columns(\$old_stable_id, \$old_version, \$type, \$old_db_name, \$old_release, \$old_assembly);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 while ($sth->fetch) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597 if (defined $old_stable_id) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598 my $old_arch_id = Bio::EnsEMBL::ArchiveStableId->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 -stable_id => $old_stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 -version => $old_version,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601 -db_name => $old_db_name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 -release => $old_release,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 -assembly => $old_assembly,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 -type => $type,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 -adaptor => $self
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607 push( @result, $old_arch_id );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610 $sth->finish();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612 # if you didn't find any predecessors, there might be a gap in the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613 # mapping_session history (i.e. databases in mapping_session don't chain). To
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 # bridge the gap, look in the previous mapping_session for identical
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615 # stable_id.version
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616 unless (@result) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618 $sql = qq(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 SELECT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 sie.new_stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 sie.new_version,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622 sie.type,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 m.new_db_name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 m.new_release,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625 m.new_assembly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 FROM mapping_session m, stable_id_event sie
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627 WHERE sie.mapping_session_id = m.mapping_session_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 AND sie.new_stable_id = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629 AND m.new_db_name = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632 $sth = $self->prepare($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 my $curr_dbname = $arch_id->db_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636 PREV:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637 while (my $prev_dbname = $self->previous_dbname($curr_dbname)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639 $sth->bind_param(1,$arch_id->stable_id, SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 $sth->bind_param(2,$prev_dbname, SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643 $sth->bind_columns(\$old_stable_id, \$old_version, \$type, \$old_db_name, \$old_release, \$old_assembly);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645 while( $sth->fetch() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646 if (defined $old_stable_id) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 my $old_arch_id = Bio::EnsEMBL::ArchiveStableId->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648 -stable_id => $old_stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649 -version => $old_version,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650 -db_name => $old_db_name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651 -release => $old_release,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652 -assembly => $old_assembly,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653 -type => $type,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654 -adaptor => $self
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656 push( @result, $old_arch_id );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658 last PREV;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662 $curr_dbname = $prev_dbname;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666 $sth->finish();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669 return \@result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673 =head2 fetch_successors_by_archive_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675 Arg [1] : Bio::EnsEMBL::ArchiveStableId
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676 Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677 Description : Retrieve a list of ArchiveStableIds that the given one was
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678 mapped to. This method goes forward only one level, to retrieve
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679 a full successor history use fetch_successor_history, or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680 ideally fetch_history_tree_by_stable_id for the complete
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681 history network.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682 Returntype : listref Bio::EnsEMBL::ArchiveStableId
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684 Caller : Bio::EnsEMBL::ArchiveStableId->get_all_successors
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690 sub fetch_successors_by_archive_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692 my $arch_id = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693 my @result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696 if( ! ( defined $arch_id->stable_id() &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697 defined $arch_id->db_name() )) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698 throw( "Need db_name for successor retrieval" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701 my $sql = qq(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702 SELECT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
703 sie.new_stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
704 sie.new_version,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
705 sie.type,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
706 m.new_db_name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
707 m.new_release,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
708 m.new_assembly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
709 FROM mapping_session m, stable_id_event sie
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
710 WHERE sie.mapping_session_id = m.mapping_session_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
711 AND sie.old_stable_id = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
712 AND m.old_db_name = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
713 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
714
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
715 my $sth = $self->prepare( $sql );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
716 $sth->bind_param(1,$arch_id->stable_id,SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
717 $sth->bind_param(2,$arch_id->db_name,SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
718 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
719
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
720 my ($new_stable_id, $new_version, $type, $new_db_name, $new_release, $new_assembly);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
721 $sth->bind_columns(\$new_stable_id, \$new_version, \$type, \$new_db_name, \$new_release, \$new_assembly);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
722
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
723 while( $sth->fetch() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
724 if( defined $new_stable_id ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
725 my $new_arch_id = Bio::EnsEMBL::ArchiveStableId->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
726 -stable_id => $new_stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
727 -version => $new_version,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
728 -db_name => $new_db_name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
729 -release => $new_release,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
730 -assembly => $new_assembly,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
731 -type => $type,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
732 -adaptor => $self
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
733 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
734
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
735 push( @result, $new_arch_id );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
736 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
737 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
738 $sth->finish();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
739
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
740 # if you didn't find any successors, there might be a gap in the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
741 # mapping_session history (i.e. databases in mapping_session don't chain). To
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
742 # bridge the gap, look in the next mapping_session for identical
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
743 # stable_id.version
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
744 unless (@result) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
745
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
746 $sql = qq(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
747 SELECT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
748 sie.old_stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
749 sie.old_version,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
750 sie.type,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
751 m.old_db_name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
752 m.old_release,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
753 m.old_assembly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
754 FROM mapping_session m, stable_id_event sie
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
755 WHERE sie.mapping_session_id = m.mapping_session_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
756 AND sie.old_stable_id = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
757 AND m.old_db_name = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
758 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
759
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
760 $sth = $self->prepare($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
761
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
762 my $curr_dbname = $arch_id->db_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
763
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
764 NEXTDB:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
765 while (my $next_dbname = $self->next_dbname($curr_dbname)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
766
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
767 $sth->bind_param(1, $arch_id->stable_id, SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
768 $sth->bind_param(2, $next_dbname, SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
769 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
770
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
771 $sth->bind_columns(\$new_stable_id, \$new_version, \$type, \$new_db_name, \$new_release, \$new_assembly);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
772
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
773 while( $sth->fetch() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
774 if (defined $new_stable_id) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
775 my $new_arch_id = Bio::EnsEMBL::ArchiveStableId->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
776 -stable_id => $new_stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
777 -version => $new_version,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
778 -db_name => $new_db_name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
779 -release => $new_release,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
780 -assembly => $new_assembly,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
781 -type => $type,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
782 -adaptor => $self
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
783 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
784
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
785 push( @result, $new_arch_id );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
786
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
787 last NEXTDB;
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 $curr_dbname = $next_dbname;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
792
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
793 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
794
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
795 $sth->finish();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
796 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
797
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
798 return \@result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
799 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
800
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
801
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
802
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
803 =head2 fetch_history_tree_by_stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
804
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
805 Arg[1] : String $stable_id - the stable ID to fetch the history tree for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
806 Arg[2] : (optional) Int $num_high_scorers
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
807 number of mappings per stable ID allowed when filtering
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
808 Arg[3] : (optional) Int $max_rows
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
809 maximum number of stable IDs in history tree (used for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
810 filtering)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
811 Example : my $history = $archive_adaptor->fetch_history_tree_by_stable_id(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
812 'ENSG00023747897');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
813 Description : Returns the history tree for a given stable ID. This will
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
814 include a network of all stable IDs it is related to. The
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
815 method will try to return a minimal (sparse) set of nodes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
816 (ArchiveStableIds) and links (StableIdEvents) by removing any
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
817 redundant entries and consolidating mapping events so that only
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
818 changes are recorded.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
819 Return type : Bio::EnsEMBL::StableIdHistoryTree
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
820 Exceptions : thrown on missing argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
821 Caller : Bio::EnsEMBL::ArchiveStableId::get_history_tree, general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
822 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
823 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
824
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
825 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
826
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
827 sub fetch_history_tree_by_stable_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
828 my ($self, $stable_id, $num_high_scorers, $max_rows) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
829
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
830 throw("Expecting a stable ID argument.") unless $stable_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
831
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
832 $num_high_scorers ||= NUM_HIGH_SCORERS;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
833 $max_rows ||= MAX_ROWS;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
834
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
835 # using a UNION is much faster in this query than somthing like
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
836 # "... AND (sie.old_stable_id = ?) OR (sie.new_stable_id = ?)"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
837 my $sql = qq(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
838 SELECT sie.old_stable_id, sie.old_version,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
839 ms.old_db_name, ms.old_release, ms.old_assembly,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
840 sie.new_stable_id, sie.new_version,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
841 ms.new_db_name, ms.new_release, ms.new_assembly,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
842 sie.type, sie.score
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
843 FROM stable_id_event sie, mapping_session ms
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
844 WHERE sie.mapping_session_id = ms.mapping_session_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
845 AND sie.old_stable_id = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
846 UNION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
847 SELECT sie.old_stable_id, sie.old_version,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
848 ms.old_db_name, ms.old_release, ms.old_assembly,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
849 sie.new_stable_id, sie.new_version,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
850 ms.new_db_name, ms.new_release, ms.new_assembly,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
851 sie.type, sie.score
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
852 FROM stable_id_event sie, mapping_session ms
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
853 WHERE sie.mapping_session_id = ms.mapping_session_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
854 AND sie.new_stable_id = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
855 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
856
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
857 my $sth = $self->prepare($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
858
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
859 my $history = Bio::EnsEMBL::StableIdHistoryTree->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
860 -CURRENT_DBNAME => $self->dbc->dbname,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
861 -CURRENT_RELEASE => $self->get_current_release,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
862 -CURRENT_ASSEMBLY => $self->get_current_assembly,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
863 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
864
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
865 # remember stable IDs you need to do and those that are done. Initialise the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
866 # former hash with the focus stable ID
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
867 my %do = ($stable_id => 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
868 my %done;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
869
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
870 # while we got someting to do
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
871 while (my ($id) = keys(%do)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
872
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
873 # if we already have more than MAX_ROWS stable IDs in this tree, we can't
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
874 # build the full tree. Return undef.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
875 if (scalar(keys(%done)) > $max_rows) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
876 # warning("Too many related stable IDs (".scalar(keys(%done)).") to draw a history tree.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
877 $history->is_incomplete(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
878 $sth->finish;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
879 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
880 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
881
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
882 # mark this stable ID as done
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
883 delete $do{$id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
884 $done{$id} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
885
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
886 # fetch all stable IDs related to this one from the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
887 $sth->bind_param(1, $id, SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
888 $sth->bind_param(2, $id, SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
889 $sth->execute;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
890
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
891 my @events;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
892
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
893 while (my $r = $sth->fetchrow_hashref) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
894
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
895 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
896 # create old and new ArchiveStableIds and a StableIdEvent to link them
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
897 # add all of these to the history tree
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
898 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
899 my ($old_id, $new_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
900
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
901 if ($r->{'old_stable_id'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
902 $old_id = Bio::EnsEMBL::ArchiveStableId->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
903 -stable_id => $r->{'old_stable_id'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
904 -version => $r->{'old_version'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
905 -db_name => $r->{'old_db_name'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
906 -release => $r->{'old_release'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
907 -assembly => $r->{'old_assembly'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
908 -type => $r->{'type'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
909 -adaptor => $self
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
910 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
911 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
912
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
913 if ($r->{'new_stable_id'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
914 $new_id = Bio::EnsEMBL::ArchiveStableId->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
915 -stable_id => $r->{'new_stable_id'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
916 -version => $r->{'new_version'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
917 -db_name => $r->{'new_db_name'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
918 -release => $r->{'new_release'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
919 -assembly => $r->{'new_assembly'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
920 -type => $r->{'type'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
921 -adaptor => $self
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 my $event = Bio::EnsEMBL::StableIdEvent->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
926 -old_id => $old_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
927 -new_id => $new_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
928 -score => $r->{'score'}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
929 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
930
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
931 push @events, $event;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
932
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
933 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
934
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
935 # filter out low-scoring events; the number of highest scoring events
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
936 # returned is defined by NUM_HIGH_SCORERS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
937 my @others;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
938
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
939 foreach my $event (@events) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
940
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
941 my $old_id = $event->old_ArchiveStableId;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
942 my $new_id = $event->new_ArchiveStableId;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
943
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
944 # creation, deletion and mapping-to-self events are added to the history
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
945 # tree directly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
946 if (!$old_id || !$new_id || ($old_id->stable_id eq $new_id->stable_id)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
947 $history->add_StableIdEvents($event);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
948 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
949 push @others, $event;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
950 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
951
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
952 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
953
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
954 #if (scalar(@others) > $num_high_scorers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
955 # warn "Filtering ".(scalar(@others) - $num_high_scorers).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
956 # " low-scoring events.\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
957 #}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
958
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
959 my $k = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
960 foreach my $event (sort { $b->score <=> $a->score } @others) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
961 $history->add_StableIdEvents($event);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
962
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
963 # mark stable IDs as todo if appropriate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
964 $do{$event->old_ArchiveStableId->stable_id} = 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
965 unless $done{$event->old_ArchiveStableId->stable_id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
966 $do{$event->new_ArchiveStableId->stable_id} = 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
967 unless $done{$event->new_ArchiveStableId->stable_id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
968
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
969 last if (++$k == $num_high_scorers);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
970 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
971
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
972 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
973
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
974 $sth->finish;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
975
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
976 # try to consolidate the tree (remove redundant nodes, bridge gaps)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
977 $history->consolidate_tree;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
978
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
979 # now add ArchiveStableIds for current Ids not found in the archive
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
980 $self->add_all_current_to_history($history);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
981
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
982 # calculate grid coordinates for the sorted tree; this will also try to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
983 # untangle the tree
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
984 $history->calculate_coords;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
985
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
986 return $history;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
987 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
988
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
989
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
990 =head2 add_all_current_to_history
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
991
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
992 Arg[1] : Bio::EnsEMBL::StableIdHistoryTree $history -
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
993 the StableIdHistoryTree object to add the current IDs to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
994 Description : This method adds the current versions of all stable IDs found
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
995 in a StableIdHistoryTree object to the tree, by creating
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
996 appropriate Events for the stable IDs found in the *_stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
997 tables. This is a helper method for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
998 fetch_history_tree_by_stable_id(), see there for more
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
999 documentation.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1000 Return type : none (passed-in object is manipulated)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1001 Exceptions : thrown on missing or wrong argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1002 Caller : internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1003 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1004 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1005
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1006 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1007
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1008 sub add_all_current_to_history {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1009 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1010 my $history = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1011
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1012 unless ($history and $history->isa('Bio::EnsEMBL::StableIdHistoryTree')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1013 throw("Need a Bio::EnsEMBL::StableIdHistoryTree.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1014 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1015
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1016 my @ids = @{ $history->get_unique_stable_ids };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1017 my $id_string = join("', '", @ids);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1018
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1019 my $tmp_id = Bio::EnsEMBL::ArchiveStableId->new(-stable_id => $ids[0]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1020 my $type = lc($self->_resolve_type($tmp_id));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1021 return unless ($type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1022
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1023 # get current stable IDs from db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1024 my $sql = qq(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1025 SELECT stable_id, version FROM ${type}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1026 WHERE stable_id IN ('$id_string')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1027 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1028 my $sth = $self->prepare($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1029 $sth->execute;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1030
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1031 while (my ($stable_id, $version) = $sth->fetchrow_array) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1032
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1033 my $new_id = Bio::EnsEMBL::ArchiveStableId->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1034 -stable_id => $stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1035 -version => $version,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1036 -current_version => $version,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1037 -db_name => $self->dbc->dbname,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1038 -release => $self->get_current_release,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1039 -assembly => $self->get_current_assembly,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1040 -type => $type,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1041 -adaptor => $self
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1042 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1043
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1044 my $event = $history->get_latest_StableIdEvent($new_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1045 next unless ($event);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1046
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1047 if ($event->old_ArchiveStableId and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1048 $event->old_ArchiveStableId->stable_id eq $stable_id) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1049
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1050 # latest event was a self event
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1051 # update it with current stable ID and add to tree
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1052 $event->new_ArchiveStableId($new_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1053
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1054 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1055
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1056 # latest event was a non-self event
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1057 # create a new event where the old_id is the new_id from latest
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1058 my $new_event = Bio::EnsEMBL::StableIdEvent->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1059 -old_id => $event->new_ArchiveStableId,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1060 -new_id => $new_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1061 -score => $event->score,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1062 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1063 $history->add_StableIdEvents($new_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
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1068 # refresh node cache
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1069 $history->flush_ArchiveStableIds;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1070 $history->add_ArchiveStableIds_for_events;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1071 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1072
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1073
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1074 =head2 fetch_successor_history
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1075
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1076 Arg [1] : Bio::EnsEMBL::ArchiveStableId $arch_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1077 Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1078 Description : Gives back a list of archive stable ids which are successors in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1079 the stable_id_event tree of the given stable_id. Might well be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1080 empty.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1081
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1082 This method isn't deprecated, but in most cases you will rather
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1083 want to use fetch_history_tree_by_stable_id().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1084 Returntype : listref Bio::EnsEMBL::ArchiveStableId
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1085 Since every ArchiveStableId knows about it's successors, this is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1086 a linked tree.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1087 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1088 Caller : webcode for archive
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1089 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1090 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1091
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1092 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1093
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1094 sub fetch_successor_history {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1095 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1096 my $arch_id = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1097
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1098 my $current_db_name = $self->list_dbnames->[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1099 my $dbname = $arch_id->db_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1101 if ($dbname eq $current_db_name) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1102 return [$arch_id];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1103 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1104
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1105 my $old = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1106 my @result = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1107
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1108 push @$old, $arch_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1110 while ($dbname ne $current_db_name) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1111 my $new = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1112 while (my $asi = (shift @$old)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1113 push @$new, @{ $asi->get_all_successors };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1114 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1115
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1116 if (@$new) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1117 $dbname = $new->[0]->db_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1118 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1119 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1120 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1121
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1122 # filter duplicates
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1123 my %unique = map { join(":", $_->stable_id, $_->version, $_->release) =>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1124 $_ } @$new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1125 @$new = values %unique;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1127 @$old = @$new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1128 push @result, @$new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1129 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1130
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1131 return \@result;
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 fetch_predecessor_history
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1137 Arg [1] : Bio::EnsEMBL::ArchiveStableId $arch_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1138 Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1139 Description : Gives back a list of archive stable ids which are predecessors
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1140 in the stable_id_event tree of the given stable_id. Might well
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1141 be empty.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1142
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1143 This method isn't deprecated, but in most cases you will rather
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1144 want to use fetch_history_tree_by_stable_id().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1145 Returntype : listref Bio::EnsEMBL::ArchiveStableId
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1146 Since every ArchiveStableId knows about it's successors, this is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1147 a linked tree.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1148 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1149 Caller : webcode for archive
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1150 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1151 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1153 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1155 sub fetch_predecessor_history {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1156 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1157 my $arch_id = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1158
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1159 my $oldest_db_name = $self->list_dbnames->[-1];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1160 my $dbname = $arch_id->db_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1161
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1162 if ($dbname eq $oldest_db_name) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1163 return [$arch_id];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1164 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1165
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1166 my $old = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1167 my @result = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1168
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1169 push @$old, $arch_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1170
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1171 while ($dbname ne $oldest_db_name) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1172 my $new = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1173 while (my $asi = (shift @$old)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1174 push @$new, @{ $asi->get_all_predecessors };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1175 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1177 if( @$new ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1178 $dbname = $new->[0]->db_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1179 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1180 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1181 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1182
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1183 # filter duplicates
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1184 my %unique = map { join(":", $_->stable_id, $_->version, $_->release) =>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1185 $_ } @$new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1186 @$new = values %unique;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1187
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1188 @$old = @$new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1189 push @result, @$new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1190 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1191
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1192 return \@result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1193 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1194
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1195
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1196 =head2 list_dbnames
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1197
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1198 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1199 Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1200 Description : A list of available database names from the latest (current) to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1201 the oldest (ordered).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1202 Returntype : listref of strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1203 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1204 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1205 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1206 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1207
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1208 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1209
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1210 sub list_dbnames {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1211 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1212
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1213 if( ! defined $self->{'dbnames'} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1214
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1215 my $sql = qq(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1216 SELECT old_db_name, new_db_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1217 FROM mapping_session
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1218 ORDER BY created DESC
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1219 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1220 my $sth = $self->prepare( $sql );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1221 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1222 my ( $old_db_name, $new_db_name );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1223
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1224 my @dbnames = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1225 my %seen;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1226
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1227 $sth->bind_columns( \$old_db_name, \$new_db_name );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1228
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1229 while( $sth->fetch() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1230 # this code now can deal with non-chaining mapping sessions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1231 push(@{ $self->{'dbnames'} }, $new_db_name) unless ($seen{$new_db_name});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1232 $seen{$new_db_name} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1233
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1234 push(@{ $self->{'dbnames'} }, $old_db_name) unless ($seen{$old_db_name});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1235 $seen{$old_db_name} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1236 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1237
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1238 $sth->finish();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1239
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1240 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1241
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1242 return $self->{'dbnames'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1243 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1244
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1245
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1246 =head2 previous_dbname
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1247
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1248 Arg[1] : String $dbname - focus db name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1249 Example : my $prev_db = $self->previous_dbname($curr_db);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1250 Description : Returns the name of the next oldest database which has mapping
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1251 session information.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1252 Return type : String (or undef if not available)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1253 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1254 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1255 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1256
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1257 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1258
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1259 sub previous_dbname {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1260 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1261 my $dbname = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1262
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1263 my $curr_idx = $self->_dbname_index($dbname);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1264 my @dbnames = @{ $self->list_dbnames };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1265
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1266 if ($curr_idx == @dbnames) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1267 # this is the oldest dbname, so no previous one available
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1268 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1269 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1270 return $dbnames[$curr_idx+1];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1271 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1272 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1273
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1274
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1275 =head2 next_dbname
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1276
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1277 Arg[1] : String $dbname - focus db name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1278 Example : my $prev_db = $self->next_dbname($curr_db);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1279 Description : Returns the name of the next newest database which has mapping
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1280 session information.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1281 Return type : String (or undef if not available)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1282 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1283 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1284 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1285
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1286 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1288 sub next_dbname {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1289 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1290 my $dbname = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1291
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1292 my $curr_idx = $self->_dbname_index($dbname);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1293 my @dbnames = @{ $self->list_dbnames };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1295 if ($curr_idx == 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1296 # this is the latest dbname, so no next one available
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1297 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1298 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1299 return $dbnames[$curr_idx-1];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1300 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1301 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1302
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1303
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1304 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1305 # helper method to return the array index of a database in the ordered list of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1306 # available databases (as returned by list_dbnames()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1307 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1308 sub _dbname_index {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1309 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1310 my $dbname = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1311
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1312 my @dbnames = @{ $self->list_dbnames };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1313
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1314 for (my $i = 0; $i < @dbnames; $i++) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1315 if ($dbnames[$i] eq $dbname) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1316 return $i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1317 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1318 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1319 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1320
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1321
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1322 =head2 get_peptide
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1323
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1324 Arg [1] : Bio::EnsEMBL::ArchiveStableId $arch_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1325 Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1326 Description : Retrieves the peptide string for given ArchiveStableId. If its
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1327 not a peptide or not in the database returns undef.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1328 Returntype : string or undef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1329 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1330 Caller : Bio::EnsEMBL::ArchiveStableId->get_peptide, general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1331 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1332 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1333
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1334 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1335
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1336 sub get_peptide {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1337 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1338 my $arch_id = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1339
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1340 if ( lc( $arch_id->type() ) ne 'translation' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1341 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1342 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1343
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1344 my $sql = qq(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1345 SELECT pa.peptide_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1346 FROM peptide_archive pa, gene_archive ga
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1347 WHERE ga.translation_stable_id = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1348 AND ga.translation_version = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1349 AND ga.peptide_archive_id = pa.peptide_archive_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1350 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1351
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1352 my $sth = $self->prepare($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1353 $sth->bind_param( 1, $arch_id->stable_id, SQL_VARCHAR );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1354 $sth->bind_param( 2, $arch_id->version, SQL_SMALLINT );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1355 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1356
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1357 my ($peptide_seq) = $sth->fetchrow_array();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1358 $sth->finish();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1359
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1360 return $peptide_seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1361 } ## end sub get_peptide
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1362
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1363
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1364 =head2 get_current_release
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1365
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1366 Example : my $current_release = $archive_adaptor->get_current_release;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1367 Description : Returns the current release number (as found in the meta table).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1368 Return type : Int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1369 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1370 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1371 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1372 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1373
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1374 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1375
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1376 sub get_current_release {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1377 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1378
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1379 unless ($self->{'current_release'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1380 my $mca = $self->db->get_MetaContainer;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1381 my ($release) = @{ $mca->list_value_by_key('schema_version') };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1382 $self->{'current_release'} = $release;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1383 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1384
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1385 return $self->{'current_release'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1386 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1387
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1388
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1389 =head2 get_current_assembly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1390
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1391 Example : my $current_assembly = $archive_adaptor->get_current_assembly;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1392 Description : Returns the current assembly version (as found in the meta
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1393 table).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1394 Return type : String
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1395 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1396 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1397 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1398 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1399
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1400 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1401
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1402 sub get_current_assembly {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1403 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1404
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1405 unless ($self->{'current_assembly'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1406 my $mca = $self->db->get_MetaContainer;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1407 my ($assembly) = @{ $mca->list_value_by_key('assembly.default') };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1408 $self->{'current_assembly'} = $assembly;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1409 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1410
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1411 return $self->{'current_assembly'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1412 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1413
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1414
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1415 =head2 lookup_current
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1416
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1417 Arg[1] : Bio::EnsEMBL::ArchiveStableId $arch_id -
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1418 the stalbe ID to find the current version for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1419 Example : if ($self->lookup_version($arch_id) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1420 $arch_id->version($arch_id->current_version);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1421 $arch_id->db_name($self->dbc->dbname);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1422 Description : Look in [gene|transcript|translation]_stable_id if you can find
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1423 a current version for this stable ID. Set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1424 ArchiveStableId->current_version if found.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1425 Return type : Boolean (TRUE if current version found, else FALSE)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1426 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1427 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1428 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1429 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1430
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1431 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1432
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1433 sub lookup_current {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1434 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1435 my $arch_id = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1436
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1437 my $type = lc( $arch_id->type );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1438
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1439 unless ($type) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1440 warning("Can't lookup current version without a type.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1441 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1442 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1443
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1444 my $sql = qq(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1445 SELECT version FROM ${type}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1446 WHERE stable_id = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1447 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1448 my $sth = $self->prepare($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1449 $sth->execute( $arch_id->stable_id );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1450 my ($version) = $sth->fetchrow_array;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1451 $sth->finish;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1452
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1453 if ($version) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1454 $arch_id->current_version($version);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1455 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1456 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1457
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1458 # didn't find a current version
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1459 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1460 } ## end sub lookup_current
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1461
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1462
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1463 # infer type from stable ID format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1464 sub _resolve_type {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1465 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1466 my $arch_id = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1467
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1468 my $stable_id = $arch_id->stable_id();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1469 my $id_type;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1470
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1471 # first, try to infer type from stable ID format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1472 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1473 # Anopheles IDs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1474 if ($stable_id =~ /^AGAP.*/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1475 if ($stable_id =~ /.*-RA/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1476 $id_type = "Transcript";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1477 } elsif ($stable_id =~ /.*-PA/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1478 $id_type = "Translation";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1479 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1480 $id_type = "Gene";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1481 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1482
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1483 # standard Ensembl IDs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1484 } elsif ($stable_id =~ /.*G\d+$/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1485 $id_type = "Gene";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1486 } elsif ($stable_id =~ /.*T\d+$/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1487 $id_type = "Transcript";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1488 } elsif ($stable_id =~ /.*P\d+$/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1489 $id_type = "Translation";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1490 } elsif ($stable_id =~ /.*E\d+$/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1491 $id_type = "Exon";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1492
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1493 # if guessing fails, look in db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1494 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1495 my $sql = qq(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1496 SELECT type from stable_id_event
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1497 WHERE old_stable_id = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1498 OR new_stable_id = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1499 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1500 my $sth = $self->prepare($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1501 $sth->execute($stable_id, $stable_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1502 ($id_type) = $sth->fetchrow_array;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1503 $sth->finish;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1504 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1505
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1506 warning("Couldn't resolve stable ID type.") unless ($id_type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1507
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1508 $arch_id->type($id_type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1509 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1510
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1511
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1512 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1513