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

Deleted selected files
author willmclaren
date Fri, 03 Aug 2012 10:05:43 -0400
parents 21066c0abaf5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 =head1 LICENSE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 This software is distributed under a modified Apache license.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 For license details, please see
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 =head1 CONTACT
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17 <helpdesk@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19 =head1 AUTHORSHIP
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21 Ensembl Team. Individual contributions can be found in the CVS log.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 AlignedMember - DESCRIPTION of Object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31 A subclass of Member which extends it to allow it to be aligned with other AlignedMember objects.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32 General enough to allow for global, local, pair-wise and multiple alignments.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33 At the moment used primarily in NestedSet Tree data-structure, but there are plans to extend its usage.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35 =head1 INHERITANCE TREE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37 Bio::EnsEMBL::Compara::AlignedMember
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38 +- Bio::EnsEMBL::Compara::Member
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 =head1 METHODS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 package Bio::EnsEMBL::Compara::AlignedMember;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 use Bio::EnsEMBL::Utils::Exception;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48 use Bio::EnsEMBL::Compara::Member;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50 use base ('Bio::EnsEMBL::Compara::Member');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53 ##################################
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54 # overriden superclass methods
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 ##################################
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 =head2 copy
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59 Arg [1] : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60 Example : $copy = $aligned_member->copy();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61 Description : Creates a new AlignedMember object from an existing one
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62 Returntype : Bio::EnsEMBL::Compara::AlignedMember
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69 sub copy {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72 my $mycopy = @_ ? shift : {}; # extending or from scratch?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73 $self->SUPER::copy($mycopy);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74 bless $mycopy, 'Bio::EnsEMBL::Compara::AlignedMember';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76 # The following does not Work if the initial object is only a Member
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77 if (UNIVERSAL::isa($self, 'Bio::EnsEMBL::Compara::AlignedMember')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78 $mycopy->cigar_line($self->cigar_line);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 $mycopy->cigar_start($self->cigar_start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 $mycopy->cigar_end($self->cigar_end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81 $mycopy->perc_cov($self->perc_cov);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82 $mycopy->perc_id($self->perc_id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83 $mycopy->perc_pos($self->perc_pos);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84 $mycopy->method_link_species_set_id($self->method_link_species_set_id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87 return $mycopy;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 #####################################################
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94 =head2 cigar_line
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96 Arg [1] : (optional) $cigar_line
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 Example : $object->cigar_line($cigar_line);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98 Example : $cigar_line = $object->cigar_line();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99 Description : Getter/setter for the cigar_line attribute. The cigar line
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 represents the modifications that are required to go from
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101 the original sequence to the aligned sequence. In particular,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102 it shows the location of the gaps in the sequence. The cigar
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 line is built with a series of numbers and characters where
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104 the number represents the number of positions in the mode
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 defined by the next charcater. When the number is 1, it can be
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106 omitted. For example, the cigar line '23MD4M' means that there
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107 are 23 matches or mismatches, then 1 deletion (gap) and then
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108 another 4 matches or mismatches. The aligned sequence is
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 obtained by inserting 1 gap at the right location.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 Returntype : string
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 cigar_line {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119 $self->{'_cigar_line'} = shift if(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 return $self->{'_cigar_line'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 =head2 cigar_start
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126 Arg [1] : (optional) $cigar_start
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 Example : $object->cigar_start($cigar_start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128 Example : $cigar_start = $object->cigar_start();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 Description : Getter/setter for the cigar_start attribute. For non-global
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 alignments, this represent the starting point of the local
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 alignment.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132 Currently the data provided as AlignedMembers (leaves of the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 GeneTree) are obtained using global alignments and the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134 cigar_start is always 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 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 sub cigar_start {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 $self->{'_cigar_start'} = shift if(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 return $self->{'_cigar_start'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 =head2 cigar_end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151 Arg [1] : (optional) $cigar_end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 Example : $object->cigar_end($cigar_end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153 Example : $cigar_end = $object->cigar_end();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 Description : Getter/setter for the cigar_end attribute. For non-global
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 alignments, this represent the ending point of the local
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 alignment.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157 Currently the data provided as AlignedMembers (leaves of the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158 GeneTree) are obtained using global alignments and the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 cigar_end is always undefined.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 Returntype : integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167 sub cigar_end {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 $self->{'_cigar_end'} = shift if(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170 return $self->{'_cigar_end'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 =head2 perc_cov
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 Arg [1] : (optional) $perc_cov
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177 Example : $object->perc_cov($perc_cov);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178 Example : $perc_cov = $object->perc_cov();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179 Description : Getter/setter for the perc_cov attribute. For non-global
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 alignments, this represent the coverage of the alignment in
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181 percentage of the total length of the sequence.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 Currently the data provided as AlignedMembers (leaves of the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183 GeneTree) are obtained using global alignments (the whole
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 sequence is always included) and the perc_cov is always undefined.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 Returntype : integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192 sub perc_cov {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 $self->{'perc_cov'} = shift if(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 return $self->{'perc_cov'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199 =head2 perc_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201 Arg [1] : (optional) $perc_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202 Example : $object->perc_id($perc_id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203 Example : $perc_id = $object->perc_id();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204 Description : Getter/setter for the perc_id attribute. This is generally
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205 used for pairwise relationships. The percentage identity
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 reprensents the number of positions that are identical in
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207 the alignment in both sequences.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 Currently the data provided as AlignedMembers (leaves of the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209 GeneTree) are obtained using multiple alignments and the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210 perc_id is always undefined.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211 Returntype : integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218 sub perc_id {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220 $self->{'perc_id'} = shift if(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 return $self->{'perc_id'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 =head2 perc_pos
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 Arg [1] : (optional) $perc_pos
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 Example : $object->perc_pos($perc_pos);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229 Example : $perc_pos = $object->perc_pos();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 Description : Getter/setter for the perc_pos attribute. This is generally
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231 used for pairwise relationships. The percentage positivity
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232 reprensents the number of positions that are positive in
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 the alignment in both sequences. Currently, this is calculated
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234 for protein sequences using the BLOSUM62 scoring matrix.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 Currently the data provided as AlignedMembers (leaves of the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236 GeneTree) are obtained using multiple alignments and the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237 perc_cov is always undefined.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238 Returntype : integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245 sub perc_pos {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247 $self->{'perc_pos'} = shift if(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 return $self->{'perc_pos'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252 =head2 method_link_species_set_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 Arg [1] : (optional) $method_link_species_set_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255 Example : $object->method_link_species_set_id($method_link_species_set_id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 Example : $method_link_species_set_id = $object->method_link_species_set_id();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257 Description : Getter/setter for the method_link_species_set_id attribute. Please,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258 refer to the Bio::EnsEMBL::Compara::MethodLinkSpeciesSet module
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 for more information on the method_link_species_set_id.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 Returntype : int
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261 Exceptions : Returns 0 if the method_link_species_set_id is not defined.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267 sub method_link_species_set_id {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269 $self->{'method_link_species_set_id'} = shift if(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270 $self->{'method_link_species_set_id'} = 0 unless(defined($self->{'method_link_species_set_id'}));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271 return $self->{'method_link_species_set_id'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 sub set {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277 return $self->{'set'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281 =head2 alignment_string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283 Arg [1] : (optional) bool $exon_cased
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 Example : my $alignment_string = $object->alignment_string();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285 Example : my $alignment_string = $object->alignment_string(1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286 Description : Returns the aligned sequence for this object. For sequences
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287 split in exons, the $exon_cased flag permits to request
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 that each exon is represented in alternative upper and lower
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289 case.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290 For local alignments, when the alignment does not cover the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291 whole protein, only the part of the sequence in the alignemnt
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292 is returned. Currently only global alignments are provided.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 Therefore the alignment_string always returns the whole aligned
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294 sequence.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295 Returntype : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296 Exceptions : throws if the cigar_line is not defined for this object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302 sub alignment_string {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304 my $exon_cased = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306 unless (defined $self->cigar_line && $self->cigar_line ne "") {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307 throw("To get an alignment_string, the cigar_line needs to be define\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310 # Use different keys for exon-cased and non exon-cased sequences
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311 my $key = 'alignment_string';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312 if ($exon_cased) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313 $key = 'alignment_string_cased';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314 } elsif (defined $self->{'alignment_string_cased'} and !defined($self->{'alignment_string'})) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315 # non exon-cased sequence can be easily obtained from the exon-cased one.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316 $self->{'alignment_string'} = uc($self->{'alignment_string_cased'})
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319 unless (defined $self->{$key}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320 my $sequence;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321 if ($exon_cased) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322 $sequence = $self->sequence_exon_cased;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324 $sequence = $self->sequence;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326 if (defined $self->cigar_start || defined $self->cigar_end) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327 unless (defined $self->cigar_start && defined $self->cigar_end) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328 throw("both cigar_start and cigar_end should be defined");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330 my $offset = $self->cigar_start - 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331 my $length = $self->cigar_end - $self->cigar_start + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332 $sequence = substr($sequence, $offset, $length);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335 my $cigar_line = $self->cigar_line;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336 $cigar_line =~ s/([MD])/$1 /g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338 my @cigar_segments = split " ",$cigar_line;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 my $alignment_string = "";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340 my $seq_start = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341 foreach my $segment (@cigar_segments) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342 if ($segment =~ /^(\d*)D$/) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343 my $length = $1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344 $length = 1 if ($length eq "");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345 $alignment_string .= "-" x $length;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346 } elsif ($segment =~ /^(\d*)M$/) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347 my $length = $1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348 $length = 1 if ($length eq "");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349 $alignment_string .= substr($sequence,$seq_start,$length);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350 $seq_start += $length;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
353 $self->{$key} = $alignment_string;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
354 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
355
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
356 return $self->{$key};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
357 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
358
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
359
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
360 =head2 alignment_string_bounded
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
361
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
362 Arg [1] : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
363 Example : my $alignment_string_bounded = $object->alignment_string_bounded();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
364 Description : Returns the aligned sequence for this object with padding characters
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
365 representing the introns.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
366 Returntype : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
367 Exceptions : throws if the cigar_line is not defined for this object or if the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
368 cigar_start or cigar_end are defined.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
369 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
370 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
371
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
372 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
373
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
374 sub alignment_string_bounded {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
375 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
376
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
377 unless (defined $self->cigar_line && $self->cigar_line ne "") {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
378 throw("To get an alignment_string, the cigar_line needs to be define\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
379 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
380 unless (defined $self->{'alignment_string_bounded'}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
381 my $sequence_exon_bounded = $self->sequence_exon_bounded;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
382 if (defined $self->cigar_start || defined $self->cigar_end) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
383 throw("method doesnt implement defined cigar_start and cigar_end");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
384 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
385 $sequence_exon_bounded =~ s/b|o|j/\ /g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
386 my $cigar_line = $self->cigar_line;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
387 $cigar_line =~ s/([MD])/$1 /g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
388
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
389 my @cigar_segments = split " ",$cigar_line;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
390 my $alignment_string_bounded = "";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
391 my $seq_start = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
392 my $exon_count = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
393 foreach my $segment (@cigar_segments) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
394 if ($segment =~ /^(\d*)D$/) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
395 my $length = $1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
396 $length = 1 if ($length eq "");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
397 $alignment_string_bounded .= "-" x $length;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
398 } elsif ($segment =~ /^(\d*)M$/) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
399 my $length = $1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
400 $length = 1 if ($length eq "");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
401 my $substring = substr($sequence_exon_bounded,$seq_start,$length);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
402 if ($substring =~ /\ /) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
403 my $num_boundaries = $substring =~ s/(\ )/$1/g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
404 $length += $num_boundaries;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
405 $substring = substr($sequence_exon_bounded,$seq_start,$length);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
406 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
407 $alignment_string_bounded .= $substring;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
408 $seq_start += $length;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
409 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
410 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
411 $self->{'alignment_string_bounded'} = $alignment_string_bounded;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
412 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
413
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
414 return $self->{'alignment_string_bounded'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
415 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
416
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
417
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
418 =head2 cdna_alignment_string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
419
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
420 Arg [1] : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
421 Example : my $cdna_alignment = $aligned_member->cdna_alignment_string();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
422 Description: Converts the peptide alignment string to a cdna alignment
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
423 string. This only works for EnsEMBL peptides whose cdna can
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
424 be retrieved from the attached core databse.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
425 If the cdna cannot be retrieved undef is returned and a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
426 warning is thrown.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
427 Returntype : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
428 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
429 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
430
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
431 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
432
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
433 sub cdna_alignment_string {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
434 my ($self, $changeSelenos) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
435 $changeSelenos = 0 unless (defined $changeSelenos);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
436
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
437 unless (defined $self->{'cdna_alignment_string'}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
438
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
439 my $cdna;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
440 eval { $cdna = $self->sequence_cds;};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
441 if ($@) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
442 throw("can't connect to CORE to get transcript and cdna for "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
443 . "genome_db_id:" . $self->genome_db_id )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
444 unless($self->get_Transcript);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
445 $cdna = $self->get_Transcript->translateable_seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
446 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
447
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
448 if (defined $self->cigar_start || defined $self->cigar_end) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
449 unless (defined $self->cigar_start && defined $self->cigar_end) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
450 throw("both cigar_start and cigar_end should be defined");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
451 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
452 my $offset = $self->cigar_start * 3 - 3;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
453 my $length = ($self->cigar_end - $self->cigar_start + 1) * 3;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
454 $cdna = substr($cdna, $offset, $length);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
455 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
456
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
457 my $start = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
458 my $cdna_align_string = '';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
459
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
460 # foreach my $pep (split(//, $self->alignment_string)) { # Speed up below
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
461 my $alignment_string = $self->alignment_string;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
462 foreach my $pep (unpack("A1" x length($alignment_string), $alignment_string)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
463 if($pep eq '-') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
464 $cdna_align_string .= '--- ';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
465 } elsif ((($pep eq 'U') and $changeSelenos) or ($pep eq '*')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
466 $cdna_align_string .= 'NNN ';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
467 $start += 3;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
468 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
469 my $codon = substr($cdna, $start, 3);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
470 unless (length($codon) == 3) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
471 # sometimes the last codon contains only 1 or 2 nucleotides.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
472 # making sure that it has 3 by adding as many Ns as necessary
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
473 $codon .= 'N' x (3 - length($codon));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
474 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
475 $cdna_align_string .= $codon . ' ';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
476 $start += 3;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
477 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
478 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
479 $self->{'cdna_alignment_string'} = $cdna_align_string;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
480 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
481
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
482 return $self->{'cdna_alignment_string'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
483 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
484
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
485
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
486 1;