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

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 Bio::EnsEMBL::DnaDnaAlignFeature - Ensembl specific dna-dna pairwise
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 alignment feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 See BaseAlignFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 package Bio::EnsEMBL::DnaDnaAlignFeature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 use Bio::EnsEMBL::BaseAlignFeature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 use Bio::SimpleAlign;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 use Bio::LocatableSeq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 use Bio::EnsEMBL::Utils::Argument qw(rearrange);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 @ISA = qw( Bio::EnsEMBL::BaseAlignFeature );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 Arg [..] : List of named arguments. (-pair_dna_align_feature_id) defined
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 in this constructor, others defined in BaseFeaturePair and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 SeqFeature superclasses.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 Example : $daf = new DnaDnaAlignFeature(-cigar_string => '3M3I12M');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 Description: Creates a new DnaDnaAlignFeature using either a cigarstring or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 a list of ungapped features.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 Returntype : Bio::EnsEMBL::DnaDnaAlignFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 my $caller = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 my $class = ref($caller) || $caller;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 my $self = $class->SUPER::new(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 my ($pair_dna_align_feature_id) = rearrange([qw(PAIR_DNA_ALIGN_FEATURE_ID)], @_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 if (defined $pair_dna_align_feature_id){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 $self->{'pair_dna_align_feature_id'} = $pair_dna_align_feature_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 =head2 pair_dna_align_feature_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 Arg[1] : (optional) String $arg - value to set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 Example : $self->pair_dna_align_feature_id($pair_feature_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 Description: Getter/setter for attribute 'pair_dna_align_feature_id'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 The id of the dna feature aligned
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 Returntype : String
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 sub pair_dna_align_feature_id{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 my ($self, $arg) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 if (defined $arg){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 $self->{pair_dna_align_feature_id} = $arg;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 return $self->{pair_dna_align_feature_id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 =head2 _hit_unit
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 Description: PRIVATE implementation of abstract superclass method. Returns
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 1 as the 'unit' used for the hit sequence.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 Returntype : int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 Caller : Bio::EnsEMBL::BaseAlignFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 sub _hit_unit {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 =head2 _query_unit
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 Description: PRIVATE implementation of abstract superclass method Returns
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 1 as the 'unit' used for the hit sequence.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 Returntype : int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 Caller : Bio::EnsEMBL::BaseAlignFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 sub _query_unit {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 =head2 restrict_between_positions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 Arg [1] : int $start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 Arg [2] : int $end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 Arg [3] : string $flags
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 SEQ = $start and $end apply to the seq sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 i.e. start and end methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 HSEQ = $start and $end apply to the hseq sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 i.e. hstart and hend methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 Example : $daf->restrict_between_positions(150,543,"SEQ")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 Description: Build a new DnaDnaAlignFeature object that fits within
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 the new specified coordinates and sequence reference, cutting
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 any pieces hanging upstream and downstream.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 Returntype : Bio::EnsEMBL::DnaDnaAlignFeature object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 Exceptions :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 Caller :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 sub restrict_between_positions {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 my ($self,$start,$end,$seqref) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 unless (defined $start && $start =~ /^\d+$/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 $self->throw("The first argument is not defined or is not an integer");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 unless (defined $end && $end =~ /^\d+$/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 $self->throw("The second argument is not defined or is not an integer");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 unless (defined $seqref &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 ($seqref eq "SEQ" || $seqref eq "HSEQ")) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 $self->throw("The third argument is not defined or is not equal to 'SEQ' or 'HSEQ'");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 # symbolic method references should be forbidden!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 # need to be rewrite at some stage.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 my ($start_method1,$end_method1,$strand_method1,$start_method2,$end_method2,$strand_method2) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 qw(start end strand hstart hend hstrand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 if ($seqref eq "HSEQ") {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 ($start_method1,$end_method1,$strand_method1,$start_method2,$end_method2,$strand_method2) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 qw(hstart hend hstrand start end strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 my @restricted_features;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 foreach my $ungapped_feature ($self->ungapped_features) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 if ($ungapped_feature->$start_method1() > $end ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 $ungapped_feature->$end_method1() < $start) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 } elsif ($ungapped_feature->$end_method1() <= $end &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 $ungapped_feature->$start_method1() >= $start) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 push @restricted_features, $ungapped_feature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 if ($ungapped_feature->$strand_method1() eq $ungapped_feature->$strand_method2()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 if ($ungapped_feature->$start_method1() < $start) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 my $offset = $start - $ungapped_feature->$start_method1();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 $ungapped_feature->$start_method1($start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 $ungapped_feature->$start_method2($ungapped_feature->$start_method2() + $offset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 if ($ungapped_feature->$end_method1() > $end) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 my $offset = $ungapped_feature->$end_method1() - $end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 $ungapped_feature->$end_method1($end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 $ungapped_feature->$end_method2($ungapped_feature->$end_method2() - $offset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 if ($ungapped_feature->$start_method1() < $start) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 my $offset = $start - $ungapped_feature->$start_method1();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 $ungapped_feature->$start_method1($start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 $ungapped_feature->$end_method2($ungapped_feature->$end_method2() - $offset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 if ($ungapped_feature->$end_method1() > $end) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 my $offset = $ungapped_feature->$end_method1() - $end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 $ungapped_feature->$end_method1($end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 $ungapped_feature->$start_method2($ungapped_feature->$start_method2() + $offset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 push @restricted_features, $ungapped_feature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 if (scalar @restricted_features) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 my $DnaDnaAlignFeature = new Bio::EnsEMBL::DnaDnaAlignFeature('-features' =>\@restricted_features);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 if (defined $self->slice) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 $DnaDnaAlignFeature->slice($self->slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 if (defined $self->hslice) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 $DnaDnaAlignFeature->hslice($self->hslice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 return $DnaDnaAlignFeature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 =head2 alignment_strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 Arg [1] : list of string $flags
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 FIX_SEQ = does not introduce gaps (dashes) in seq aligned sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 and delete the corresponding insertions in hseq aligned sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 FIX_HSEQ = does not introduce gaps (dashes) in hseq aligned sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 and delete the corresponding insertions in seq aligned sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 NO_SEQ = return the seq aligned sequence as an empty string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 NO_HSEQ = return the hseq aligned sequence as an empty string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 This 2 last flags would save a bit of time as doing so no querying to the core
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 database in done to get the sequence.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 Example : $daf->alignment_strings or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 $daf->alignment_strings("FIX_HSEQ") or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 $daf->alignment_strings("NO_SEQ","FIX_SEQ")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 Description: Allows to rebuild the alignment string of both the seq and hseq sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 using the cigar_string information and the slice and hslice objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 Returntype : array reference containing 2 strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 the first corresponds to seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 the second corresponds to hseq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 Exceptions :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 Caller :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 sub alignment_strings {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 my ( $self, @flags ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 # set the flags
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 my $seq_flag = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 my $hseq_flag = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 my $fix_seq_flag = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 my $fix_hseq_flag = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 for my $flag ( @flags ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 $seq_flag = 0 if ($flag eq "NO_SEQ");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 $hseq_flag = 0 if ($flag eq "NO_HSEQ");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 $fix_seq_flag = 1 if ($flag eq "FIX_SEQ");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 $fix_hseq_flag = 1 if ($flag eq "FIX_HSEQ");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 my ($seq, $hseq);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 $seq = $self->slice->subseq($self->start, $self->end, $self->strand) if ($seq_flag || $fix_seq_flag);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 $hseq = $self->hslice->subseq($self->hstart, $self->hend, $self->hstrand) if ($hseq_flag || $fix_hseq_flag);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 my $rseq= "";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 # rseq - result sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 my $rhseq= "";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 # rhseq - result hsequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 my $seq_pos = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 my $hseq_pos = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 my @cig = ( $self->cigar_string =~ /(\d*[DIM])/g );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 for my $cigElem ( @cig ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 my $cigType = substr( $cigElem, -1, 1 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 my $cigCount = substr( $cigElem, 0 ,-1 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 $cigCount = 1 unless $cigCount;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 if( $cigType eq "M" ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 $rseq .= substr( $seq, $seq_pos, $cigCount ) if ($seq_flag);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 $rhseq .= substr( $hseq, $hseq_pos, $cigCount ) if ($hseq_flag);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 $seq_pos += $cigCount;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 $hseq_pos += $cigCount;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 } elsif( $cigType eq "D" ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 if( ! $fix_seq_flag ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 $rseq .= "-" x $cigCount if ($seq_flag);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 $rhseq .= substr( $hseq, $hseq_pos, $cigCount ) if ($hseq_flag);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 $hseq_pos += $cigCount;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 } elsif( $cigType eq "I" ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 if( ! $fix_hseq_flag ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 $rseq .= substr( $seq, $seq_pos, $cigCount ) if ($seq_flag);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 $rhseq .= "-" x $cigCount if ($hseq_flag);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 $seq_pos += $cigCount;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 return [ $rseq,$rhseq ];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 =head2 get_SimpleAlign
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 Arg [1] : list of string $flags
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 translated = by default, the sequence alignment will be on nucleotide. With translated flag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 the aligned sequences are translated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 uc = by default aligned sequences are given in lower cases. With uc flag, the aligned
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 sequences are given in upper cases.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 Example : $daf->get_SimpleAlign or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 $daf->get_SimpleAlign("translated") or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 $daf->get_SimpleAlign("translated","uc")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 Description: Allows to rebuild the alignment string of both the seq and hseq sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 using the cigar_string information and the slice and hslice objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 Returntype : a Bio::SimpleAlign object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 Exceptions :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 Caller :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 sub get_SimpleAlign {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 my ( $self, @flags ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 # setting the flags
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 my $uc = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 my $translated = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 for my $flag ( @flags ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 $uc = 1 if ($flag =~ /^uc$/i);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 $translated = 1 if ($flag =~ /^translated$/i);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 my $sa = Bio::SimpleAlign->new();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 #Hack to try to work with both bioperl 0.7 and 1.2:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 #Check to see if the method is called 'addSeq' or 'add_seq'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 my $bio07 = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 if(!$sa->can('add_seq')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 $bio07 = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 my ($sb_seq,$qy_seq) = @{$self->alignment_strings};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 my $loc_sb_seq = Bio::LocatableSeq->new(-SEQ => $uc ? uc $sb_seq : lc $sb_seq,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 -START => $self->seq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 -END => $self->seq_region_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 -ID => $self->seqname,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 -STRAND => $self->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 $loc_sb_seq->seq($uc ? uc $loc_sb_seq->translate->seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 : lc $loc_sb_seq->translate->seq) if ($translated);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 my $loc_qy_seq = Bio::LocatableSeq->new(-SEQ => $uc ? uc $qy_seq : lc $qy_seq,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 -START => $self->hseq_region_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 -END => $self->hseq_region_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 -ID => $self->hseqname,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 -STRAND => $self->hstrand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 $loc_qy_seq->seq($uc ? uc $loc_qy_seq->translate->seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 : lc $loc_qy_seq->translate->seq) if ($translated);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 if($bio07) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 $sa->addSeq($loc_sb_seq);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 $sa->addSeq($loc_qy_seq);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 $sa->add_seq($loc_sb_seq);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 $sa->add_seq($loc_qy_seq);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 return $sa;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 1;