annotate variant_effect_predictor/Bio/EnsEMBL/DBSQL/OperonAdaptor.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
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 Copyright (c) 1999-2012 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 developers list at <dev@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 Bio::EnsEMBL::DBSQL::OperonAdaptor - Database adaptor for the retrieval and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 storage of Operon objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 my $operon_adaptor = Bio::EnsEMBL::DBSQL::OperonAdaptor->new($dba);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 $operon_adaptor->store($operon);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 my $operon2 = $operon_adaptor->fetch_by_dbID( $operon->dbID() );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 This is a database aware adaptor for the retrieval and storage of operon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 objects.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 package Bio::EnsEMBL::DBSQL::OperonAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 use Bio::EnsEMBL::Utils::Exception qw( deprecate throw warning );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 use Bio::EnsEMBL::Utils::Scalar qw( assert_ref );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 use Bio::EnsEMBL::DBSQL::SliceAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 use Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 use Bio::EnsEMBL::DBSQL::DBAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 use Bio::EnsEMBL::Operon;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 use vars '@ISA';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 @ISA = qw(Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 # _tables
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 # Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 # Description: PROTECTED implementation of superclass abstract method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 # Returns the names, aliases of the tables to use for queries.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 # Returntype : list of listrefs of strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 # Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 # Caller : internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 # Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 sub _tables {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 return ( [ 'operon', 'o' ] );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 # _columns
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 # Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 # Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 # Description: PROTECTED implementation of superclass abstract method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 # Returns a list of columns to use for queries.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 # Returntype : list of strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 # Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 # Caller : internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 # Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 sub _columns {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 my $created_date =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 $self->db()->dbc()->from_date_to_seconds("o.created_date");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 my $modified_date =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 $self->db()->dbc()->from_date_to_seconds("o.modified_date");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 return ( 'o.operon_id', 'o.seq_region_id', 'o.seq_region_start',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 'o.seq_region_end', 'o.seq_region_strand', 'o.display_label',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 'o.analysis_id', 'o.stable_id', 'o.version',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 $created_date, $modified_date );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 =head2 list_dbIDs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 Example : @operon_ids = @{$operon_adaptor->list_dbIDs()};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 Description: Gets an array of internal ids for all operons in the current db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 Arg[1] : <optional> int. not 0 for the ids to be sorted by the seq_region.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 Returntype : Listref of Ints
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 sub list_dbIDs {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 my ( $self, $ordered ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 return $self->_list_dbIDs( "operon", undef, $ordered );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 =head2 list_stable_ids
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 Example : @stable_operon_ids = @{$operon_adaptor->list_stable_ids()};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 Description: Gets an listref of stable ids for all operons in the current db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 Returntype : reference to a list of strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 sub list_stable_ids {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 return $self->_list_dbIDs( "operon", "stable_id" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 sub list_seq_region_ids {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 return $self->_list_seq_region_ids('operon');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 =head2 fetch_by_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 Arg [1] : String $label - name of operon to fetch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 Example : my $operon = $operonAdaptor->fetch_by_name("accBC");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 Description: Returns the operon which has the given display label or undef if
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 there is none. If there are more than 1, only the first is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 reported.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 Returntype : Bio::EnsEMBL::Operon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 sub fetch_by_name {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 my $label = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 my $constraint = "o.display_label = ?";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 $self->bind_param_generic_fetch( $label, SQL_VARCHAR );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 my ($operon) = @{ $self->generic_fetch($constraint) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 return $operon;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 =head2 fetch_by_stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 Arg [1] : String $id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 The stable ID of the operon to retrieve
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 Example : $operon = $operon_adaptor->fetch_by_stable_id('ENSG00000148944');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 Description: Retrieves a operon object from the database via its stable id.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 The operon will be retrieved in its native coordinate system (i.e.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 in the coordinate system it is stored in the database). It may
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 be converted to a different coordinate system through a call to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 transform() or transfer(). If the operon or exon is not found
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 undef is returned instead.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 Returntype : Bio::EnsEMBL::Operon or undef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 Exceptions : if we cant get the operon in given coord system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 sub fetch_by_stable_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 my ( $self, $stable_id ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 my $constraint = "o.stable_id = ?";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 $self->bind_param_generic_fetch( $stable_id, SQL_VARCHAR );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 my ($operon) = @{ $self->generic_fetch($constraint) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 return $operon;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 =head2 fetch_all
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 Example : $operons = $operon_adaptor->fetch_all();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 Description : Similar to fetch_by_stable_id, but retrieves all
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 operons stored in the database.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 Returntype : listref of Bio::EnsEMBL::Operon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 sub fetch_all {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 my $constraint = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 my @operons = @{ $self->generic_fetch($constraint) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 return \@operons;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 =head2 fetch_all_versions_by_stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 Arg [1] : String $stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 The stable ID of the operon to retrieve
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 Example : $operon = $operon_adaptor->fetch_all_versions_by_stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 ('ENSG00000148944');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 Description : Similar to fetch_by_stable_id, but retrieves all versions of a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 operon stored in the database.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 Returntype : listref of Bio::EnsEMBL::Operon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 Exceptions : if we cant get the operon in given coord system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 sub fetch_all_versions_by_stable_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 my ( $self, $stable_id ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 my $constraint = "o.stable_id = ?";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 $self->bind_param_generic_fetch( $stable_id, SQL_VARCHAR );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 return $self->generic_fetch($constraint);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 =head2 fetch_all_by_Slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 Arg [1] : Bio::EnsEMBL::Slice $slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 The slice to fetch operons on.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 Arg [2] : (optional) string $logic_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 the logic name of the type of features to obtain
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 Arg [3] : (optional) boolean $load_transcripts
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 if true, transcripts will be loaded immediately rather than
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 lazy loaded later.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 Arg [4] : (optional) string $source
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 the source name of the features to obtain.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 Arg [5] : (optional) string biotype
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 the biotype of the features to obtain.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 Example : @operons = @{$operon_adaptor->fetch_all_by_Slice()};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 Description: Overrides superclass method to optionally load transcripts
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 immediately rather than lazy-loading them later. This
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 is more efficient when there are a lot of operons whose
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 transcripts are going to be used.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 Returntype : reference to list of operons
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 Exceptions : thrown if exon cannot be placed on transcript slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 Caller : Slice::get_all_operons
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 sub fetch_all_by_Slice {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 my ( $self, $slice, $logic_name, $load_transcripts ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 my $constraint = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 my $operons =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 $self->SUPER::fetch_all_by_Slice_constraint( $slice, $constraint,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 $logic_name );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 # If there are less than two operons, still do lazy-loading.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 if ( !$load_transcripts || @$operons < 2 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 return $operons;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 # Preload all of the transcripts now, instead of lazy loading later,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 # faster than one query per transcript.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 # First check if transcripts are already preloaded.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 # FIXME: Should check all transcripts.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 if ( exists( $operons->[0]->{'_operon_transcript_array'} ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 return $operons;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 # Get extent of region spanned by transcripts.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 my ( $min_start, $max_end );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 foreach my $o (@$operons) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 if ( !defined($min_start) || $o->seq_region_start() < $min_start ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 $min_start = $o->seq_region_start();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 if ( !defined($max_end) || $o->seq_region_end() > $max_end ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 $max_end = $o->seq_region_end();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 my $ext_slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 if ( $min_start >= $slice->start() && $max_end <= $slice->end() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 $ext_slice = $slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 my $sa = $self->db()->get_SliceAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 $ext_slice =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 $sa->fetch_by_region( $slice->coord_system->name(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 $slice->seq_region_name(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 $min_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 $max_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 $slice->strand(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 $slice->coord_system->version() );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 # Associate transcript identifiers with operons.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 my %o_hash = map { $_->dbID => $_ } @{$operons};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 my $o_id_str = join( ',', keys(%o_hash) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 my $sth =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 $self->prepare( "SELECT operon_id, operon_transcript_id "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 . "FROM operon_transcript "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 . "WHERE operon_id IN ($o_id_str)" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 my ( $o_id, $tr_id );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 $sth->bind_columns( \( $o_id, $tr_id ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 my %tr_o_hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 while ( $sth->fetch() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 $tr_o_hash{$tr_id} = $o_hash{$o_id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 my $ta = $self->db()->get_OperonTranscriptAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 my $transcripts =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 $ta->fetch_all_by_Slice( $ext_slice,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 1, undef,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 sprintf( "ot.operon_transcript_id IN (%s)",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 join( ',',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 sort { $a <=> $b }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 keys(%tr_o_hash) ) ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 # Move transcripts onto operon slice, and add them to operons.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 foreach my $tr ( @{$transcripts} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 if ( !exists( $tr_o_hash{ $tr->dbID() } ) ) { next }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 my $new_tr;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 if ( $slice != $ext_slice ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 $new_tr = $tr->transfer($slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 if ( !defined($new_tr) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 throw( "Unexpected. "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 . "Transcript could not be transfered onto operon slice."
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 $new_tr = $tr;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 $tr_o_hash{ $tr->dbID() }->add_OperonTranscript($new_tr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 return $operons;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 } ## end sub fetch_all_by_Slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 =head2 fetch_by_transcript_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 Arg [1] : Int $trans_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 Unique database identifier for the transcript whose operon should
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 be retrieved. The operon is returned in its native coord
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 system (i.e. the coord_system it is stored in). If the coord
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 system needs to be changed, then tranform or transfer should
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 be called on the returned object. undef is returned if the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 operon or transcript is not found in the database.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 Example : $operon = $operon_adaptor->fetch_by_transcript_id(1241);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 Description: Retrieves a operon from the database via the database identifier
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 of one of its transcripts.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 Returntype : Bio::EnsEMBL::Operon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 Caller : operonral
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 sub fetch_by_operon_transcript_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 my ( $self, $trans_id ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 # this is a cheap SQL call
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 my $sth = $self->prepare(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 qq(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 SELECT tr.operon_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 FROM operon_transcript tr
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 WHERE tr.operon_transcript_id = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 $sth->bind_param( 1, $trans_id, SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 my ($operonid) = $sth->fetchrow_array();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 $sth->finish();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 return undef if ( !defined $operonid );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 my $operon = $self->fetch_by_dbID($operonid);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 return $operon;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 =head2 fetch_by_operon_transcript_stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 Arg [1] : string $trans_stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 transcript stable ID whose operon should be retrieved
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 Example : my $operon = $operon_adaptor->fetch_by_operon_transcript_stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 ('ENST0000234');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 Description: Retrieves a operon from the database via the stable ID of one of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 its transcripts
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 Returntype : Bio::EnsEMBL::Operon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 Caller : operonral
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 sub fetch_by_operon_transcript_stable_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 my ( $self, $trans_stable_id ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 my $sth = $self->prepare(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 qq(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 SELECT operon_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 FROM operon_transcript
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 WHERE stable_id = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 $sth->bind_param( 1, $trans_stable_id, SQL_VARCHAR );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 my ($operonid) = $sth->fetchrow_array();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 $sth->finish;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 return undef if ( !defined $operonid );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 my $operon = $self->fetch_by_dbID($operonid);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 return $operon;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 sub fetch_by_operon_transcript {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 my ( $self, $trans ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 assert_ref( $trans, 'Bio::EnsEMBL::OperonTranscript' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 $self->fetch_by_operon_transcript_id( $trans->dbID() );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 =head2 store
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 Arg [1] : Bio::EnsEMBL::Operon $operon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 The operon to store in the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 Arg [2] : ignore_release in xrefs [default 1] set to 0 to use release info
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 in external database references
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 Example : $operon_adaptor->store($operon);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 Description: Stores a operon in the database.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 Returntype : the database identifier (dbID) of the newly stored operon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 Exceptions : thrown if the $operon is not a Bio::EnsEMBL::Operon or if
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 $operon does not have an analysis object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 sub store {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 my ( $self, $operon, $ignore_release ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 if ( !ref $operon || !$operon->isa('Bio::EnsEMBL::Operon') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 throw("Must store a operon object, not a $operon");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 my $db = $self->db();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 if ( $operon->is_stored($db) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 return $operon->dbID();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 my $analysis = $operon->analysis();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 throw("Operons must have an analysis object.") if(!defined($analysis));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 my $analysis_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 if ( $analysis->is_stored($db) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 $analysis_id = $analysis->dbID();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 $analysis_id = $db->get_AnalysisAdaptor->store( $analysis );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 # ensure coords are correct before storing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 #$operon->recalculate_coordinates();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 my $seq_region_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 ( $operon, $seq_region_id ) = $self->_pre_store($operon);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 my $store_operon_sql = qq(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 INSERT INTO operon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 SET seq_region_id = ?,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 seq_region_start = ?,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 seq_region_end = ?,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 seq_region_strand = ?,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 display_label = ?,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 analysis_id = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 if ( defined($operon->stable_id()) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 my $created = $self->db->dbc->from_seconds_to_date($operon->created_date());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 my $modified = $self->db->dbc->from_seconds_to_date($operon->modified_date());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 $store_operon_sql .= ", stable_id = ?, version = ?, created_date = " . $created . ",modified_date = " . $modified;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 # column status is used from schema version 34 onwards (before it was
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 # confidence)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 my $sth = $self->prepare($store_operon_sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 $sth->bind_param( 1, $seq_region_id, SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 $sth->bind_param( 2, $operon->start(), SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 $sth->bind_param( 3, $operon->end(), SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 $sth->bind_param( 4, $operon->strand(), SQL_TINYINT );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 $sth->bind_param( 5, $operon->display_label(), SQL_VARCHAR );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 $sth->bind_param( 6, $analysis_id, SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 if ( defined($operon->stable_id()) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 $sth->bind_param( 7, $operon->stable_id(), SQL_VARCHAR );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 my $version = ($operon->version()) ? $operon->version() : 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 $sth->bind_param( 8, $version, SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 $sth->finish();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 my $operon_dbID = $sth->{'mysql_insertid'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 my $transcripts = $operon->get_all_OperonTranscripts();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 if ( $transcripts && scalar @$transcripts ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 my $transcript_adaptor = $db->get_OperonTranscriptAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 for my $transcript (@$transcripts) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 $transcript_adaptor->store( $transcript, $operon_dbID );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 # store the dbentries associated with this operon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 my $dbEntryAdaptor = $db->get_DBEntryAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 foreach my $dbe ( @{ $operon->get_all_DBEntries } ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 $dbEntryAdaptor->store( $dbe, $operon_dbID, "Operon", $ignore_release );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 # store operon attributes if there are any
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 my $attrs = $operon->get_all_Attributes();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 if ( $attrs && scalar @$attrs ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 my $attr_adaptor = $db->get_AttributeAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 $attr_adaptor->store_on_Operon( $operon, $attrs );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 # set the adaptor and dbID on the original passed in operon not the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 # transfered copy
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 $operon->adaptor($self);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 $operon->dbID($operon_dbID);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 return $operon_dbID;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 } ## end sub store
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 =head2 remove
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 Arg [1] : Bio::EnsEMBL::Operon $operon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 the operon to remove from the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 Example : $operon_adaptor->remove($operon);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 Description: Removes a operon completely from the database. All associated
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 transcripts, exons, stable_identifiers, descriptions, etc.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 are removed as well. Use with caution!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 Exceptions : throw on incorrect arguments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 warning if operon is not stored in this database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 sub remove {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 my $operon = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 if ( !ref($operon) || !$operon->isa('Bio::EnsEMBL::Operon') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 throw("Bio::EnsEMBL::Operon argument expected.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577 if ( !$operon->is_stored( $self->db() ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 warning( "Cannot remove operon "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 . $operon->dbID()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 . ". Is not stored in "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 . "this database." );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 # remove all object xrefs associated with this operon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 my $dbe_adaptor = $self->db()->get_DBEntryAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 foreach my $dbe ( @{ $operon->get_all_DBEntries() } ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 $dbe_adaptor->remove_from_object( $dbe, $operon, 'Operon' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592 # remove all of the transcripts associated with this operon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593 my $transcriptAdaptor = $self->db->get_OperonTranscriptAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 foreach my $trans ( @{ $operon->get_all_OperonTranscripts() } ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595 $transcriptAdaptor->remove($trans);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598 # remove this operon from the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 my $sth = $self->prepare("DELETE FROM operon WHERE operon_id = ? ");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601 $sth->bind_param( 1, $operon->dbID, SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 $sth->finish();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 # unset the operon identifier and adaptor thereby flagging it as unstored
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607 $operon->dbID(undef);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 $operon->adaptor(undef);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 } ## end sub remove
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613 # _objs_from_sth
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615 # Arg [1] : StatementHandle $sth
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616 # Arg [2] : Bio::EnsEMBL::AssemblyMapper $mapper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 # Arg [3] : Bio::EnsEMBL::Slice $dest_slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618 # Description: PROTECTED implementation of abstract superclass method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 # responsible for the creation of Operons
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 # Returntype : listref of Bio::EnsEMBL::Operon in target coordinate system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 # Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622 # Caller : internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 # Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625 sub _objs_from_sth {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 my ( $self, $sth, $mapper, $dest_slice ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629 # This code is ugly because an attempt has been made to remove as many
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 # function calls as possible for speed purposes. Thus many caches and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631 # a fair bit of gymnastics is used.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 my $sa = $self->db()->get_SliceAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635 my $aa = $self->db->get_AnalysisAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637 my @operons;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638 my %analysis_hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639 my %slice_hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 my %sr_name_hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641 my %sr_cs_hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642 my ( $stable_id, $version, $created_date, $modified_date, $analysis_id );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644 my ( $operon_id, $seq_region_id, $seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645 $seq_region_end, $seq_region_strand, $display_label );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 $sth->bind_columns( \$operon_id, \$seq_region_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648 \$seq_region_start, \$seq_region_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649 \$seq_region_strand, \$display_label,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650 \$analysis_id, \$stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651 \$version, \$created_date,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652 \$modified_date );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654 my $asm_cs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 my $cmp_cs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656 my $asm_cs_vers;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657 my $asm_cs_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658 my $cmp_cs_vers;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659 my $cmp_cs_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660 if ($mapper) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661 $asm_cs = $mapper->assembled_CoordSystem();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662 $cmp_cs = $mapper->component_CoordSystem();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663 $asm_cs_name = $asm_cs->name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664 $asm_cs_vers = $asm_cs->version();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665 $cmp_cs_name = $cmp_cs->name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666 $cmp_cs_vers = $cmp_cs->version();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669 my $dest_slice_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670 my $dest_slice_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671 my $dest_slice_strand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672 my $dest_slice_length;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673 my $dest_slice_sr_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674 my $dest_slice_seq_region_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675 if ($dest_slice) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676 $dest_slice_start = $dest_slice->start();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677 $dest_slice_end = $dest_slice->end();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678 $dest_slice_strand = $dest_slice->strand();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679 $dest_slice_length = $dest_slice->length();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680 $dest_slice_sr_name = $dest_slice->seq_region_name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681 $dest_slice_seq_region_id = $dest_slice->get_seq_region_id();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684 my $count = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685 OPERON: while ( $sth->fetch() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686 $count++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687 #get the analysis object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688 my $analysis = $analysis_hash{$analysis_id} ||=
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689 $aa->fetch_by_dbID($analysis_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690 $analysis_hash{$analysis_id} = $analysis;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691 #need to get the internal_seq_region, if present
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692 $seq_region_id = $self->get_seq_region_id_internal($seq_region_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693 #get the slice object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694 my $slice = $slice_hash{ "ID:" . $seq_region_id };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696 if ( !$slice ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697 $slice = $sa->fetch_by_seq_region_id($seq_region_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698 $slice_hash{ "ID:" . $seq_region_id } = $slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699 $sr_name_hash{$seq_region_id} = $slice->seq_region_name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700 $sr_cs_hash{$seq_region_id} = $slice->coord_system();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
703 my $sr_name = $sr_name_hash{$seq_region_id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
704 my $sr_cs = $sr_cs_hash{$seq_region_id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
705 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
706 # remap the feature coordinates to another coord system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
707 # if a mapper was provided
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
708 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
709 if ($mapper) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
710
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
711
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
712 if (defined $dest_slice && $mapper->isa('Bio::EnsEMBL::ChainedAssemblyMapper') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
713 ( $seq_region_id, $seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
714 $seq_region_end, $seq_region_strand )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
715 =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
716 $mapper->map( $sr_name, $seq_region_start, $seq_region_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
717 $seq_region_strand, $sr_cs, 1, $dest_slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
718
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
719 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
720
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
721 ( $seq_region_id, $seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
722 $seq_region_end, $seq_region_strand )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
723 =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
724 $mapper->fastmap( $sr_name, $seq_region_start, $seq_region_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
725 $seq_region_strand, $sr_cs );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
726 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
727
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
728 #skip features that map to gaps or coord system boundaries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
729 next OPERON if ( !defined($seq_region_id) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
730
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
731 #get a slice in the coord system we just mapped to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
732 if ( $asm_cs == $sr_cs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
733 || ( $cmp_cs != $sr_cs && $asm_cs->equals($sr_cs) ) )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
734 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
735 $slice = $slice_hash{ "ID:" . $seq_region_id } ||=
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
736 $sa->fetch_by_seq_region_id($seq_region_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
737 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
738 $slice = $slice_hash{ "ID:" . $seq_region_id } ||=
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
739 $sa->fetch_by_seq_region_id($seq_region_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
740 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
741 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
742
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
743 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
744 # If a destination slice was provided convert the coords
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
745 # If the dest_slice starts at 1 and is foward strand, nothing needs doing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
746 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
747 if ($dest_slice) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
748 if ( $dest_slice_start != 1 || $dest_slice_strand != 1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
749 if ( $dest_slice_strand == 1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
750 $seq_region_start =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
751 $seq_region_start - $dest_slice_start + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
752 $seq_region_end = $seq_region_end - $dest_slice_start + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
753 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
754 my $tmp_seq_region_start = $seq_region_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
755 $seq_region_start = $dest_slice_end - $seq_region_end + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
756 $seq_region_end =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
757 $dest_slice_end - $tmp_seq_region_start + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
758 $seq_region_strand *= -1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
759 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
760 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
761
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
762 #throw away features off the end of the requested slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
763 if ( $seq_region_end < 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
764 || $seq_region_start > $dest_slice_length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
765 || ( $dest_slice_seq_region_id != $seq_region_id ) )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
766 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
767 # print STDERR "IGNORED DUE TO CUTOFF $dest_slice_seq_region_id ne $seq_region_id . $sr_name\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
768 next OPERON;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
769 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
770 $slice = $dest_slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
771 } ## end if ($dest_slice)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
772
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
773 push( @operons,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
774 Bio::EnsEMBL::Operon->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
775 -START => $seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
776 -END => $seq_region_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
777 -STRAND => $seq_region_strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
778 -SLICE => $slice,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
779 -DISPLAY_LABEL => $display_label,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
780 -ADAPTOR => $self,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
781 -DBID => $operon_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
782 -STABLE_ID => $stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
783 -VERSION => $version,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
784 -CREATED_DATE => $created_date || undef,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
785 -MODIFIED_DATE => $modified_date || undef,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
786 -ANALYSIS => $analysis ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
787
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
788 } ## end while ( $sth->fetch() )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
789
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
790 return \@operons;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
791 } ## end sub _objs_from_sth
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
792
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
793 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
794