annotate variant_effect_predictor/Bio/EnsEMBL/DBSQL/SimpleFeatureAdaptor.pm @ 2:a5976b2dce6f

changing defualt values for ensembl database
author mahtabm
date Thu, 11 Apr 2013 17:15:42 +1000
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::DBSQL::SimpleFeatureAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 my $reg = 'Bio::EnsEMBL::Registry';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 $reg->
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 load_registry_from_db( ...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 my $sfa =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 $reg->get_adaptor('homo sapiens', 'core', 'SimpleFeature');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 print ref($sfa), "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 my $sf_aref =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 $sfa->fetch_all;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 print scalar @$sf_aref, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 Simple Feature Adaptor - database access for simple features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 package Bio::EnsEMBL::DBSQL::SimpleFeatureAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 use Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 use Bio::EnsEMBL::SimpleFeature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 use Bio::EnsEMBL::Utils::Exception qw(throw warning);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 @ISA = qw(Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 =head2 store
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 Arg [1] : list of Bio::EnsEMBL::SimpleFeatures @sf
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 the simple features to store in the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 Example : $simple_feature_adaptor->store(@simple_feats);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 Description: Stores a list of simple feature objects in the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 Exceptions : thrown if @sf is not defined, if any of the features do not
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 have an attached slice.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 or if any elements of @sf are not Bio::EnsEMBL::SimpleFeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 sub store{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 my ($self,@sf) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 if( scalar(@sf) == 0 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 throw("Must call store with list of SimpleFeatures");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 my $sth = $self->prepare
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 ("INSERT INTO simple_feature (seq_region_id, seq_region_start, " .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 "seq_region_end, seq_region_strand, " .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 "display_label, analysis_id, score) " .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 "VALUES (?,?,?,?,?,?,?)");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 my $db = $self->db();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 my $analysis_adaptor = $db->get_AnalysisAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 FEATURE: foreach my $sf ( @sf ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 if( !ref $sf || !$sf->isa("Bio::EnsEMBL::SimpleFeature") ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 throw("SimpleFeature must be an Ensembl SimpleFeature, " .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 "not a [".ref($sf)."]");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 if($sf->is_stored($db)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 warning("SimpleFeature [".$sf->dbID."] is already stored" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 " in this database.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 next FEATURE;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 if(!defined($sf->analysis)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 throw("An analysis must be attached to the features to be stored.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 #store the analysis if it has not been stored yet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 if(!$sf->analysis->is_stored($db)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 $analysis_adaptor->store($sf->analysis());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 my $original = $sf;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 my $seq_region_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 ($sf, $seq_region_id) = $self->_pre_store($sf);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 $sth->bind_param(1,$seq_region_id,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 $sth->bind_param(2,$sf->start,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 $sth->bind_param(3,$sf->end,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 $sth->bind_param(4,$sf->strand,SQL_TINYINT);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 $sth->bind_param(5,$sf->display_label,SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 $sth->bind_param(6,$sf->analysis->dbID,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 $sth->bind_param(7,$sf->score,SQL_DOUBLE);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 $original->dbID($sth->{'mysql_insertid'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 $original->adaptor($self);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 =head2 _tables
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 Description: PROTECTED implementation of superclass abstract method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 returns the names, aliases of the tables to use for queries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 Returntype : list of listrefs of strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 Caller : internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 sub _tables {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 return ['simple_feature', 'sf'];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 =head2 _columns
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 Description: PROTECTED implementation of superclass abstract method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 returns a list of columns to use for queries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 Returntype : list of strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 Caller : internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 sub _columns {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 return qw( sf.simple_feature_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 sf.seq_region_id sf.seq_region_start sf.seq_region_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 sf.seq_region_strand sf.display_label sf.analysis_id sf.score );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 =head2 _objs_from_sth
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 Arg [1] : hash reference $hashref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 Description: PROTECTED implementation of superclass abstract method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 creates SimpleFeatures from an executed DBI statement handle.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 Returntype : list reference to Bio::EnsEMBL::SimpleFeature objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 Caller : internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 sub _objs_from_sth {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 my ($self, $sth, $mapper, $dest_slice) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 # This code is ugly because an attempt has been made to remove as many
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 # function calls as possible for speed purposes. Thus many caches and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 # a fair bit of gymnastics is used.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 my $sa = $self->db()->get_SliceAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 my $aa = $self->db->get_AnalysisAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 my @features;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 my %analysis_hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 my %slice_hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 my %sr_name_hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 my %sr_cs_hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 my($simple_feature_id,$seq_region_id, $seq_region_start, $seq_region_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 $seq_region_strand, $display_label, $analysis_id, $score);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 $sth->bind_columns(\$simple_feature_id,\$seq_region_id, \$seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 \$seq_region_end, \$seq_region_strand, \$display_label,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 \$analysis_id, \$score);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 my $asm_cs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 my $cmp_cs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 my $asm_cs_vers;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 my $asm_cs_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 my $cmp_cs_vers;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 my $cmp_cs_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 if($mapper) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 $asm_cs = $mapper->assembled_CoordSystem();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 $cmp_cs = $mapper->component_CoordSystem();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 $asm_cs_name = $asm_cs->name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 $asm_cs_vers = $asm_cs->version();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 $cmp_cs_name = $cmp_cs->name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 $cmp_cs_vers = $cmp_cs->version();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 my $dest_slice_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 my $dest_slice_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 my $dest_slice_strand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 my $dest_slice_length;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 my $dest_slice_sr_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 my $dest_slice_seq_region_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 if($dest_slice) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 $dest_slice_start = $dest_slice->start();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 $dest_slice_end = $dest_slice->end();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 $dest_slice_strand = $dest_slice->strand();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 $dest_slice_length = $dest_slice->length();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 $dest_slice_sr_name = $dest_slice->seq_region_name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 $dest_slice_seq_region_id =$dest_slice->get_seq_region_id();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 my $count =0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 FEATURE: while($sth->fetch()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 $count++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 #get the analysis object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 my $analysis = $analysis_hash{$analysis_id} ||=
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 $aa->fetch_by_dbID($analysis_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 #need to get the internal_seq_region, if present
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 $seq_region_id = $self->get_seq_region_id_internal($seq_region_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 #get the slice object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 my $slice = $slice_hash{"ID:".$seq_region_id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 if(!$slice) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 $slice = $sa->fetch_by_seq_region_id($seq_region_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 $slice_hash{"ID:".$seq_region_id} = $slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 $sr_name_hash{$seq_region_id} = $slice->seq_region_name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 $sr_cs_hash{$seq_region_id} = $slice->coord_system();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 my $sr_name = $sr_name_hash{$seq_region_id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 my $sr_cs = $sr_cs_hash{$seq_region_id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 # remap the feature coordinates to another coord system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 # if a mapper was provided
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 if($mapper) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 if (defined $dest_slice && $mapper->isa('Bio::EnsEMBL::ChainedAssemblyMapper') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 ( $seq_region_id, $seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 $seq_region_end, $seq_region_strand )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 $mapper->map( $sr_name, $seq_region_start, $seq_region_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 $seq_region_strand, $sr_cs, 1, $dest_slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 ( $seq_region_id, $seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 $seq_region_end, $seq_region_strand )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 $mapper->fastmap( $sr_name, $seq_region_start, $seq_region_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 $seq_region_strand, $sr_cs );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 #skip features that map to gaps or coord system boundaries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 next FEATURE if(!defined($seq_region_id));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 #get a slice in the coord system we just mapped to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 if($asm_cs == $sr_cs || ($cmp_cs != $sr_cs && $asm_cs->equals($sr_cs))) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 $slice = $slice_hash{"ID:".$seq_region_id} ||=
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 $sa->fetch_by_seq_region_id($seq_region_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 $slice = $slice_hash{"ID:".$seq_region_id} ||=
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 $sa->fetch_by_seq_region_id($seq_region_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 # If a destination slice was provided convert the coords
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 # If the dest_slice starts at 1 and is foward strand, nothing needs doing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 if($dest_slice) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 if($dest_slice_start != 1 || $dest_slice_strand != 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 if($dest_slice_strand == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 $seq_region_start = $seq_region_start - $dest_slice_start + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 $seq_region_end = $seq_region_end - $dest_slice_start + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 my $tmp_seq_region_start = $seq_region_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 $seq_region_start = $dest_slice_end - $seq_region_end + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 $seq_region_end = $dest_slice_end - $tmp_seq_region_start + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 $seq_region_strand *= -1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 #throw away features off the end of the requested slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 if($seq_region_end < 1 || $seq_region_start > $dest_slice_length ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 ( $dest_slice_seq_region_id != $seq_region_id )) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 # print STDERR "IGNORED DUE TO CUTOFF $dest_slice_seq_region_id ne $seq_region_id . $sr_name\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 next FEATURE;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 $slice = $dest_slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 push( @features,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 $self->_create_feature_fast(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 'Bio::EnsEMBL::SimpleFeature', {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 'start' => $seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 'end' => $seq_region_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 'strand' => $seq_region_strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 'slice' => $slice,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 'analysis' => $analysis,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 'adaptor' => $self,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 'dbID' => $simple_feature_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 'display_label' => $display_label,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 'score' => $score
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 } ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 return \@features;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 =head2 list_dbIDs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 Example : @feature_ids = @{$simple_feature_adaptor->list_dbIDs()};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 Description: Gets an array of internal ids for all simple features in the current db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 Arg[1] : <optional> int. not 0 for the ids to be sorted by the seq_region.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 Returntype : list of ints
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 Caller : ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 sub list_dbIDs {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 my ($self, $ordered) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 return $self->_list_dbIDs("simple_feature", undef, $ordered);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 1;