annotate variant_effect_predictor/Bio/EnsEMBL/DBSQL/PredictionTranscriptAdaptor.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::PredictionTranscriptAdaptor -
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 Performs database interaction related to PredictionTranscripts
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 # get a prediction transcript adaptor from the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 $pta = $database_adaptor->get_PredictionTranscriptAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 # get a slice on a region of chromosome 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 $sa = $database_adaptor->get_SliceAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 $slice = $sa->fetch_by_region( 'chromosome', 'x', 100000, 200000 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 # get all the prediction transcripts from the slice region
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 $prediction_transcripts = @{ $pta->fetch_all_by_Slice($slice) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 package Bio::EnsEMBL::DBSQL::PredictionTranscriptAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 use vars qw( @ISA );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 use Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 use Bio::EnsEMBL::DBSQL::AnalysisAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 use Bio::EnsEMBL::PredictionTranscript;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 use Bio::EnsEMBL::Utils::Exception qw(deprecate throw warning);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 @ISA = qw( Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 # _tables
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 # Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 # Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 # Description: Implements abstract superclass method to define the table used
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 # to retrieve prediction transcripts from the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 # Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 # Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 # Caller : generic_fetch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 sub _tables {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 return ['prediction_transcript', 'pt'];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 # _columns
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 # Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 # Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 # Description: Implements abstract superclass method to define the columns
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 # retrieved in database queries used to create prediction
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 # transcripts.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 # Returntype : list of strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 # Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 # Caller : generic_fetch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 sub _columns {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 return qw( pt.prediction_transcript_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 pt.seq_region_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 pt.seq_region_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 pt.seq_region_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 pt.seq_region_strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 pt.analysis_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 pt.display_label);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 =head2 fetch_by_stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 Arg [1] : string $stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 The stable id of the transcript to retrieve
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 Example : $trans = $trans_adptr->fetch_by_stable_id('GENSCAN00000001234');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 Description: Retrieves a prediction transcript via its display_label.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 This method is called fetch_by_stable_id for polymorphism with
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 the TranscriptAdaptor. Prediction transcript display_labels are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 not necessarily stable in that the same identifier may be reused
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 for a completely different prediction transcript in a subsequent
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 database release.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 Returntype : Bio::EnsEMBL::PredictionTranscript
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 sub fetch_by_stable_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 my $stable_id = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 throw('Stable_id argument expected') if(!$stable_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 my $syn = $self->_tables()->[1];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 $self->bind_param_generic_fetch($stable_id,SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 my $pts = $self->generic_fetch("$syn.display_label = ?");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 return (@$pts) ? $pts->[0] : undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 =head2 fetch_all_by_Slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 Arg [1] : Bio::EnsEMBL::Slice $slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 The slice to fetch transcripts on.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 Arg [3] : (optional) boolean $load_exons
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 if true, exons will be loaded immediately rather than
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 lazy loaded later.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 Example : $transcripts = $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 Description: Overrides superclass method to optionally load exons
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 immediately rather than lazy-loading them later. This
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 is more efficient when there are a lot of transcripts whose
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 exons are going to be used.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 Returntype : reference to list of transcripts
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 Exceptions : thrown if exon cannot be placed on transcript slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 Caller : Slice::get_all_Transcripts
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 sub fetch_all_by_Slice {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 my $slice = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 my $logic_name = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 my $load_exons = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 my $transcripts = $self->SUPER::fetch_all_by_Slice($slice,$logic_name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 # if there are 0 or 1 transcripts still do lazy-loading
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 if(!$load_exons || @$transcripts < 2) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 return $transcripts;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 # preload all of the exons now, instead of lazy loading later
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 # faster than 1 query per transcript
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 # get extent of region spanned by transcripts
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 my ($min_start, $max_end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 foreach my $tr (@$transcripts) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 if(!defined($min_start) || $tr->seq_region_start() < $min_start) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 $min_start = $tr->seq_region_start();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 if(!defined($max_end) || $tr->seq_region_end() > $max_end) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 $max_end = $tr->seq_region_end();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 # mades no sense, the limit for the slice will be defined by the transcripts
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 # $min_start += $slice->start() - 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 # $max_end += $slice->start() - 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 my $ext_slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 if($min_start >= $slice->start() && $max_end <= $slice->end()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 $ext_slice = $slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 my $sa = $self->db()->get_SliceAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 $ext_slice = $sa->fetch_by_region
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 ($slice->coord_system->name(), $slice->seq_region_name(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 $min_start,$max_end, $slice->strand(), $slice->coord_system->version());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 # associate exon identifiers with transcripts
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 my %tr_hash = map {$_->dbID => $_} @$transcripts;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 my $tr_id_str = '(' . join(',', keys %tr_hash) . ')';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 my $sth = $self->prepare
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 ("SELECT prediction_transcript_id, prediction_exon_id, exon_rank " .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 "FROM prediction_exon " .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 "WHERE prediction_transcript_id IN $tr_id_str");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 my ($ex_id, $tr_id, $rank);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 $sth->bind_columns(\$tr_id, \$ex_id, \$rank);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 my %ex_tr_hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 while($sth->fetch()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 $ex_tr_hash{$ex_id} ||= [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 push @{$ex_tr_hash{$ex_id}}, [$tr_hash{$tr_id}, $rank];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 $sth->finish();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 my $ea = $self->db()->get_PredictionExonAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 my $exons = $ea->fetch_all_by_Slice($ext_slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 # move exons onto transcript slice, and add them to transcripts
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 foreach my $ex (@$exons) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 $ex = $ex->transfer($slice) if($slice != $ext_slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 if(!$ex) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 throw("Unexpected. PredictionExon could not be transfered onto " .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 "PredictionTranscript slice.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 foreach my $row (@{$ex_tr_hash{$ex->dbID()}}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 my ($tr, $rank) = @$row;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 $tr->add_Exon($ex, $rank);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 return $transcripts;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 =head2 _objs_from_sth
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 Arg [1] : DBI:st $sth
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 An executed DBI statement handle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 Arg [2] : (optional) Bio::EnsEMBL::Mapper $mapper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 An mapper to be used to convert contig coordinates
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 to assembly coordinates.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 Arg [3] : (optional) Bio::EnsEMBL::Slice $slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 A slice to map the prediction transcript to.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 Example : $p_transcripts = $self->_objs_from_sth($sth);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 Description: Creates a list of Prediction transcripts from an executed DBI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 statement handle. The columns retrieved via the statement
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 handle must be in the same order as the columns defined by the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 _columns method. If the slice argument is provided then the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 the prediction transcripts will be in returned in the coordinate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 system of the $slice argument. Otherwise the prediction
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 transcripts will be returned in the RawContig coordinate system.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 Returntype : reference to a list of Bio::EnsEMBL::PredictionTranscripts
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 Caller : superclass generic_fetch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 sub _objs_from_sth {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 my ($self, $sth, $mapper, $dest_slice) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 # This code is ugly because an attempt has been made to remove as many
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 # function calls as possible for speed purposes. Thus many caches and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 # a fair bit of gymnastics is used.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 my $sa = $self->db()->get_SliceAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 my $aa = $self->db()->get_AnalysisAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 my @ptranscripts;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 my %analysis_hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 my %slice_hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 my %sr_name_hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 my %sr_cs_hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 my ($prediction_transcript_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 $seq_region_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 $seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 $seq_region_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 $seq_region_strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 $analysis_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 $display_label);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 $sth->bind_columns(\$prediction_transcript_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 \$seq_region_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 \$seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 \$seq_region_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 \$seq_region_strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 \$analysis_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 \$display_label);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 my $asm_cs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 my $cmp_cs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 my $asm_cs_vers;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 my $asm_cs_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 my $cmp_cs_vers;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 my $cmp_cs_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 if($mapper) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 $asm_cs = $mapper->assembled_CoordSystem();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 $cmp_cs = $mapper->component_CoordSystem();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 $asm_cs_name = $asm_cs->name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 $asm_cs_vers = $asm_cs->version();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 $cmp_cs_name = $cmp_cs->name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 $cmp_cs_vers = $cmp_cs->version();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 my $dest_slice_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 my $dest_slice_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 my $dest_slice_strand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 my $dest_slice_length;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 my $dest_slice_sr_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 my $dest_slice_sr_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 if($dest_slice) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 $dest_slice_start = $dest_slice->start();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 $dest_slice_end = $dest_slice->end();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 $dest_slice_strand = $dest_slice->strand();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 $dest_slice_length = $dest_slice->length();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 $dest_slice_sr_name = $dest_slice->seq_region_name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 $dest_slice_sr_id = $dest_slice->get_seq_region_id();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 FEATURE: while($sth->fetch()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 #get the analysis object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 my $analysis = $analysis_hash{$analysis_id} ||=
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 $aa->fetch_by_dbID($analysis_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 #need to get the internal_seq_region, if present
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 $seq_region_id = $self->get_seq_region_id_internal($seq_region_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 my $slice = $slice_hash{"ID:".$seq_region_id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 if(!$slice) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 $slice = $sa->fetch_by_seq_region_id($seq_region_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 $slice_hash{"ID:".$seq_region_id} = $slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 $sr_name_hash{$seq_region_id} = $slice->seq_region_name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 $sr_cs_hash{$seq_region_id} = $slice->coord_system();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 my $sr_name = $sr_name_hash{$seq_region_id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 my $sr_cs = $sr_cs_hash{$seq_region_id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 # remap the feature coordinates to another coord system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 # if a mapper was provided
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 if($mapper) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 if (defined $dest_slice && $mapper->isa('Bio::EnsEMBL::ChainedAssemblyMapper') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 ( $seq_region_id, $seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 $seq_region_end, $seq_region_strand )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 $mapper->map( $sr_name, $seq_region_start, $seq_region_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 $seq_region_strand, $sr_cs, 1, $dest_slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 ( $seq_region_id, $seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 $seq_region_end, $seq_region_strand )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 $mapper->fastmap( $sr_name, $seq_region_start, $seq_region_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 $seq_region_strand, $sr_cs );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 #skip features that map to gaps or coord system boundaries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 next FEATURE if(!defined($seq_region_id));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 #get a slice in the coord system we just mapped to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 # if($asm_cs == $sr_cs || ($cmp_cs != $sr_cs && $asm_cs->equals($sr_cs))) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 $slice = $slice_hash{"ID:".$seq_region_id} ||=
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 $sa->fetch_by_seq_region_id($seq_region_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 # } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 # $slice = $slice_hash{"NAME:$sr_name:$asm_cs_name:$asm_cs_vers"} ||=
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 # $sa->fetch_by_region($asm_cs_name, $sr_name, undef, undef, undef,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 # $asm_cs_vers);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 # }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 # If a destination slice was provided convert the coords
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 # If the dest_slice starts at 1 and is foward strand, nothing needs doing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 if($dest_slice) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 if($dest_slice_start != 1 || $dest_slice_strand != 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 if($dest_slice_strand == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 $seq_region_start = $seq_region_start - $dest_slice_start + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 $seq_region_end = $seq_region_end - $dest_slice_start + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 my $tmp_seq_region_start = $seq_region_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 $seq_region_start = $dest_slice_end - $seq_region_end + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 $seq_region_end = $dest_slice_end - $tmp_seq_region_start + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 $seq_region_strand *= -1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 #throw away features off the end of the requested slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 if($seq_region_end < 1 || $seq_region_start > $dest_slice_length ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 ( $dest_slice_sr_id ne $seq_region_id )) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 next FEATURE;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 $slice = $dest_slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 # Finally, create the new PredictionTranscript.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 push( @ptranscripts,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 $self->_create_feature('Bio::EnsEMBL::PredictionTranscript', {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 '-start' => $seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 '-end' => $seq_region_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 '-strand' => $seq_region_strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 '-adaptor' => $self,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 '-slice' => $slice,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 '-analysis' => $analysis,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 '-dbID' => $prediction_transcript_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 '-display_label' => $display_label
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 } ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 return \@ptranscripts;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 =head2 store
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 Arg [1] : list of Bio::EnsEMBL::PredictionTranscript @pre_transcripts
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 Example : $prediction_transcript_adaptor->store(@pre_transcripts);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 Description: Stores a list of given prediction transcripts in database.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 Puts dbID and Adaptor into each object stored object.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 Exceptions : on wrong argument type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 sub store {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 my ( $self, @pre_transcripts ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 my $ptstore_sth = $self->prepare
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 (qq{INSERT INTO prediction_transcript (seq_region_id, seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 seq_region_end, seq_region_strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 analysis_id, display_label)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 VALUES( ?, ?, ?, ?, ?, ?)});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 my $ptupdate_sth = $self->prepare
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 (qq{UPDATE prediction_transcript SET display_label = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 WHERE prediction_transcript_id = ?});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 my $db = $self->db();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 my $analysis_adaptor = $db->get_AnalysisAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 my $pexon_adaptor = $db->get_PredictionExonAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 FEATURE: foreach my $pt (@pre_transcripts) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 if(!ref($pt) || !$pt->isa('Bio::EnsEMBL::PredictionTranscript')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 throw('Expected PredictionTranscript argument not [' . ref($pt).']');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 #skip prediction transcripts that have already been stored
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 if($pt->is_stored($db)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 warning('Not storing already stored prediction transcript '. $pt->dbID);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 next FEATURE;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 #get analysis and store it if it is not in the db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 my $analysis = $pt->analysis();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 if(!$analysis) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 throw('Prediction transcript must have analysis to be stored.');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 if(!$analysis->is_stored($db)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 $analysis_adaptor->store($analysis);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 #ensure that the transcript coordinates are correct, they may not be,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 #if somebody has done some exon coordinate juggling and not recalculated
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 #the transcript coords.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 $pt->recalculate_coordinates();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 my $original = $pt;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 my $seq_region_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 ($pt, $seq_region_id) = $self->_pre_store($pt);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 #store the prediction transcript
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 $ptstore_sth->bind_param(1,$seq_region_id,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 $ptstore_sth->bind_param(2,$pt->start,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 $ptstore_sth->bind_param(3,$pt->end,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 $ptstore_sth->bind_param(4,$pt->strand,SQL_TINYINT);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 $ptstore_sth->bind_param(5,$analysis->dbID,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 $ptstore_sth->bind_param(6,$pt->display_label,SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 $ptstore_sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 my $pt_id = $ptstore_sth->{'mysql_insertid'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 $original->dbID($pt_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 $original->adaptor($self);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 #store the exons
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 my $rank = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 foreach my $pexon (@{$original->get_all_Exons}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 $pexon_adaptor->store($pexon, $pt_id, $rank++);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 # if a display label was not defined autogenerate one
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 if(!defined($pt->display_label())) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 my $zeros = '0' x (11 - length($pt_id));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 my $display_label = uc($analysis->logic_name()) . $zeros . $pt_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 $ptupdate_sth->bind_param(1,$display_label,SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 $ptupdate_sth->bind_param(2,$pt_id,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 $ptupdate_sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 $original->display_label($display_label);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 =head2 remove
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 Arg [1] : Bio::EnsEMBL::PredictionTranscript $pt
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 Example : $prediction_transcript_adaptor->remove($pt);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 Description: removes given prediction transcript $pt from database.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 Exceptions : throws if argument not a Bio::EnsEMBL::PredictionTranscript
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 sub remove {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 my $pre_trans = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 if(!ref($pre_trans)||!$pre_trans->isa('Bio::EnsEMBL::PredictionTranscript')){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 throw('Expected PredictionTranscript argument.');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 if(!$pre_trans->is_stored($self->db())) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 warning('PredictionTranscript is not stored in this DB - not removing.');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 #remove all associated prediction exons
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 my $pexon_adaptor = $self->db()->get_PredictionExonAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 foreach my $pexon (@{$pre_trans->get_all_Exons}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 $pexon_adaptor->remove($pexon);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 #remove the prediction transcript
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 my $sth = $self->prepare( "DELETE FROM prediction_transcript
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 WHERE prediction_transcript_id = ?" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 $sth->bind_param(1,$pre_trans->dbID,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 #unset the adaptor and internal id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 $pre_trans->dbID(undef);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 $pre_trans->adaptor(undef);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 =head2 list_dbIDs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 Example : @feature_ids = @{$prediction_transcript_adaptor->list_dbIDs()};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 Description: Gets an array of internal ids for all prediction transcript
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 features in the current db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 Arg[1] : <optional> int. not 0 for the ids to be sorted by the seq_region.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 Returntype : list of ints
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 Caller : ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 sub list_dbIDs {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 my ($self, $ordered) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 return $self->_list_dbIDs("prediction_transcript", undef, $ordered);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 1;