annotate variant_effect_predictor/Bio/EnsEMBL/SeqEdit.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 Bio::EnsEMBL:SeqEdit - A class representing a post transcriptional edit to a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 sequence.
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 use Bio::EnsEMBL::SeqEdit;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 use Bio::EnsEMBL::Attribute;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 # construct a SeqEdit object using a Transcript attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 ($attribute) = @{ $translation->get_all_Attributes('_rna_edit') };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 $seq_edit = Bio::EnsEMBL::SeqEdit( -ATTRIB => $attribute );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 print $seq_edit->start(), "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 print $seq_edit->end(), "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 print $seq_edit->alt_seq(), "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 # apply the edit to some sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 $seq = $transcript->spliced_seq();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 print "Before modifiction: $seq\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 $seq_edit->apply_edit( \$seq );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 print "After modification: $seq\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 # construct an attribute object from a SeqEdit and add it to a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 # translation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 $seq_edit = Bio::EnsEMBL::SeqEdit->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 -CODE => '_selenocysteine',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 -NAME => 'Selenocysteine',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 -DESC => 'Selenocysteine',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 -START => 10,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 -END => 10,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 -ALT_SEQ => 'U'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 $attribute = $seq_edit->get_Attribute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 $translation->add_Attributes($attribute);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 This is a class used to represent post transcriptional
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 modifications to sequences. SeqEdit objects are stored as ordinary
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 Bio::EnsEMBL::Attributes with a parseable value and can be used to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 represent RNA editing, selenocysteines etc.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 Also see B<Bio::EnsEMBL::Attribute>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 package Bio::EnsEMBL::SeqEdit;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 use Bio::EnsEMBL::Attribute;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 use Bio::EnsEMBL::Utils::Argument qw(rearrange);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 use Bio::EnsEMBL::Utils::Exception qw(throw);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 Arg [-ATTRIB] : Bio::EnsEMBL::Attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 Constructs a new SeqEdit from an Attribute.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 Can only be provided if no other constructor arguments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 are provided.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 Arg [-START] : The start position of the edit.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 Arg [-END] : The end position of the edit.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 Arg [-ALT_SEQ] : The alternate sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 Arg [-CODE] : A code for this SeqEdit
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 Arg [-NAME] : A name for this SeqEdit
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 Arg [-DESCRIPTION] : Arg passed to superclass constructor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 Example : my $sea = Bio::EnsEMBL::SeqEdit->new(-ATTRIB => $attrib);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 my $sea = Bio::EnsEMBL::SeqEdit->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 (-START => 10,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 -END => 12,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 -ALT_SEQ => 'ACG',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 -CODE => '_rna_edit',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 -NAME => 'RNA Edit',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 -DESCRIPTION => 'RNA edit');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 Description: Constructs a SeqEdit representing a single edit to a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 sequence, such as an rna modification or a selenocysteine.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 Returntype : Bio::EnsEMBL::SeqEdit
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 Exceptions : throws if attribute set and other args aswell
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 throws if start and end not set correctly of attribure not set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 my $class = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 my ($attrib, $start, $end, $alt_seq, $name, $desc, $code) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 rearrange([qw(ATTRIB START END ALT_SEQ NAME DESCRIPTION CODE)], @_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 my $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 if($attrib) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 if(defined($start) || defined($end) || defined($alt_seq) ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 defined($name) || defined($desc) || defined($code)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 throw("Cannot specify -ATTRIB argument with additional arguments.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 if(!ref($attrib) || !$attrib->isa('Bio::EnsEMBL::Attribute')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 throw('Bio::EnsEMBL::Attribute argument expected.');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 ($start, $end, $alt_seq) = split(/\s+/, $attrib->value());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 if($start !~ /\d+/ || $end !~ /\d+/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 throw('Could not parse value of attribute: '.$attrib->value());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 $name = $attrib->name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 $code = $attrib->code();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 $desc = $attrib->description();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 if(defined($end) && defined($start) && $start > $end+1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 throw("start must be less than or equal to end + 1");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 if(defined($start) && $start < 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 throw("start must be greater than or equal to 1");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 if(defined($end) && $end < 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 throw("end must be greater than or equal to 0");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 $alt_seq ||= '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 return bless {'start' => $start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 'end' => $end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 'alt_seq' => $alt_seq,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 'description' => $desc,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 'name' => $name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 'code' => $code}, $class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 =head2 start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 Arg [1] : (optional) int $start - the new start position
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 Example : $start = $se_attrib->start();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 Description: Getter/Setter for the start position of the region replaced
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 by the alt_seq.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 Coordinates are inclusive and one-based, which means that
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 inserts are unusually represented by a start 1bp higher than
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 the end.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 E.g. start = 1, end = 1 is a replacement of the first base but
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 start = 1, end = 0 is an insert BEFORE the first base.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 Returntype : int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 Caller : Transcript, Translation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 sub start {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 if(@_) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 my $start = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 if(defined($start) && $start < 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 throw("start must be greater than or equal to 1");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 $self->{'start'} = $start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 return $self->{'start'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 =head2 end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 Arg [1] : (optional) int $end - the new end position
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 Example : $end = $se_attrib->end();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 Description: Getter/Setter for the end position of the region replaced
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 by the alt_seq.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 Coordinates are inclusive and one-based, which means that
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 inserts are unusually represented by a start 1bp higher than
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 the end.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 E.g. start = 1, end = 1 is a replacement of the first base but
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 start = 1, end = 0 is an insert BEFORE the first base.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 Returntype : int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 Exceptions : throws if end <= 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 Caller : Transcript, Translation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 sub end {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 if(@_) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 my $end = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 if(defined($end) && $end < 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 throw("end must be greater than or equal to 0");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 $self->{'end'} = $end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 return $self->{'end'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 =head2 alt_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 Arg [1] : (optional) string $alt_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 Example : my $alt_seq = $se_attrib->alt_seq();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 Description: Getter/Setter for the replacement sequence used by this edit.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 The sequence may either be a string of amino acids or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 nucleotides depending on the context in which this edit is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 used.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 In the case of a deletion the replacement sequence is an empty
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 string.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 Caller : Transcript, Translation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 sub alt_seq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 $self->{'alt_seq'} = shift || '' if(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 return $self->{'alt_seq'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 =head2 length_diff
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 Example : my $diff = $sea->length_diff();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 Description: Returns the difference in length caused by applying this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 edit to a sequence. This may be be negative (deletion),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 positive (insertion) or 0 (replacement).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 If either start or end are not defined 0 is returned.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 Returntype : int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 sub length_diff {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 return 0 if(!defined($self->{'end'}) || !defined($self->{'start'}));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 return length($self->{'alt_seq'}) - ($self->{'end'} - $self->{'start'} + 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 =head2 name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 Arg [1] : (optional) string $name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 Example : my $name = $seqedit->name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 Description: Getter/Setter for the name of this SeqEdit
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 sub name {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 $self->{'name'} = shift if(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 return $self->{'name'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 =head2 code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 Arg [1] : (optional) string $code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 Example : my $code = $seqedit->code();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 Description: Getter/Setter for the code of this SeqEdit
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 sub code {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 $self->{'code'} = shift if(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 return $self->{'code'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 =head2 description
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 Arg [1] : (optional) string $desc
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 Example : my $desc = $seqedit->description();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 Description: Getter/Setter for the description of this SeqEdit
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 sub description {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 $self->{'description'} = shift if(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 return $self->{'description'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 =head2 get_Attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 Example : my $attrib = $seqedit->get_Attribute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 $transcript->add_Attributes($attrib);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 Description: Converts a SeqEdit object into an Attribute object. This
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 allows the SeqEdit to be stored as any other attribute in the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 ensembl database. The start/end and alt_seq properties
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 should be set before calling this method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 Returntype : Bio::EnsEMBL::Attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 Exceptions : warning if start/end or alt_seq properties are not defined
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 sub get_Attribute {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 my $start = $self->start();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 my $end = $self->end();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 my $alt_seq = $self->alt_seq();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 my $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 if(defined($start) && defined($end) && defined($alt_seq)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 $value = join(' ', $start, $end, $alt_seq);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 warning('Attribute value cannot be created unless start, end and alt_seq' .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 'properties are defined');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 $value = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 return Bio::EnsEMBL::Attribute->new(-CODE => $self->code(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 -VALUE => $value,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 -NAME => $self->name(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 -DESCRIPTION => $self->description());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 =head2 apply_edit
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 Arg [1] : reference to string $seqref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 Example : $sequence = 'ACTGAATATTTAAGGCA';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 $seqedit->apply_edit(\$sequence);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 print $sequence, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 Description: Applies this edit directly to a sequence which is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 passed by reference. The coordinates of this SeqEdit
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 are assumed to be relative to the start of the sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 argument.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 If either the start or end of this SeqEdit are not defined
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 this function will not do anything to the passed sequence.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 Returntype : reference to the same sequence that was passed in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 Caller : Transcript, Translation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 sub apply_edit {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 my $seqref = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 if(ref($seqref) ne 'SCALAR') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 throw("Reference to scalar argument expected");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 if(!defined($self->{'start'}) || !defined($self->{'end'})) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 return $seqref;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 my $len = $self->{'end'} - $self->{'start'} + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 substr($$seqref, $self->{'start'} - 1, $len) = $self->{'alt_seq'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 return $seqref;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 1;