annotate variant_effect_predictor/Bio/EnsEMBL/Compara/BaseGenomicAlignSet.pm @ 0:21066c0abaf5 draft

Uploaded
author willmclaren
date Fri, 03 Aug 2012 10:04:48 -0400
parents
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 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21 Bio::EnsEMBL::Compara::BaseGenomicAlignSet - Base class for GenomicAlignBlock and GenomicAlignTree
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 =head1 APPENDIX
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25 The rest of the documentation details each of the object methods. Internal methods are usually preceded with a _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30 # Let the code begin...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32 package Bio::EnsEMBL::Compara::BaseGenomicAlignSet;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35 # Object preamble
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36 use Bio::EnsEMBL::Utils::Argument qw(rearrange);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37 use Bio::EnsEMBL::Utils::Exception qw(throw warning info deprecate verbose);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 =head2 slice
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 Arg [1] : (optional) Bio::EnsEMBL::Slice $reference_slice
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43 Example : my $slice = $genomic_align_block->slice;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 Example : $genomic_align_block->slice($slice);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45 Description: get/set for attribute slice.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 Returntype : Bio::EnsEMBL::Slice object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 Exceptions :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53 sub slice {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54 my ($self, $reference_slice) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56 if (defined($reference_slice)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 # throw "[$reference_slice] is not a Bio::EnsEMBL::Slice"
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58 # unless $reference_slice->isa("Bio::EnsEMBL::Slice");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59 $self->{'reference_slice'} = $reference_slice;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62 return $self->{'reference_slice'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65 =head2 reference_slice
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67 Arg [1] : (optional) Bio::EnsEMBL::Slice $reference_slice
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68 Example : my $reference_slice = $genomic_align_block->reference_slice;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69 Example : $genomic_align_block->reference_slice($slice);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 Description: Alias for slice method. TO BE DEPRECATED.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71 Returntype : Bio::EnsEMBL::Slice object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72 Exceptions :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78 sub reference_slice {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 my ($self, $reference_slice) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81 return $self->slice($reference_slice);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84 =head2 start
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86 Arg [1] : (optional) integer $start
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87 Example : my $start = $genomic_align_block->start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88 Example : $genomic_align_block->start(1035);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89 Description: get/set for attribute reference_slice_start. A value of 0 will set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90 the attribute to undefined.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 Returntype : integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 sub start {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99 return $self->reference_slice_start(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 =head2 reference_slice_start
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 Arg [1] : integer $reference_slice_start
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106 Example : my $reference_slice_start = $genomic_align_block->reference_slice_start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107 Example : $genomic_align_block->reference_slice_start(1035);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108 Description: get/set for attribute reference_slice_start. A value of 0 will set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 the attribute to undefined.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 Returntype : integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117 sub reference_slice_start {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118 my ($self, $reference_slice_start) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 if (defined($reference_slice_start)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121 $self->{'reference_slice_start'} = ($reference_slice_start or undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 return $self->{'reference_slice_start'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128 =head2 end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 Arg [1] : (optional) integer $end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 Example : my $end = $genomic_align_block->end;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132 Example : $genomic_align_block->end(1283);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 Description: get/set for attribute reference_slice_end. A value of 0 will set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134 the attribute to undefined.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 Returntype : integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 sub end {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143 return $self->reference_slice_end(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147 =head2 reference_slice_end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 Arg [1] : integer $reference_slice_end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150 Example : my $reference_slice_end = $genomic_align_block->reference_slice_end;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151 Example : $genomic_align_block->reference_slice_end(1283);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 Description: get/set for attribute reference_slice_end. A value of 0 will set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153 the attribute to undefined.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 Returntype : integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 sub reference_slice_end {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 my ($self, $reference_slice_end) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164 if (defined($reference_slice_end)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 $self->{'reference_slice_end'} = ($reference_slice_end or undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168 return $self->{'reference_slice_end'};
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 =head2 strand
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 Arg [1] : integer $strand
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175 Example : my $strand = $genomic_align_block->strand;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 Example : $genomic_align_block->strand(-1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177 Description: get/set for attribute strand. A value of 0 will set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178 the attribute to undefined.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179 Returntype : integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186 sub strand {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 my ($self, $reference_slice_strand) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 if (defined($reference_slice_strand)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 $self->{'reference_slice_strand'} = ($reference_slice_strand or undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 return $self->{'reference_slice_strand'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 =head2 reference_slice_strand
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 Arg [1] : integer $reference_slice_strand
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199 Example : my $reference_slice_strand = $genomic_align_block->reference_slice_strand;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200 Example : $genomic_align_block->reference_slice_strand(-1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201 Description: get/set for attribute reference_slice_strand. A value of 0 will set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202 the attribute to undefined.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203 Returntype : integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210 sub reference_slice_strand {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211 my ($self, $reference_slice_strand) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 if (defined($reference_slice_strand)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 $self->{'reference_slice_strand'} = ($reference_slice_strand or undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217 return $self->{'reference_slice_strand'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220 =head2 get_original_strand
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 Example : if (!$genomic_align_block->get_original_strand()) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 # original GenomicAlignBlock has been reverse-complemented
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226 Description: getter for the _orignal_strand attribute
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234 sub get_original_strand {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237 if (!defined($self->{_original_strand})) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238 $self->{_original_strand} = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241 return $self->{_original_strand};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 =head2 restrict_between_reference_positions
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 Arg[1] : [optional] int $start, refers to the reference_dnafrag
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247 Arg[2] : [optional] int $end, refers to the reference_dnafrag
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 Arg[3] : [optional] Bio::EnsEMBL::Compara::GenomicAlign $reference_GenomicAlign
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249 Arg[4] : [optional] boolean $skip_empty_GenomicAligns
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250 Example : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251 Description: restrict this GenomicAlignBlock. It returns a new object unless no
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252 restriction is needed. In that case, it returns the original unchanged
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253 object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 It might be the case that the restricted region coincide with a gap
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255 in one or several GenomicAligns. By default these GenomicAligns are
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 returned with a dnafrag_end equals to its dnafrag_start + 1. For instance,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257 a GenomicAlign with dnafrag_start = 12345 and dnafrag_end = 12344
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258 correspond to a block which goes on this region from before 12345 to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 after 12344, ie just between 12344 and 12345. You can choose to remove
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 these empty GenomicAligns by setting $skip_empty_GenomicAligns to any
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261 true value.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262 Returntype : Bio::EnsEMBL::Compara::GenomicAlignBlock object in scalar context. In
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263 list context, returns the previous object and the start and end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264 positions of the restriction in alignment coordinates (from 1 to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265 alignment_length)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266 Exceptions : return undef if reference positions lie outside of the alignment
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268 Status : At risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272 sub restrict_between_reference_positions {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273 my ($self, $start, $end, $reference_genomic_align, $skip_empty_GenomicAligns) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274 my $genomic_align_set;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 my $new_reference_genomic_align;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 my $new_genomic_aligns = [];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 $reference_genomic_align ||= $self->reference_genomic_align;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279 throw("A reference Bio::EnsEMBL::Compara::GenomicAlign must be given") if (!$reference_genomic_align);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280 $start = $reference_genomic_align->dnafrag_start if (!defined($start));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281 $end = $reference_genomic_align->dnafrag_end if (!defined($end));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283 if ($start > $reference_genomic_align->dnafrag_end or $end < $reference_genomic_align->dnafrag_start) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 # restricting outside of boundaries => return undef object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285 warn("restricting outside of boundaries => return undef object: $start-$end (".$reference_genomic_align->dnafrag_start."-".$reference_genomic_align->dnafrag_end.")");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286 return wantarray ? (undef, undef, undef) : undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 my $number_of_base_pairs_to_trim_from_the_start = $start - $reference_genomic_align->dnafrag_start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289 my $number_of_base_pairs_to_trim_from_the_end = $reference_genomic_align->dnafrag_end - $end;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291 my $is_ref_low_coverage = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292 if ($reference_genomic_align->cigar_line =~ /X/) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 $is_ref_low_coverage = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296 ## Skip if no restriction is needed. Return original object! We are still going on with the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297 ## restriction when either excess_at_the_start or excess_at_the_end are 0 as a (multiple)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298 ## alignment may start or end with gaps in the reference species. In that case, we want to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299 ## trim these gaps from the alignment as they fall just outside of the region of interest
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 ##Exception if the reference species is low coverage, then need to continue
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302 ##with this routine to find out the correct align positions
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 if ($number_of_base_pairs_to_trim_from_the_start < 0 and $number_of_base_pairs_to_trim_from_the_end < 0 and !$is_ref_low_coverage) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304 return wantarray ? ($self, 1, $self->length) : $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307 my $negative_strand = ($reference_genomic_align->dnafrag_strand == -1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309 ## Create a new Bio::EnsEMBL::Compara::GenomicAlignBlock object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310 throw("Reference GenomicAlign not found!") if (!$reference_genomic_align);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312 my @reference_cigar = grep {$_} split(/(\d*[GDMXI])/, $reference_genomic_align->cigar_line);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313 if ($negative_strand) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314 @reference_cigar = reverse @reference_cigar;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317 #If this is negative, eg when a slice starts in one block and ends in
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318 #another, need to set to 0 to ensure we enter the loop below. This
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319 #fixes a bug when using a 2x species as the reference and fetching using
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320 #an expanded align slice.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321 if ($number_of_base_pairs_to_trim_from_the_start < 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322 $number_of_base_pairs_to_trim_from_the_start = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325 ## Parse start of cigar_line for the reference GenomicAlign
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326 my $counter_of_trimmed_columns_from_the_start = 0; # num. of bp in the alignment to be trimmed
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328 if ($number_of_base_pairs_to_trim_from_the_start >= 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329 my $counter_of_trimmed_base_pairs = 0; # num of bp in the reference sequence we trim (from the start)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330 ## Loop through the cigar pieces
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331 while (my $cigar = shift(@reference_cigar)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332 # Parse each cigar piece
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333 my ($num, $type) = ($cigar =~ /^(\d*)([GDMXI])/);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334 $num = 1 if ($num eq "");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336 # Insertions are not part of the alignment, don't count them
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337 if ($type ne "I") {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338 $counter_of_trimmed_columns_from_the_start += $num;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341 # Matches and insertions are actual base pairs in the reference
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342 if ($type eq "M" or $type eq "I") {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343 $counter_of_trimmed_base_pairs += $num;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344 # If this cigar piece is too long and we overshoot the number of base pairs we want to trim,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345 # we substitute this cigar piece by a shorter one
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346 if ($counter_of_trimmed_base_pairs > $number_of_base_pairs_to_trim_from_the_start) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347 my $new_cigar_piece = "";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348 # length of the new cigar piece
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349 my $length = $counter_of_trimmed_base_pairs - $number_of_base_pairs_to_trim_from_the_start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350 if ($length > 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351 $new_cigar_piece = $length.$type;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352 } elsif ($length == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
353 $new_cigar_piece = $type;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
354 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
355 unshift(@reference_cigar, $new_cigar_piece) if ($new_cigar_piece);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
356
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
357 # There is no need to correct the counter of trimmed columns if we are in an insertion
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
358 # when we overshoot
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
359 if ($type eq "M") {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
360 $counter_of_trimmed_columns_from_the_start -= $length;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
361 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
362
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
363 ## We don't want to start with an insertion or a deletion. Trim them!
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
364 while (@reference_cigar and $reference_cigar[0] =~ /[DI]/) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
365 my ($num, $type) = ($reference_cigar[0] =~ /^(\d*)([DIGMX])/);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
366 $num = 1 if ($num eq "");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
367 # only counts deletions, insertions are not part of the aligment
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
368 $counter_of_trimmed_columns_from_the_start += $num if ($type eq "D");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
369 shift(@reference_cigar);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
370 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
371 last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
372 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
373 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
374 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
375 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
376
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
377 #If this is negative, eg when a slice starts in one block and ends in
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
378 #another, need to set to 0 to ensure we enter the loop below. This
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
379 #fixes a bug when using a 2x species as the reference and fetching using
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
380 #an expanded align slice.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
381 if ($number_of_base_pairs_to_trim_from_the_end < 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
382 $number_of_base_pairs_to_trim_from_the_end = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
383 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
384
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
385 ## Parse end of cigar_line for the reference GenomicAlign
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
386 my $counter_of_trimmed_columns_from_the_end = 0; # num. of bp in the alignment to be trimmed
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
387 if ($number_of_base_pairs_to_trim_from_the_end >= 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
388 my $counter_of_trimmed_base_pairs = 0; # num of bp in the reference sequence we trim (from the end)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
389 ## Loop through the cigar pieces
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
390 while (my $cigar = pop(@reference_cigar)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
391 # Parse each cigar piece
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
392 my ($num, $type) = ($cigar =~ /^(\d*)([DIGMX])/);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
393 $num = 1 if ($num eq "");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
394
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
395 # Insertions are not part of the alignment, don't count them
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
396 if ($type ne "I") {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
397 $counter_of_trimmed_columns_from_the_end += $num;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
398 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
399
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
400 # Matches and insertions are actual base pairs in the reference
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
401 if ($type eq "M" or $type eq "I") {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
402 $counter_of_trimmed_base_pairs += $num;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
403 # If this cigar piece is too long and we overshoot the number of base pairs we want to trim,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
404 # we substitute this cigar piece by a shorter one
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
405 if ($counter_of_trimmed_base_pairs > $number_of_base_pairs_to_trim_from_the_end) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
406 my $new_cigar_piece = "";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
407 # length of the new cigar piece
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
408 my $length = $counter_of_trimmed_base_pairs - $number_of_base_pairs_to_trim_from_the_end;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
409 if ($length > 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
410 $new_cigar_piece = $length.$type;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
411 } elsif ($length == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
412 $new_cigar_piece = $type;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
413 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
414 push(@reference_cigar, $new_cigar_piece) if ($new_cigar_piece);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
415
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
416 # There is no need to correct the counter of trimmed columns if we are in an insertion
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
417 # when we overshoot
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
418 if ($type eq "M") {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
419 $counter_of_trimmed_columns_from_the_end -= $length;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
420 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
421
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
422 ## We don't want to end with an insertion or a deletion. Trim them!
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
423 while (@reference_cigar and $reference_cigar[-1] =~ /[DI]/) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
424 my ($num, $type) = ($reference_cigar[-1] =~ /^(\d*)([DIGMX])/);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
425 $num = 1 if ($num eq "");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
426 # only counts deletions, insertions are not part of the aligment
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
427 $counter_of_trimmed_columns_from_the_end += $num if ($type eq "D");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
428 pop(@reference_cigar);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
429 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
430 last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
431 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
432 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
433 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
434 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
435
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
436 ## Skip if no restriction is needed. Return original object! This may happen when
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
437 ## either excess_at_the_start or excess_at_the_end are 0 but the alignment does not
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
438 ## start or end with gaps in the reference species.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
439 if ($counter_of_trimmed_columns_from_the_start <= 0 and $counter_of_trimmed_columns_from_the_end <= 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
440 return wantarray ? ($self, 1, $self->length) : $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
441 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
442
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
443 my ($aln_start, $aln_end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
444 if ($negative_strand) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
445 $aln_start = $counter_of_trimmed_columns_from_the_end + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
446 $aln_end = $self->length - $counter_of_trimmed_columns_from_the_start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
447 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
448 $aln_start = $counter_of_trimmed_columns_from_the_start + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
449 $aln_end = $self->length - $counter_of_trimmed_columns_from_the_end;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
450 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
451
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
452 $genomic_align_set = $self->restrict_between_alignment_positions($aln_start, $aln_end, $skip_empty_GenomicAligns);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
453 $new_reference_genomic_align = $genomic_align_set->reference_genomic_align;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
454
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
455 if (!defined $self->{'restricted_aln_start'}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
456 $self->{'restricted_aln_start'} = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
457 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
458 if (!defined $self->{'restricted_aln_end'}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
459 $self->{'restricted_aln_end'} = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
460 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
461 $genomic_align_set->{'restricted_aln_start'} = $counter_of_trimmed_columns_from_the_start + $self->{'restricted_aln_start'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
462 $genomic_align_set->{'restricted_aln_end'} = $counter_of_trimmed_columns_from_the_end + $self->{'restricted_aln_end'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
463 #$genomic_align_set->{'original_length'} = $self->length;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
464
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
465 #Need to use original gab length. If original_length is not set, length has
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
466 #not changed. Needed when use 2X genome as reference.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
467 if (defined $self->{'original_length'}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
468 $genomic_align_set->{'original_length'} = $self->{'original_length'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
469 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
470 $genomic_align_set->{'original_length'} = $self->length;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
471 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
472
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
473 if (defined $self->slice) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
474 if ($self->strand == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
475 $genomic_align_set->start($new_reference_genomic_align->dnafrag_start -
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
476 $self->slice->start + 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
477 $genomic_align_set->end($new_reference_genomic_align->dnafrag_end -
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
478 $self->slice->start + 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
479 $genomic_align_set->strand(1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
480 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
481 $genomic_align_set->start($self->{reference_slice}->{end} -
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
482 $new_reference_genomic_align->{dnafrag_end} + 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
483 $genomic_align_set->end($self->{reference_slice}->{end} -
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
484 $new_reference_genomic_align->{dnafrag_start} + 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
485 $genomic_align_set->strand(-1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
486 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
487 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
488
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
489 return wantarray ? ($genomic_align_set, $aln_start, $aln_end) : $genomic_align_set;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
490 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
491
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
492 1;