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

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 Bio::EnsEMBL::DBSQL::RepeatFeatureAdaptor
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 $rfa = $database_adaptor->get_RepeatFeatureAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 my $repeat = $rfa->fetch_by_dbID(1234);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 my @repeats = @{ $rfa->fetch_all_by_Slice($slice) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 This is an adaptor for the retrieval and storage of RepeatFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 objects from the database. Most of the implementation is in the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 superclass BaseFeatureAdaptor.
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::RepeatFeatureAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 use Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 use Bio::EnsEMBL::RepeatFeature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 use Bio::EnsEMBL::Utils::Exception qw(throw warning);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 use Bio::EnsEMBL::Utils::Scalar qw/wrap_array/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 @ISA = qw(Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 =head2 fetch_all_by_Slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 Arg [1] : Bio::EnsEMBL::Slice $slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 Arg [2] : (optional) string $logic_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 Limits RepeatFeatures obtained to those having an Analysis with
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 of the specified logic_name. If no logic name is specified
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 Repeats of all analysis types are retrieved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 Arg [3] : (optional) string/array $repeat_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 Limits RepeatFeatures obtained to those of specified
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 repeat_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 Example : @rfeats = @{$rfa->fetch_all_by_Slice($slice, undef, 'Type II Transposons')};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 @rfeats = @{$rfa->fetch_all_by_Slice($slice, undef, ['Type II Transposons', 'RNA repeats'])};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 Description: Retrieves repeat features overlapping the area designated by
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 the provided slice argument. Returned features will be in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 in the same coordinate system as the provided slice and will
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 have coordinates relative to the slice start.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 Returntype : reference to a list of Bio::EnsEMBL::RepeatFeatures.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 Exceptions : throw on bad argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 Caller : Slice::get_all_RepeatFeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 sub fetch_all_by_Slice {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 my $slice = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 my $logic_name = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 my $repeat_type = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 my $constraint = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 # MySQL was optimising the query the incorrect way when joining to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 # the repeat_consensus table on type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 $self->_straight_join(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 if($repeat_type) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 my $rta = wrap_array($repeat_type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 if(scalar(@{$rta}) > 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 $constraint .= sprintf('rc.repeat_type IN (%s)', join(q{,}, map {"'${_}'"} @{$rta}));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 $constraint .= "rc.repeat_type = '${repeat_type}'";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 my $result =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 $self->fetch_all_by_Slice_constraint($slice,$constraint,$logic_name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 $self->_straight_join(0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 return $result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 # _tablename
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 # Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 # Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 # Description: PROTECTED Implementation of abstract superclass method to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 # provide the name of the tables to query
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 # Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 # Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 # Caller : internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 sub _tables {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 return (['repeat_feature', 'r'], ['repeat_consensus', 'rc']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 # _columns
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 # Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 # Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 # Description: PROTECTED Implementation of abstract superclass method to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 # provide the name of the columns to query
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 # Returntype : list of strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 # Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 # Caller : internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 sub _columns {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 return qw (r.repeat_feature_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 r.seq_region_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 r.seq_region_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 r.seq_region_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 r.seq_region_strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 r.repeat_consensus_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 r.repeat_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 r.repeat_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 r.analysis_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 r.score
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 rc.repeat_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 rc.repeat_class
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 rc.repeat_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 rc.repeat_consensus);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 # _default_where_clause
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 # Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 # Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 # Description: Overrides superclass method to provide an additional
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 # table joining constraint before the SQL query is performed.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 # Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 # Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 # Caller : generic_fetch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 sub _default_where_clause {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 return 'r.repeat_consensus_id = rc.repeat_consensus_id';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 }
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 # Description: PROTECTED implementation of abstract superclass method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 # responsible for the creation of RepeatFeatures from a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 # hashref generated from an SQL query
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 sub _objs_from_sth {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 my ($self, $sth, $mapper, $dest_slice) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 # This code is ugly because an attempt has been made to remove as many
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 # function calls as possible for speed purposes. Thus many caches and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 # a fair bit of gymnastics is used.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 my $rca = $self->db()->get_RepeatConsensusAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 my $sa = $self->db()->get_SliceAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 my $aa = $self->db->get_AnalysisAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 my @features;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 my %rc_hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 my %analysis_hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 my %slice_hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 my %sr_name_hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 my %sr_cs_hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 my($repeat_feature_id, $seq_region_id, $seq_region_start, $seq_region_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 $seq_region_strand, $repeat_consensus_id, $repeat_start, $repeat_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 $analysis_id, $score, $repeat_name, $repeat_class, $repeat_type,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 $repeat_consensus);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 $sth->bind_columns( \$repeat_feature_id, \$seq_region_id, \$seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 \$seq_region_end, \$seq_region_strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 \$repeat_consensus_id, \$repeat_start,\$repeat_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 \$analysis_id, \$score, \$repeat_name, \$repeat_class,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 \$repeat_type, \$repeat_consensus );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 my $asm_cs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 my $cmp_cs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 my $asm_cs_vers;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 my $asm_cs_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 my $cmp_cs_vers;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 my $cmp_cs_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 if($mapper) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 $asm_cs = $mapper->assembled_CoordSystem();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 $cmp_cs = $mapper->component_CoordSystem();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 $asm_cs_name = $asm_cs->name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 $asm_cs_vers = $asm_cs->version();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 $cmp_cs_name = $cmp_cs->name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 $cmp_cs_vers = $cmp_cs->version();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 my $dest_slice_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 my $dest_slice_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 my $dest_slice_strand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 my $dest_slice_length;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 my $dest_slice_sr_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 my $dest_slice_sr_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 if($dest_slice) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 $dest_slice_start = $dest_slice->start();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 $dest_slice_end = $dest_slice->end();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 $dest_slice_strand = $dest_slice->strand();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 $dest_slice_length = $dest_slice->length();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 $dest_slice_sr_name = $dest_slice->seq_region_name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 $dest_slice_sr_id = $dest_slice->get_seq_region_id();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 FEATURE: while($sth->fetch()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 #create a repeat consensus object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 my $rc = $rc_hash{$repeat_consensus_id} ||=
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 Bio::EnsEMBL::RepeatConsensus->new_fast
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 ({'dbID' => $repeat_consensus_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 'adaptor' => $rca,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 'name' => $repeat_name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 'repeat_class' => $repeat_class,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 'repeat_type' => $repeat_type,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 'repeat_consensus' => $repeat_consensus,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 'length' => length($repeat_consensus)});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 #get the analysis object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 my $analysis = $analysis_hash{$analysis_id} ||=
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 $aa->fetch_by_dbID($analysis_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 #need to get the internal_seq_region, if present
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 $seq_region_id = $self->get_seq_region_id_internal($seq_region_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 my $slice = $slice_hash{"ID:".$seq_region_id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 if(!$slice) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 $slice = $sa->fetch_by_seq_region_id($seq_region_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 $slice_hash{"ID:".$seq_region_id} = $slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 $sr_name_hash{$seq_region_id} = $slice->seq_region_name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 $sr_cs_hash{$seq_region_id} = $slice->coord_system();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 my $sr_name = $sr_name_hash{$seq_region_id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 my $sr_cs = $sr_cs_hash{$seq_region_id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 # remap the feature coordinates to another coord system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 # if a mapper was provided
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 if($mapper) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 if (defined $dest_slice && $mapper->isa('Bio::EnsEMBL::ChainedAssemblyMapper') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 ( $seq_region_id, $seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 $seq_region_end, $seq_region_strand )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 $mapper->map( $sr_name, $seq_region_start, $seq_region_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 $seq_region_strand, $sr_cs, 1, $dest_slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 ( $seq_region_id, $seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 $seq_region_end, $seq_region_strand )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 $mapper->fastmap( $sr_name, $seq_region_start, $seq_region_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 $seq_region_strand, $sr_cs );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 #skip features that map to gaps or coord system boundaries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 next FEATURE if(!defined($seq_region_id));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 #get a slice in the coord system we just mapped to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 # if($asm_cs == $sr_cs || ($cmp_cs != $sr_cs && $asm_cs->equals($sr_cs))) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 $slice = $slice_hash{"ID:".$seq_region_id} ||=
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 $sa->fetch_by_seq_region_id($seq_region_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 # } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 # $slice = $slice_hash{"NAME:$sr_name:$asm_cs_name:$asm_cs_vers"} ||=
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 # $sa->fetch_by_region($asm_cs_name, $sr_name, undef, undef, undef,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 # $asm_cs_vers);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 # }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 # If a destination slice was provided convert the coords
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 # If the dest_slice starts at 1 and is foward strand, nothing needs doing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 if($dest_slice) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 if($dest_slice_start != 1 || $dest_slice_strand != 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 if($dest_slice_strand == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 $seq_region_start = $seq_region_start - $dest_slice_start + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 $seq_region_end = $seq_region_end - $dest_slice_start + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 my $tmp_seq_region_start = $seq_region_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 $seq_region_start = $dest_slice_end - $seq_region_end + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 $seq_region_end = $dest_slice_end - $tmp_seq_region_start + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 $seq_region_strand *= -1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 #throw away features off the end of the requested slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 if($seq_region_end < 1 || $seq_region_start > $dest_slice_length ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 ( $dest_slice_sr_id ne $seq_region_id )) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 next FEATURE;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 $slice = $dest_slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 # Finally, create the new RepeatFeature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 push( @features,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 $self->_create_feature_fast( 'Bio::EnsEMBL::RepeatFeature', {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 'dbID' => $repeat_feature_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 'analysis' => $analysis,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 'start' => $seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 'end' => $seq_region_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 'strand' => $seq_region_strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 'score' => $score,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 'hstart' => $repeat_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 'hend' => $repeat_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 'repeat_consensus' => $rc,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 'adaptor' => $self,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 'slice' => $slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 } ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 return \@features;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 =head2 store
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 Arg [1] : list of Bio::EnsEMBL::RepeatFeatures $repeat_feature_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 the list of repeat features to store in the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 Example : $repeat_feature_adaptor->store(@repeat_features);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 Description: stores a repeat feature in the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 Exceptions : if the repeat features do not have attached sequences
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 or if repeat_consensus are not present
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 sub store {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 my( $self, @repeats ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 my $db = $self->db();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 my $rca = $db->get_RepeatConsensusAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 my $sa = $db->get_SliceAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 my ($cons, $db_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 my $sth = $self->prepare(qq{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 INSERT into repeat_feature( repeat_feature_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 , seq_region_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 , seq_region_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 , seq_region_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 , seq_region_strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 , repeat_consensus_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 , repeat_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 , repeat_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 , score
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 , analysis_id )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 VALUES(NULL, ?,?,?,?,?,?,?,?,?)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 FEATURE: foreach my $rf (@repeats) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 if(!ref($rf) || !$rf->isa('Bio::EnsEMBL::RepeatFeature')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 throw('Expected RepeatFeature argument not [' . ref($rf) .'].');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 if($rf->is_stored($db)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 warning("RepeatFeature [".$rf->dbID."] is already stored in this DB.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 next FEATURE;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 my $cons = $rf->repeat_consensus();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 throw("Must have a RepeatConsensus attached") if(!defined($cons));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 # for tandem repeats - simply store consensus and repeat
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 # one pair per hit. don't need to check consensi stored
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 # already. consensus has name and class set to 'trf'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 if ($cons->repeat_class eq 'trf') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 # Look for matches already stored
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 my @match = @{$rca->fetch_all_by_class_seq('trf', $cons->repeat_consensus)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 if (@match) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 $cons->dbID($match[0]->dbID());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 $rca->store($cons);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 } elsif ($cons->repeat_class eq 'Simple_repeat') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 my $rcon = $cons->name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 $rcon =~ s/\((\S+)\)n/$1/; # get repeat element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 $cons->repeat_consensus($rcon);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 # Look for matches already stored
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 my $match = $rca->fetch_by_name_class($cons->name, 'Simple_repeat');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 if ($match) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 $cons->dbID($match->dbID());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 $rca->store($cons);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 # for other repeats - need to see if a consensus is stored already
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 if(!$cons->dbID) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 my $match = ($rca->fetch_by_name($cons->name));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 if($match) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 #set the consensus dbID to be the same as the database one
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 $cons->dbID($match->dbID());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 # if we don't match a consensus already stored create a fake one
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 # and set consensus to 'N' as null seq not allowed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 # FIXME: not happy with this, but ho hum ...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 warning("Can't find " . $cons->name . "\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 $cons->repeat_consensus("N");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 $rca->store($cons);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 #if (@match > 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 #multiple consensi were matched
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 # $self->warn(@match . " consensi for " . $cons->name . "\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 #}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 my $slice = $rf->slice();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 if(!ref($slice) || !($slice->isa("Bio::EnsEMBL::Slice") or $slice->isa('Bio::EnsEMBL::LRGSlice'))) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 throw("RepeatFeature cannot be stored without an associated slice.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 my $original = $rf;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 my $seq_region_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 ($rf, $seq_region_id) = $self->_pre_store($rf);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 $sth->bind_param(1,$seq_region_id,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 $sth->bind_param(2,$rf->start,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 $sth->bind_param(3,$rf->end,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 $sth->bind_param(4,$rf->strand,SQL_TINYINT);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 $sth->bind_param(5,$rf->repeat_consensus->dbID,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 $sth->bind_param(6,$rf->hstart,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 $sth->bind_param(7,$rf->hend,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 $sth->bind_param(8,$rf->score,SQL_DOUBLE);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 $sth->bind_param(9,$rf->analysis->dbID,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 my $db_id = $sth->{'mysql_insertid'}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 or throw("Didn't get an insertid from the INSERT statement");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 $original->dbID($db_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 $original->adaptor($self);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 =head2 list_dbIDs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 Example : @feature_ids = @{$repeat_feature_adaptor->list_dbIDs()};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 Description: Gets an array of internal ids for all repeat features in the current db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 Arg[1] : <optional> int. not 0 for the ids to be sorted by the seq_region.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 Returntype : list of ints
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 Caller : ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 sub list_dbIDs {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 my ($self, $ordered) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 return $self->_list_dbIDs("repeat_feature", undef, $ordered);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511