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

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 Bio::EnsEMBL::DBSQL::DnaAlignFeatureAdaptor - Adaptor for DnaAlignFeatures
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 $dafa = $registry->get_adaptor( 'Human', 'Core', 'DnaAlignFeature' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 my @features = @{ $dafa->fetch_all_by_Slice($slice) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 $dafa->store(@features);
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 an adaptor responsible for the retrieval and storage of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 DnaDnaAlignFeatures from the database. This adaptor inherits most of its
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 functionality from the BaseAlignFeatureAdaptor and BaseFeatureAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 superclasses.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 package Bio::EnsEMBL::DBSQL::DnaAlignFeatureAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 use Bio::EnsEMBL::DnaDnaAlignFeature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 use Bio::EnsEMBL::DBSQL::BaseAlignFeatureAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 use Bio::EnsEMBL::Utils::Exception qw(throw warning);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 @ISA = qw(Bio::EnsEMBL::DBSQL::BaseAlignFeatureAdaptor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 =head2 _tables
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 Example : @tabs = $self->_tables
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 Description: PROTECTED implementation of the abstract method inherited from
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 BaseFeatureAdaptor. Returns list of [tablename, alias] pairs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 Returntype : list of listrefs of strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 Caller : Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor::generic_fetch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 sub _tables {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 return (['dna_align_feature', 'daf'],['external_db','exdb']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 sub _left_join{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 return (['external_db',"exdb.external_db_id = daf.external_db_id"]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 =head2 _columns
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 Example : @columns = $self->_columns
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 Description: PROTECTED implementation of abstract superclass method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 Returns a list of columns that are needed for object creation.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 Returntype : list of strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 Caller : Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor::generic_fetch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 sub _columns {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 #warning, implementation of _objs_from_sth method depends on order of list
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 return qw(daf.dna_align_feature_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 daf.seq_region_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 daf.analysis_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 daf.seq_region_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 daf.seq_region_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 daf.seq_region_strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 daf.hit_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 daf.hit_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 daf.hit_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 daf.hit_strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 daf.cigar_line
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 daf.evalue
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 daf.perc_ident
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 daf.score
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 daf.external_db_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 daf.hcoverage
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 daf.external_data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 daf.pair_dna_align_feature_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 exdb.db_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 exdb.db_display_name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 =head2 store
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 Arg [1] : list of Bio::EnsEMBL::DnaAlignFeatures @feats
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 the features to store in the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 Example : $dna_align_feature_adaptor->store(@features);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 Description: Stores a list of DnaAlignFeatures in the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 Exceptions : throw if any of the provided features cannot be stored
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 which may occur if:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 * The feature does not have an associate Slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 * The feature does not have an associated analysis
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 * The Slice the feature is associated with is on a seq_region
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 unknown to this database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 A warning is given if:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 * The feature has already been stored in this db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 Caller : Pipeline
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 sub store {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 my ( $self, @feats ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 throw("Must call store with features") if ( scalar(@feats) == 0 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 my @tabs = $self->_tables;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 my ($tablename) = @{ $tabs[0] };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 my $db = $self->db();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 my $analysis_adaptor = $db->get_AnalysisAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 my $sth = $self->prepare(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 "INSERT INTO $tablename (seq_region_id, seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 seq_region_end, seq_region_strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 hit_start, hit_end, hit_strand, hit_name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 cigar_line, analysis_id, score, evalue,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 perc_ident, external_db_id, hcoverage,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 pair_dna_align_feature_id)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" # 16 arguments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 FEATURE:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 foreach my $feat (@feats) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 if ( !ref $feat || !$feat->isa("Bio::EnsEMBL::DnaDnaAlignFeature") )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 throw("feature must be a Bio::EnsEMBL::DnaDnaAlignFeature,"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 . " not a ["
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 . ref($feat)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 . "]." );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 if ( $feat->is_stored($db) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 warning( "DnaDnaAlignFeature ["
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 . $feat->dbID()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 . "] is already stored in this database." );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 next FEATURE;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 my $hstart = $feat->hstart();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 my $hend = $feat->hend();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 my $hstrand = $feat->hstrand();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 $self->_check_start_end_strand( $hstart, $hend, $hstrand );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 my $cigar_string = $feat->cigar_string();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 if ( !$cigar_string ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 $cigar_string = $feat->length() . 'M';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 warning( "DnaDnaAlignFeature does not define a cigar_string.\n"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 . "Assuming ungapped block with cigar_line=$cigar_string ." );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 my $hseqname = $feat->hseqname();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 if ( !$hseqname ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 throw("DnaDnaAlignFeature must define an hseqname.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 if ( !defined( $feat->analysis ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 throw(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 "An analysis must be attached to the features to be stored.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 #store the analysis if it has not been stored yet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 if ( !$feat->analysis->is_stored($db) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 $analysis_adaptor->store( $feat->analysis() );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 my $original = $feat;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 my $seq_region_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 ( $feat, $seq_region_id ) = $self->_pre_store($feat);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 $sth->bind_param( 1, $seq_region_id, SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 $sth->bind_param( 2, $feat->start, SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 $sth->bind_param( 3, $feat->end, SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 $sth->bind_param( 4, $feat->strand, SQL_TINYINT );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 $sth->bind_param( 5, $hstart, SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 $sth->bind_param( 6, $hend, SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 $sth->bind_param( 7, $hstrand, SQL_TINYINT );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 $sth->bind_param( 8, $hseqname, SQL_VARCHAR );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 $sth->bind_param( 9, $cigar_string, SQL_LONGVARCHAR );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 $sth->bind_param( 10, $feat->analysis->dbID, SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 $sth->bind_param( 11, $feat->score, SQL_DOUBLE );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 $sth->bind_param( 12, $feat->p_value, SQL_DOUBLE );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 $sth->bind_param( 13, $feat->percent_id, SQL_FLOAT );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 $sth->bind_param( 14, $feat->external_db_id, SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 $sth->bind_param( 15, $feat->hcoverage, SQL_DOUBLE );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 $sth->bind_param( 16, $feat->pair_dna_align_feature_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 $original->dbID( $sth->{'mysql_insertid'} );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 $original->adaptor($self);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 } ## end foreach my $feat (@feats)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 $sth->finish();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 } ## end sub store
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 sub save {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 my ($self, $features) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 my @feats = @$features;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 throw("Must call store with features") if( scalar(@feats) == 0 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 my @tabs = $self->_tables;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 my ($tablename) = @{$tabs[0]};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 my $db = $self->db();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 my $analysis_adaptor = $db->get_AnalysisAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 my $sql = qq{INSERT INTO $tablename (seq_region_id, seq_region_start, seq_region_end, seq_region_strand, hit_start, hit_end, hit_strand, hit_name, cigar_line, analysis_id, score, evalue, perc_ident, external_db_id, hcoverage, pair_dna_align_feature_id, external_data) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 my %analyses = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 my $sth = $self->prepare($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 FEATURE: foreach my $feat ( @feats ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 if( !ref $feat || !$feat->isa("Bio::EnsEMBL::DnaDnaAlignFeature") ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 throw("feature must be a Bio::EnsEMBL::DnaDnaAlignFeature,"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 . " not a [".ref($feat)."].");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 if($feat->is_stored($db)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 warning("DnaDnaAlignFeature [".$feat->dbID."] is already stored" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 " in this database.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 next FEATURE;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 my $hstart = $feat->hstart || 0; # defined $feat->hstart ? $feat->hstart : $feat->start ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 my $hend = $feat->hend || 0; # defined $feat->hend ? $feat->hend : $feat->end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 my $hstrand = $feat->hstrand|| 0; # defined $feat->hstrand ? $feat->hstrand : $feat->strand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 if( $hstart && $hend ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 if($hend < $hstart) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 throw("Invalid Feature start/end [$hstart/$hend]. Start must be less than or equal to end.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 my $cigar_string = $feat->cigar_string();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 if(!$cigar_string) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 $cigar_string = $feat->length() . 'M';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 warning("DnaDnaAlignFeature does not define a cigar_string.\n" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 "Assuming ungapped block with cigar_line=$cigar_string .");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 my $hseqname = $feat->hseqname();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 if(!$hseqname) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 throw("DnaDnaAlignFeature must define an hseqname.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 if(!defined($feat->analysis)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 throw("An analysis must be attached to the features to be stored.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 #store the analysis if it has not been stored yet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 if(!$feat->analysis->is_stored($db)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 $analysis_adaptor->store($feat->analysis());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 $analyses{ $feat->analysis->dbID }++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 my $original = $feat;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 my $seq_region_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 ($feat, $seq_region_id) = $self->_pre_store_userdata($feat);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 my $extra_data = $feat->extra_data ? $self->dump_data($feat->extra_data) : '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 $sth->bind_param(1,$seq_region_id,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 $sth->bind_param(2,$feat->start,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 $sth->bind_param(3,$feat->end,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 $sth->bind_param(4,$feat->strand,SQL_TINYINT);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 $sth->bind_param(5,$hstart,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 $sth->bind_param(6,$hend,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 $sth->bind_param(7,$hstrand,SQL_TINYINT);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 $sth->bind_param(8,$hseqname,SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 $sth->bind_param(9,$cigar_string,SQL_LONGVARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 $sth->bind_param(10,$feat->analysis->dbID,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 $sth->bind_param(11,$feat->score,SQL_DOUBLE);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 # $sth->bind_param(11,$feat->score); # if the above statement does not work it means you need to upgrade DBD::mysql, meantime you can replace it with this line
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 $sth->bind_param(12,$feat->p_value,SQL_DOUBLE);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 $sth->bind_param(13,$feat->percent_id,SQL_FLOAT);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 $sth->bind_param(14,$feat->external_db_id,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 $sth->bind_param(15,$feat->hcoverage,SQL_DOUBLE);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 $sth->bind_param(16,$feat->pair_dna_align_feature_id,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 $sth->bind_param(17,$extra_data,SQL_LONGVARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 $original->dbID($sth->{'mysql_insertid'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 $original->adaptor($self);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 $sth->finish();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 ## js5 hack to update meta_coord table...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 if( keys %analyses ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 my $sth = $self->prepare( 'select sr.coord_system_id, max(daf.seq_region_end-daf.seq_region_start) from seq_region as sr, dna_align_feature as daf where daf.seq_region_id=sr.seq_region_id and analysis_id in ('.join(',',keys %analyses).') group by coord_system_id' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 $sth->execute;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 foreach( @{ $sth->fetchall_arrayref } ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 my $sth2 = $self->prepare( qq(insert ignore into meta_coord values("dna_align_feature",$_->[0],$_->[1])) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 $sth2->execute;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 $sth2->finish;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 $sth2 = $self->prepare( qq(update meta_coord set max_length = $_->[1] where coord_system_id = $_->[0] and table_name="dna_align_feature" and max_length < $_->[1]) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 $sth2->execute;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 $sth2->finish;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 $sth->finish;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 =head2 _objs_from_sth
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 Arg [1] : DBI statement handle $sth
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 an exectuted DBI statement handle generated by selecting
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 the columns specified by _columns() from the table specified
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 by _table()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 Example : @dna_dna_align_feats = $self->_obj_from_hashref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 Description: PROTECTED implementation of superclass abstract method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 Creates DnaDnaAlignFeature objects from a DBI hashref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 Returntype : listref of Bio::EnsEMBL::DnaDnaAlignFeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 Caller : Bio::EnsEMBL::BaseFeatureAdaptor::generic_fetch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 sub _objs_from_sth {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 my ( $self, $sth, $mapper, $dest_slice ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 # This code is ugly because an attempt has been made to remove as many
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 # function calls as possible for speed purposes. Thus many caches and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 # a fair bit of gymnastics is used.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 # In case of userdata we need the features on the dest_slice. In case
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 # of get_all_supporting_features dest_slice is not provided.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 my $sa = ( $dest_slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 ? $dest_slice->adaptor()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 : $self->db()->get_SliceAdaptor() );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 my $aa = $self->db->get_AnalysisAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 my @features;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 my %analysis_hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 my %slice_hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 my %sr_name_hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 my %sr_cs_hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 my ( $dna_align_feature_id, $seq_region_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 $analysis_id, $seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 $seq_region_end, $seq_region_strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 $hit_start, $hit_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 $hit_name, $hit_strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 $cigar_line, $evalue,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 $perc_ident, $score,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 $external_db_id, $hcoverage,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 $extra_data, $pair_dna_align_feature_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 $external_db_name, $external_display_db_name );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 $sth->bind_columns( \( $dna_align_feature_id, $seq_region_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 $analysis_id, $seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 $seq_region_end, $seq_region_strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 $hit_start, $hit_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 $hit_name, $hit_strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 $cigar_line, $evalue,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 $perc_ident, $score,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 $external_db_id, $hcoverage,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 $extra_data, $pair_dna_align_feature_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 $external_db_name, $external_display_db_name )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 my $asm_cs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 my $cmp_cs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 my $asm_cs_vers;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 my $asm_cs_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 my $cmp_cs_vers;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 my $cmp_cs_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 if ( defined($mapper) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 $asm_cs = $mapper->assembled_CoordSystem();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 $cmp_cs = $mapper->component_CoordSystem();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 $asm_cs_name = $asm_cs->name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 $asm_cs_vers = $asm_cs->version();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 $cmp_cs_name = $cmp_cs->name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 $cmp_cs_vers = $cmp_cs->version();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 my $dest_slice_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 my $dest_slice_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 my $dest_slice_strand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 my $dest_slice_length;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 my $dest_slice_sr_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 my $dest_slice_seq_region_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 if ( defined($dest_slice) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 $dest_slice_start = $dest_slice->start();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 $dest_slice_end = $dest_slice->end();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 $dest_slice_strand = $dest_slice->strand();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 $dest_slice_length = $dest_slice->length();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 $dest_slice_sr_name = $dest_slice->seq_region_name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 $dest_slice_seq_region_id = $dest_slice->get_seq_region_id();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 FEATURE:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 while ( $sth->fetch() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 # Get the analysis object.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 my $analysis = $analysis_hash{$analysis_id} ||=
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 $aa->fetch_by_dbID($analysis_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 # Get the slice object.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 my $slice = $slice_hash{ "ID:" . $seq_region_id };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 if ( !defined($slice) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 $slice = $sa->fetch_by_seq_region_id($seq_region_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 if ( defined($slice) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 $slice_hash{ "ID:" . $seq_region_id } = $slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 $sr_name_hash{$seq_region_id} = $slice->seq_region_name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 $sr_cs_hash{$seq_region_id} = $slice->coord_system();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 my $sr_name = $sr_name_hash{$seq_region_id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 my $sr_cs = $sr_cs_hash{$seq_region_id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 # Remap the feature coordinates to another coord system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 # if a mapper was provided.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 if ( defined($mapper) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 if (defined $dest_slice && $mapper->isa('Bio::EnsEMBL::ChainedAssemblyMapper') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 ( $seq_region_id, $seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 $seq_region_end, $seq_region_strand )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 $mapper->map( $sr_name, $seq_region_start, $seq_region_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 $seq_region_strand, $sr_cs, 1, $dest_slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 ( $seq_region_id, $seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 $seq_region_end, $seq_region_strand )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 $mapper->fastmap( $sr_name, $seq_region_start, $seq_region_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 $seq_region_strand, $sr_cs );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 # Skip features that map to gaps or coord system boundaries.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 if ( !defined($seq_region_id) ) { next FEATURE }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 # Get a slice in the coord system we just mapped to.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 if ( $asm_cs == $sr_cs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 || ( $cmp_cs != $sr_cs && $asm_cs->equals($sr_cs) ) )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 $slice = $slice_hash{ "ID:" . $seq_region_id } ||=
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 $sa->fetch_by_seq_region_id($seq_region_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 $slice = $slice_hash{ "ID:" . $seq_region_id } ||=
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 $sa->fetch_by_seq_region_id($seq_region_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 # If a destination slice was provided, convert the coords. If the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 # dest_slice starts at 1 and is forward strand, nothing needs doing.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 if ( defined($dest_slice) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 if ( $dest_slice_start != 1 || $dest_slice_strand != 1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 if ( $dest_slice_strand == 1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 $seq_region_start = $seq_region_start - $dest_slice_start + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 $seq_region_end = $seq_region_end - $dest_slice_start + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 my $tmp_seq_region_start = $seq_region_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 $seq_region_start = $dest_slice_end - $seq_region_end + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 $seq_region_end = $dest_slice_end - $tmp_seq_region_start + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 $seq_region_strand = -$seq_region_strand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 # Throw away features off the end of the requested slice.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 if ( $seq_region_end < 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 || $seq_region_start > $dest_slice_length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 || ( $dest_slice_seq_region_id ne $seq_region_id ) )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 next FEATURE;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 $slice = $dest_slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 # Finally, create the new DnaAlignFeature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 push( @features,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 $self->_create_feature_fast(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 'Bio::EnsEMBL::DnaDnaAlignFeature', {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 'slice' => $slice,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 'start' => $seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 'end' => $seq_region_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 'strand' => $seq_region_strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 'hseqname' => $hit_name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 'hstart' => $hit_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 'hend' => $hit_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 'hstrand' => $hit_strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 'score' => $score,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 'p_value' => $evalue,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 'percent_id' => $perc_ident,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 'cigar_string' => $cigar_line,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 'analysis' => $analysis,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 'adaptor' => $self,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 'dbID' => $dna_align_feature_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 'external_db_id' => $external_db_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 'hcoverage' => $hcoverage,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 'extra_data' => (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 $extra_data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 ? $self->get_dumped_data($extra_data)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 : '' ),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 'dbname' => $external_db_name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 'db_display_name' => $external_display_db_name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 'pair_dna_align_feature_id' => $pair_dna_align_feature_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 } ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 } ## end while ( $sth->fetch() )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 return \@features;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 } ## end sub _objs_from_sth
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 =head2 list_dbIDs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 Example : @feature_ids = @{$dna_align_feature_adaptor->list_dbIDs()};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 Description: Gets an array of internal ids for all dna align features in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 the current db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 Arg[1] : <optional> int. not 0 for the ids to be sorted by the seq_region.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 Returntype : list of ints
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 Caller : ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 sub list_dbIDs {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 my ($self, $ordered) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 return $self->_list_dbIDs("dna_align_feature",undef, $ordered);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583