annotate variant_effect_predictor/Bio/EnsEMBL/TranscriptFactory.pm @ 1:d6778b5d8382 draft default tip

Deleted selected files
author willmclaren
date Fri, 03 Aug 2012 10:05:43 -0400
parents 21066c0abaf5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 =head1 LICENSE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 This software is distributed under a modified Apache license.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 For license details, please see
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 =head1 CONTACT
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17 <helpdesk@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 Bio::EnsEMBL::TranscriptFactory - Module having the fset2transcript*
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24 subroutines
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28 use Bio::EnsEMBL::TranscriptFactory;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30 &Bio::EnsEMBL::TranscriptFactory::fset2transcript($fset_id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 Module containing the subroutines fset2transcript*,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35 which create transcripts from features (formally housed in
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36 Bio::EnsEMBL::DBSQL::Utils).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38 =head1 METHODS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 package Bio::EnsEMBL::TranscriptFactory;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 use Bio::EnsEMBL::Exon;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 use Bio::EnsEMBL::Translation;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48 use Bio::EnsEMBL::Transcript;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50 sub fset2transcript {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51 my ($genscan,$contig)=@_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54 unless ($genscan->isa ("Bio::EnsEMBL::SeqFeatureI"))
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 {print "$genscan must be Bio::EnsEMBL::SeqFeatureI\n";}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 my $transcript = new Bio::EnsEMBL::Transcript;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58 $transcript->temporary_id($contig->id . "." . $genscan->seqname);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60 my @exons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61 my $count= 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 foreach my $f ($genscan->sub_SeqFeature) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65 my $exon = new Bio::EnsEMBL::Exon;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 $transcript->add_Exon($exon);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67 $exon->contig ($contig);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68 $exon->start ($f->start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69 $exon->end ($f->end );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 $exon->strand ($f->strand);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71 $exon->phase ($f->phase);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72 $exon->end_phase( ($exon->phase + $exon->length)%3 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73 #$exon->score($f->score);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74 # $exon->p_value($f->p_value);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75 $exon->slice($contig->primary_seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77 push(@exons,$exon);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78 $count++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82 if( $count == 1 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83 $genscan->throw("Got a 0 exon genscan");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86 my $translation = new Bio::EnsEMBL::Translation;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88 # This code got changed due to Translation convention changing. Should work...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 if ($exons[0]->strand == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 @exons = sort {$a->start <=> $b->start} @exons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94 @exons = sort {$b->start <=> $a->start} @exons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 $translation->start(1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98 $translation->end($exons[scalar(@exons)-1]->length);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 $translation->start_Exon($exons[0]);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101 $translation->end_Exon($exons[$#exons]);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 my $endphase = $exons[0]->end_phase;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 foreach my $exon (@exons) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107 if ( $exon == $exons[0] ){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108 next;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 $exon->phase ($endphase);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 $endphase = $exon->end_phase;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114 $transcript->translation($translation);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116 return $transcript;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119 sub fset2transcript_guess_phases {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 my ($fset,$contig) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 my $transcript = new Bio::EnsEMBL::Transcript;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 $transcript->temporary_id($contig->id . "." . $fset->id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 my @exons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128 my $count = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 foreach my $f ($fset->sub_SeqFeature) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132 my $exon = new Bio::EnsEMBL::Exon;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 $exon->contig ($contig);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134 $exon->start ($f->start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 $exon->end ($f->end );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136 $exon->strand ($f->strand);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137 #$exon->score($f->score);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138 # $exon->p_value($f->p_value);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 $exon->slice($contig);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140 $exon->phase($f->phase);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 push(@exons,$exon);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 $count++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 my $translation = new Bio::EnsEMBL::Translation;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148 if ($exons[0]->strand == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 @exons = sort {$a->start <=> $b->start} @exons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151 @exons = sort {$b->start <=> $a->start} @exons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 $translation->start (1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 $translation->end ($exons[$#exons]->end - $exons[$#exons]->start + 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 $translation->start_Exon($exons[0]);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157 $translation->end_Exon($exons[$#exons]);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158 $transcript->translation($translation);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 my $endphase = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 foreach my $exon (@exons) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164 $exon ->phase ($endphase);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 $transcript->add_Exon($exon);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167 $endphase = $exon->end_phase(($exon->phase + $exon->length)%3);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172 if ($transcript->translate->seq !~ /\*/) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173 return $transcript;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 $endphase = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178 foreach my $exon (@exons) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179 $exon->phase($endphase);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 $endphase = $exon->end_phase(($exon->phase + $exon->length)%3);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183 if ($transcript->translate->seq !~ /\*/) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 return $transcript;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 $endphase = 2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 foreach my $exon (@exons) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 $exon->phase($endphase);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 $endphase = $exon->end_phase(($exon->phase + $exon->length)%3);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 if ($transcript->translate->seq !~ /\*/) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 return $transcript;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199 sub fset2transcript_3frame {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200 my ($fset,$contig) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202 my @f = $fset->sub_SeqFeature;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204 if ($f[0]->strand == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205 @f = sort {$a->start <=> $b->start} @f;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207 @f = sort {$b->start <=> $a->start} @f;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210 my @transcripts;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 my $startphase = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 while ($startphase < 3) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215 my $endphase = $startphase;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217 my $transcript = new Bio::EnsEMBL::Transcript;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219 push(@transcripts,$transcript);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 $transcript->temporary_id($contig->id . "." . $endphase);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 my $count = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 my @exons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 foreach my $f (@f) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 #print "exon seqname = ".$f->seqname."\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229 my $exon = new Bio::EnsEMBL::Exon;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 #print STDERR "exon ".$f->gffstring."\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231 push(@exons,$exon);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232 $exon->seqname($f->seqname);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 $exon->temporary_id ($contig->id . ".$count");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234 $exon->contig ($contig);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 $exon->start ($f->start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236 $exon->end ($f->end );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237 $exon->strand ($f->strand);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238 $exon->slice($contig);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239 $exon->phase ($endphase);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240 $exon->end_phase( ($exon->phase + $exon->length)%3 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241 #$exon->score ($f->score);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 # $exon->p_value ($f->p_value);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243 $endphase = $exon->end_phase;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245 $transcript->add_Exon($exon);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 $count++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 #print STDERR "Added exon start " . $exon->start . " end " . $exon->end . " strand " . $exon->strand . " score " . $exon->score . " pvalue " . $exon->p_value . "\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251 my $translation = new Bio::EnsEMBL::Translation;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253 my $contig_id = "";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 my $fset_id = "";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 if (defined($contig->id)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257 $contig_id = $contig->id;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 if (defined($fset->id)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 $fset_id = $fset->id;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263 $translation->temporary_id($contig_id . "." . $fset_id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264 $translation->start (1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265 $translation->end ($exons[$#exons]->end - $exons[$#exons]->start + 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266 $translation->start_Exon($exons[0]);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267 $translation->end_Exon ($exons[$#exons]);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268 $transcript->translation($translation);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270 # print STDERR "Phase $startphase " . $transcript->translate->seq . "\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272 $startphase++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274 #print "finshed fset2transcript_3frame\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 return @transcripts;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279 sub fset2transcript_with_seq {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280 my ($genscan,$seq)=@_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283 unless ($genscan->isa ("Bio::EnsEMBL::SeqFeatureI"))
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 {print "$genscan must be Bio::EnsEMBL::SeqFeatureI\n";}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285 unless ($seq->isa ("Bio::PrimarySeqI") || $seq->isa ("Bio::SeqI"))
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286 {print "$seq must be Bio::SeqI or a Bio::PrimarySeqI\n";}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 #print STDERR "running fset2transcript\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289 my $transcript = new Bio::EnsEMBL::Transcript;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290 $transcript->temporary_id($seq->id . "." . $genscan->seqname);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292 my @exons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 my $count= 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295 foreach my $f ($genscan->sub_SeqFeature) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297 my $exon = new Bio::EnsEMBL::Exon;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298 $exon->contig ($seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299 $exon->start ($f->start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300 $exon->end ($f->end );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 $exon->strand ($f->strand);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302 $exon->phase ($f->phase);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 $exon->end_phase( ($exon->phase + $exon->length)%3 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304 #$exon->score ($f->score);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305 #print STDERR "contig is a = ".$seq."\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306 $exon->slice($seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308 push(@exons,$exon);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309 $count++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313 foreach my $exon (@exons) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315 $transcript->add_Exon($exon);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319 return $transcript;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325 1;