annotate variant_effect_predictor/Bio/EnsEMBL/Analysis/PairAlign.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 PairAlign - Dna pairwise alignment module
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 #To convert between coordinates:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 my $cdna_coord = $pair->genomic2cDNA($gen_coord);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 my $gen_coord = $pair->cDNA2genomic($cdna_coord);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 Contains list of sub alignments making up a dna-dna alignment
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 Creation:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 my $pair = new Bio::EnsEMBL::FeaturePair(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 -start => $qstart,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 -end => $qend,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 -strand => $qstrand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 -hstart => $hstart,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 -hend => $hend,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 -hend => $hstrand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 my $pairaln = new Bio::EnsEMBL::Analysis::PairAlign;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 $pairaln->addFeaturePair($pair);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 Any number of pair alignments can be added to the PairAlign object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 package Bio::EnsEMBL::Analysis::PairAlign;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 @ISA = qw(Bio::EnsEMBL::Root);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 my($class,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 my $self = {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 bless $self, $class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 $self->{'_homol'} = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 return $self; # success - we hope!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 sub addFeaturePair {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 my ($self,$pair) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 $self->throw("Not a Bio::EnsEMBL::FeaturePair object") unless ($pair->isa("Bio::EnsEMBL::FeaturePair"));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 push(@{$self->{'_pairs'}},$pair);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 =head2 eachFeaturePair
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 Title : eachFeaturePair
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 Example : my @pairs = $pair->eachFeaturePair
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 Returns : Array of Bio::SeqFeature::FeaturePair
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 sub eachFeaturePair {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 if (defined($self->{'_pairs'})) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 return @{$self->{'_pairs'}};
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 sub get_hstrand {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 my @features = $self->eachFeaturePair;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 return $features[0]->hstrand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 =head2 genomic2cDNA
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 Title : genomic2cDNA
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 Usage : my $cdna_coord = $pair->genomic2cDNA($gen_coord)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 Function: Converts a genomic coordinate to a cdna coordinate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 Returns : int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 Args : int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 sub genomic2cDNA {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 my ($self,$coord) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 my @pairs = $self->eachFeaturePair;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 @pairs = sort {$a->start <=> $b->start} @pairs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 my $newcoord;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 HOMOL: while (my $sf1 = shift(@pairs)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 next HOMOL unless ($coord >= $sf1->start && $coord <= $sf1->end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 if ($sf1->strand == 1 && $sf1->hstrand == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 $newcoord = $sf1->hstart + ($coord - $sf1->start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 last HOMOL;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 } elsif ($sf1->strand == 1 && $sf1->hstrand == -1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 $newcoord = $sf1->hend - ($coord - $sf1->start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 last HOMOL;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 } elsif ($sf1->strand == -1 && $sf1->hstrand == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 $newcoord = $sf1->hstart + ($sf1->end - $coord);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 last HOMOL;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 } elsif ($sf1->strand == -1 && $sf1->hstrand == -1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 $newcoord = $sf1->hend - ($sf1->end - $coord);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 last HOMOL;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 $self->throw("ERROR: Wrong strand value in FeaturePair (" . $sf1->strand . "/" . $sf1->hstrand . "\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 if (defined($newcoord)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 return $newcoord;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 $self->throw("Couldn't convert $coord");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 =head2 cDNA2genomic
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 Title : cDNA2genomic
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 Usage : my $gen_coord = $pair->genomic2cDNA($cdna_coord)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 Function: Converts a cdna coordinate to a genomic coordinate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 Returns : int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 Args : int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 sub cDNA2genomic {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 my ($self,$coord) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 my @pairs = $self->eachFeaturePair;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 my $newcoord;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 HOMOL: while (my $sf1 = shift(@pairs)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 next HOMOL unless ($coord >= $sf1->hstart && $coord <= $sf1->hend);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 if ($sf1->strand == 1 && $sf1->hstrand == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 $newcoord = $sf1->start + ($coord - $sf1->hstart);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 last HOMOL;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 } elsif ($sf1->strand == 1 && $sf1->hstrand == -1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 $newcoord = $sf1->start +($sf1->hend - $coord);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 last HOMOL;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 } elsif ($sf1->strand == -1 && $sf1->hstrand == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 $newcoord = $sf1->end - ($coord - $sf1->hstart);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 last HOMOL;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 } elsif ($sf1->strand == -1 && $sf1->hstrand == -1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 $newcoord = $sf1->end - ($sf1->hend - $coord);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 last HOMOL;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 $self->throw("ERROR: Wrong strand value in homol (" . $sf1->strand . "/" . $sf1->hstrand . "\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 if (defined ($newcoord)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 return $newcoord;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 $self->throw("Couldn't convert $coord\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 sub find_Pair {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 my ($self,$coord) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 foreach my $p ($self->eachFeaturePair) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 if ($coord >= $p->hstart && $coord <= $p->hend) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 return $p;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 =head2 convert_cDNA_feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 Title : convert_cDNA_feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 Usage : my @newfeatures = $self->convert_cDNA_feature($f);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 Function: Converts a feature on the cDNA into an array of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 features on the genomic (for features that span across introns);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 Returns : Array of Bio::EnsEMBL::FeaturePair
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 Args : Bio::EnsEMBL::FeaturePair
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 sub convert_cDNA_feature {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 my ($self,$feature) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 my $foundstart = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 my $foundend = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 my @pairs = $self->eachFeaturePair;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 my @newfeatures;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 HOMOL: while (my $sf1 = shift(@pairs)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 my $skip = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 #print STDERR "Looking at cDNA exon " . $sf1->hstart . "\t" . $sf1->hend . "\t" . $sf1->strand ."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 $skip = 1 unless ($feature->start >= $sf1->hstart
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 && $feature->start <= $sf1->hend);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 if($skip){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 #print STDERR "Skipping ".$sf1->hstart . "\t" . $sf1->hend . "\t" . $sf1->strand ."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 next HOMOL;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 if ($feature->end >= $sf1->hstart && $feature->end <= $sf1->hend) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 $foundend = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 my $startcoord = $self->cDNA2genomic($feature->start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 my $endcoord;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 if ($sf1->hstrand == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 $endcoord = $sf1->end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 $endcoord = $sf1->start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 if ($foundend) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 $endcoord = $self->cDNA2genomic($feature->end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 #print STDERR "Making new genomic feature $startcoord\t$endcoord\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 my $tmpf = new Bio::EnsEMBL::Feature(-seqname => $feature->seqname,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 -start => $startcoord,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 -end => $endcoord,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 -strand => $feature->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 push(@newfeatures,$tmpf);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 # Now the rest of the pairs until we find the endcoord
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 while ((my $sf1 = shift(@pairs)) && ($foundend == 0)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 if ($feature->end >= $sf1->hstart && $feature->end <= $sf1->hend) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 $foundend = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 my $startcoord;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 my $endcoord;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 if ($sf1->hstrand == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 $startcoord = $sf1->start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 $endcoord = $sf1->end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 $startcoord = $sf1->end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 $endcoord = $sf1->start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 if ($foundend) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 $endcoord = $self->cDNA2genomic($feature->end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 # #print STDERR "Making new genomic feature $startcoord\t$endcoord\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 my $tmpf = new Bio::EnsEMBL::Feature(-seqname => $feature->seqname,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 -start => $startcoord,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 -end => $endcoord,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 -strand => $feature->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 push(@newfeatures,$tmpf);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 #print STDERR "Have ".@newfeatures." features from ".$feature."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 return @newfeatures;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 sub convert_FeaturePair {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 my ($self,$pair) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 my $hstrand = $self->get_hstrand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 my $feat = $self->create_Feature($pair->start, $pair->end, $pair->strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 $pair->slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 my @newfeatures = $self->convert_cDNA_feature($feat);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 my @newpairs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 my $hitpairaln = new Bio::EnsEMBL::Analysis::PairAlign;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 $hitpairaln->addFeaturePair($pair);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 foreach my $new (@newfeatures) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 # Now we want to convert these cDNA coords into hit coords
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 my $hstart1 = $self->genomic2cDNA($new->start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 my $hend1 = $self->genomic2cDNA($new->end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 my $hstart2 = $hitpairaln->genomic2cDNA($hstart1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 my $hend2 = $hitpairaln->genomic2cDNA($hend1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 # We can now put the final feature together
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 my $finalstrand = $hstrand * $pair->strand * $pair->hstrand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 if ($hstart2 > $hend2) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 my $tmp = $hstart2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 $hstart2 = $hend2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 $hend2 = $tmp;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 my $finalpair = $self->create_FeaturePair($new->start, $new->end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 $new->strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 $hstart2, $hend2,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 $finalstrand, $pair->score);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 push(@newpairs,$finalpair);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 return @newpairs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 sub create_FeaturePair {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 my ($self, $start, $end, $strand, $hstart, $hend,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 $hstrand, $score) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 my $fp = Bio::EnsEMBL::FeaturePair->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 -start => $start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 -end => $end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 -strand => $strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 -hstart => $hstart,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 -hend => $hend,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 -hstrand => $hstrand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 -score => $score,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 return $fp;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 sub create_Feature{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 my ($self, $start, $end, $strand, $slice) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 my $feat = new Bio::EnsEMBL::Feature(-start => $start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 -end => $end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 -strand => $strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 -slice => $slice,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 return $feat;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383