annotate variant_effect_predictor/Bio/LiveSeq/Mutator.pm @ 0:21066c0abaf5 draft

Uploaded
author willmclaren
date Fri, 03 Aug 2012 10:04:48 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 # $Id: Mutator.pm,v 1.26 2002/10/22 07:38:34 lapp Exp $
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 # bioperl module for Bio::LiveSeq::Mutator
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5 # Cared for by Heikki Lehvaslaiho <heikki@ebi.ac.uk>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 # Copyright Joseph Insana
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 # POD documentation - main docs before the code
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15 Bio::LiveSeq::Mutator - Package mutating LiveSequences
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19 # $gene is a Bio::LiveSeq::Gene object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20 my $mutate = Bio::LiveSeq::Mutator->new('-gene' => $gene,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21 '-numbering' => "coding"
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 # $mut is a Bio::LiveSeq::Mutation object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24 $mutate->add_Mutation($mut);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25 # $results is a Bio::Variation::SeqDiff object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26 my $results=$mutate->change_gene();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 if ($results) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28 my $out = Bio::Variation::IO->new( '-format' => 'flat');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29 $out->write($results);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 This class mutates Bio::LiveSeq::Gene objects and returns a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35 Bio::Variation::SeqDiff object. Mutations are described as
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36 Bio::LiveSeq::Mutation objects. See L<Bio::LiveSeq::Gene>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37 L<Bio::Variation::SeqDiff>, and L<Bio::LiveSeq::Mutation> for details.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39 =head1 FEEDBACK
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 User feedback is an integral part of the evolution of this and other
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43 Bioperl modules. Send your comments and suggestions preferably to the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 Bioperl mailing lists Your participation is much appreciated.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 bioperl-l@bioperl.org - General discussion
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 http://bio.perl.org/MailList.html - About the mailing lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49 =head2 Reporting Bugs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51 report bugs to the Bioperl bug tracking system to help us keep track
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52 the bugs and their resolution. Bug reports can be submitted via
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53 email or the web:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 bioperl-bugs@bio.perl.org
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56 http://bugzilla.bioperl.org/
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58 =head1 AUTHOR - Heikki Lehvaslaiho & Joseph A.L. Insana
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60 Email: heikki@ebi.ac.uk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61 insana@ebi.ac.uk, jinsana@gmx.net
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 Address:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65 EMBL Outstation, European Bioinformatics Institute
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 Wellcome Trust Genome Campus, Hinxton
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67 Cambs. CB10 1SD, United Kingdom
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69 =head1 APPENDIX
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71 The rest of the documentation details each of the object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72 methods. Internal methods are usually preceded with a _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76 # Let the code begin...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78 package Bio::LiveSeq::Mutator;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 use vars qw(@ISA);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82 use vars qw($VERSION @ISA);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83 use Bio::Variation::SeqDiff;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84 use Bio::Variation::DNAMutation;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85 use Bio::Variation::RNAChange;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86 use Bio::Variation::AAChange;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87 use Bio::Variation::Allele;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88 use Bio::LiveSeq::Mutation;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90 #use integer;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 # Object preamble - inheritance
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 use Bio::Root::Root;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95 @ISA = qw( Bio::Root::Root );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 sub new {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98 my($class,@args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99 my $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 $self = {};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101 bless $self, $class;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 my ($gene, $numbering) =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104 $self->_rearrange([qw(GENE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 NUMBERING
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106 )],
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107 @args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 $self->{ 'mutations' } = [];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 $gene && $self->gene($gene);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112 $numbering && $self->numbering($numbering);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114 #class constant;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 $self->{'flanklen'} = 25;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116 return $self; # success - we hope!
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119 =head2 gene
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121 Title : gene
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 Usage : $mutobj = $obj->gene;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123 : $mutobj = $obj->gene($objref);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126 Returns or sets the link-reference to a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 Bio::LiveSeq::Gene object. If no value has ben set, it
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128 will return undef
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 Returns : an object reference or undef
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 Args : a Bio::LiveSeq::Gene
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 See L<Bio::LiveSeq::Gene> for more information.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137 sub gene {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 if (defined $value) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140 if( ! $value->isa('Bio::LiveSeq::Gene') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 $self->throw("Is not a Bio::LiveSeq::Gene object but a [$value]");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 return undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 $self->{'gene'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148 unless (exists $self->{'gene'}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 return (undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151 return $self->{'gene'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 =head2 numbering
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158 Title : numbering
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 Usage : $obj->numbering();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 Sets and returns coordinate system used in positioning the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 mutations. See L<change_gene> for details.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166 Returns : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167 Args : string (coding [transcript number] | gene | entry)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172 sub numbering {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 if( defined $value) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175 if ($value =~ /(coding)( )?(\d+)?/ or $value eq 'entry' or $value eq 'gene') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 $self->{'numbering'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177 } else { # defaulting to 'coding'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178 $self->{'numbering'} = 'coding';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181 unless (exists $self->{'numbering'}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 return 'coding';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 return $self->{'numbering'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188 =head2 add_Mutation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 Title : add_Mutation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 Usage : $self->add_Mutation($ref)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192 Function: adds a Bio::LiveSeq::Mutation object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 Args : a Bio::LiveSeq::Mutation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197 See L<Bio::LiveSeq::Mutation> for more information.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201 sub add_Mutation{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203 if( $value->isa('Bio::Liveseq::Mutation') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204 my $com = ref $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205 $self->throw("Is not a Mutation object but a [$com]" );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 return undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 if (! $value->pos) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209 $self->warn("No value for mutation position in the sequence!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210 return undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 if (! $value->seq && ! $value->len) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 $self->warn("Either mutated sequence or length of the deletion must be given!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 return undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216 push(@{$self->{'mutations'}},$value);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219 =head2 each_Mutation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 Title : each_Mutation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 Usage : foreach $ref ( $a->each_Mutation )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 Function: gets an array of Bio::LiveSeq::Mutation objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 Returns : array of Mutations
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 See L<Bio::LiveSeq::Mutation> for more information.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232 sub each_Mutation{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234 return @{$self->{'mutations'}};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238 =head2 mutation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240 Title : mutation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241 Usage : $mutobj = $obj->mutation;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 : $mutobj = $obj->mutation($objref);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245 Returns or sets the link-reference to the current mutation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 object. If the value is not set, it will return undef.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247 Internal method.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249 Returns : an object reference or undef
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 sub mutation {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 if (defined $value) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257 if( ! $value->isa('Bio::LiveSeq::Mutation') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258 $self->throw("Is not a Bio::LiveSeq::Mutation object but a [$value]");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 return undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262 $self->{'mutation'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265 unless (exists $self->{'mutation'}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266 return (undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268 return $self->{'mutation'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272 =head2 DNA
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274 Title : DNA
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 Usage : $mutobj = $obj->DNA;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 : $mutobj = $obj->DNA($objref);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279 Returns or sets the reference to the LiveSeq object holding
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280 the reference sequence. If there is no link, it will return
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281 undef.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282 Internal method.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 Returns : an object reference or undef
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 sub DNA {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290 if (defined $value) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291 if( ! $value->isa('Bio::LiveSeq::DNA') and ! $value->isa('Bio::LiveSeq::Transcript') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292 $self->throw("Is not a Bio::LiveSeq::DNA/Transcript object but a [$value]");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 return undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296 $self->{'DNA'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299 unless (exists $self->{'DNA'}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300 return (undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302 return $self->{'DNA'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307 =head2 RNA
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309 Title : RNA
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310 Usage : $mutobj = $obj->RNA;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311 : $mutobj = $obj->RNA($objref);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314 Returns or sets the reference to the LiveSeq object holding
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315 the reference sequence. If the value is not set, it will return
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316 undef.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317 Internal method.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319 Returns : an object reference or undef
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324 sub RNA {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326 if (defined $value) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327 if( ! $value->isa('Bio::LiveSeq::Transcript') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328 $self->throw("Is not a Bio::LiveSeq::RNA/Transcript object but a [$value]");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329 return undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332 $self->{'RNA'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335 unless (exists $self->{'RNA'}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336 return (undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338 return $self->{'RNA'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343 =head2 dnamut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345 Title : dnamut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346 Usage : $mutobj = $obj->dnamut;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347 : $mutobj = $obj->dnamut($objref);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350 Returns or sets the reference to the current DNAMutation object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351 If the value is not set, it will return undef.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352 Internal method.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
353
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
354 Returns : a Bio::Variation::DNAMutation object or undef
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
355
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
356 See L<Bio::Variation::DNAMutation> for more information.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
357
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
358 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
359
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
360
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
361 sub dnamut {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
362 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
363 if (defined $value) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
364 if( ! $value->isa('Bio::Variation::DNAMutation') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
365 $self->throw("Is not a Bio::Variation::DNAMutation object but a [$value]");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
366 return undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
367 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
368 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
369 $self->{'dnamut'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
370 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
371 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
372 unless (exists $self->{'dnamut'}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
373 return (undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
374 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
375 return $self->{'dnamut'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
376 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
377 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
378
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
379
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
380 =head2 rnachange
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
381
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
382 Title : rnachange
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
383 Usage : $mutobj = $obj->rnachange;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
384 : $mutobj = $obj->rnachange($objref);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
385 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
386
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
387 Returns or sets the reference to the current RNAChange object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
388 If the value is not set, it will return undef.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
389 Internal method.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
390
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
391 Returns : a Bio::Variation::RNAChange object or undef
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
392
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
393 See L<Bio::Variation::RNAChange> for more information.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
394
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
395 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
396
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
397
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
398 sub rnachange {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
399 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
400 if (defined $value) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
401 if( ! $value->isa('Bio::Variation::RNAChange') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
402 $self->throw("Is not a Bio::Variation::RNAChange object but a [$value]");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
403 return undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
404 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
405 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
406 $self->{'rnachange'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
407 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
408 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
409 unless (exists $self->{'rnachange'}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
410 return (undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
411 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
412 return $self->{'rnachange'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
413 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
414 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
415
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
416
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
417 =head2 aachange
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
418
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
419 Title : aachange
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
420 Usage : $mutobj = $obj->aachange;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
421 : $mutobj = $obj->aachange($objref);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
422 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
423
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
424 Returns or sets the reference to the current AAChange object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
425 If the value is not set, it will return undef.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
426 Internal method.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
427
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
428 Returns : a Bio::Variation::AAChange object or undef
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
429
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
430 See L<Bio::Variation::AAChange> for more information.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
431
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
432 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
433
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
434
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
435 sub aachange {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
436 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
437 if (defined $value) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
438 if( ! $value->isa('Bio::Variation::AAChange') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
439 $self->throw("Is not a Bio::Variation::AAChange object but a [$value]");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
440 return undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
441 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
442 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
443 $self->{'aachange'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
444 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
445 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
446 unless (exists $self->{'aachange'}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
447 return (undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
448 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
449 return $self->{'aachange'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
450 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
451 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
452
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
453
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
454 =head2 exons
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
455
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
456 Title : exons
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
457 Usage : $mutobj = $obj->exons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
458 : $mutobj = $obj->exons($objref);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
459 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
460
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
461 Returns or sets the reference to a current array of Exons.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
462 If the value is not set, it will return undef.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
463 Internal method.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
464
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
465 Returns : an array of Bio::LiveSeq::Exon objects or undef
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
466
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
467 See L<Bio::LiveSeq::Exon> for more information.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
468
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
469 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
470
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
471
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
472 sub exons {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
473 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
474 if (defined $value) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
475 $self->{'exons'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
476 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
477 unless (exists $self->{'exons'}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
478 return (undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
479 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
480 return $self->{'exons'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
481 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
482 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
483
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
484 =head2 change_gene_with_alignment
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
485
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
486 Title : change_gene_with_alignment
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
487 Usage : $results=$mutate->change_gene_with_alignment($aln);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
488
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
489 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
490
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
491 Returns a Bio::Variation::SeqDiff object containing the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
492 results of the changes in the alignment. The alignment has
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
493 to be pairwise and have one sequence named 'QUERY', the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
494 other one is assumed to be a part of the sequence from
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
495 $gene.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
496
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
497 This method offers a shortcut to change_gene and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
498 automates the creation of Bio::LiveSeq::Mutation objects.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
499 Use it with almost identical sequnces, e.g. to locate a SNP.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
500
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
501 Args : Bio::SimpleAlign object representing a short local alignment
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
502 Returns : Bio::Variation::SeqDiff object or 0 on error
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
503
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
504 See L<Bio::LiveSeq::Mutation>, L<Bio::SimpleAlign>, and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
505 L<Bio::Variation::SeqDiff> for more information.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
506
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
507 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
508
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
509 sub change_gene_with_alignment {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
510 my ($self, $aln) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
511
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
512 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
513 # Sanity checks
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
514 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
515
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
516 $self->throw("Argument is not a Bio::SimpleAlign object but a [$aln]")
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
517 unless $aln->isa('Bio::SimpleAlign');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
518 $self->throw("'Pairwise alignments only, please")
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
519 if $aln->no_sequences != 2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
520
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
521 # find out the order the two sequences are given
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
522 my $queryseq_pos = 1; #default
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
523 my $refseq_pos = 2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
524 unless ($aln->get_seq_by_pos(1)->id eq 'QUERY') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
525 carp('Query sequence has to be named QUERY')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
526 if $aln->get_seq_by_pos(2)->id ne 'QUERY';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
527 $queryseq_pos = 2; # alternative
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
528 $refseq_pos = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
529 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
530
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
531 # trim the alignment
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
532 my $start = $aln->column_from_residue_number('QUERY', 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
533 my $end = $aln->column_from_residue_number('QUERY',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
534 $aln->get_seq_by_pos($queryseq_pos)->end );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
535
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
536 my $aln2 = $aln->slice($start, $end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
537
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
538 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
539 # extracting mutations
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
540 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
541
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
542 my $cs = $aln2->consensus_string(51);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
543 my $queryseq = $aln2->get_seq_by_pos($queryseq_pos);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
544 my $refseq = $aln2->get_seq_by_pos($refseq_pos);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
545
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
546 while ( $cs =~ /(\?+)/g) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
547 # pos in local coordinates
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
548 my $pos = pos($cs) - length($1) + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
549 my $mutation = create_mutation($self,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
550 $refseq,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
551 $queryseq,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
552 $pos,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
553 CORE::length($1)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
554 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
555 # reset pos to refseq coordinates
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
556 $pos += $refseq->start - 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
557 $mutation->pos($pos);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
558
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
559 $self->add_Mutation($mutation);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
560 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
561 return $self->change_gene();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
562 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
563
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
564 =head2 create_mutation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
565
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
566 Title : create_mutation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
567 Usage :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
568 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
569
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
570 Formats sequence differences from two sequences into
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
571 Bio::LiveSeq::Mutation objects which can be applied to a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
572 gene.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
573
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
574 To keep it generic, sequence arguments need not to be
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
575 Bio::LocatableSeq. Coordinate change to parent sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
576 numbering needs to be done by the calling code.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
577
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
578 Called from change_gene_with_alignment
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
579
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
580 Args : Bio::PrimarySeqI inheriting object for the reference sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
581 Bio::PrimarySeqI inheriting object for the query sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
582 integer for the start position of the local sequence difference
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
583 integer for the length of the sequence difference
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
584 Returns : Bio::LiveSeq::Mutation object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
585
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
586 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
587
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
588 sub create_mutation {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
589 my ($self, $refseq, $queryseq, $pos, $len) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
590
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
591 $self->throw("Is not a Bio::PrimarySeqI object but a [$refseq]")
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
592 unless $refseq->isa('Bio::PrimarySeqI');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
593 $self->throw("Is not a Bio::PrimarySeqI object but a [$queryseq]")
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
594 unless $queryseq->isa('Bio::PrimarySeqI');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
595 $self->throw("Position is not a positive integer but [$pos]")
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
596 unless $pos =~ /^\+?\d+$/;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
597 $self->throw("Length is not a positive integer but [$len]")
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
598 unless $len =~ /^\+?\d+$/;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
599
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
600 my $mutation;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
601 my $refstring = $refseq->subseq($pos, $pos + $len - 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
602 my $varstring = $queryseq->subseq($pos, $pos + $len - 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
603
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
604 if ($len == 1 and $refstring =~ /[^\.\-\*\?]/ and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
605 $varstring =~ /[^\.\-\*\?]/ ) { #point
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
606 $mutation = new Bio::LiveSeq::Mutation (-seq => $varstring,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
607 -pos => $pos,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
608 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
609 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
610 elsif ( $refstring =~ /^[^\.\-\*\?]+$/ and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
611 $varstring !~ /^[^\.\-\*\?]+$/ ) { # deletion
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
612 $mutation = new Bio::LiveSeq::Mutation (-pos => $pos,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
613 -len => $len
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
614 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
615 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
616 elsif ( $refstring !~ /^[^\.\-\*\?]+$/ and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
617 $varstring =~ /^[^\.\-\*\?]+$/ ) { # insertion
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
618 $mutation = new Bio::LiveSeq::Mutation (-seq => $varstring,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
619 -pos => $pos,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
620 -len => 0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
621 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
622 } else { # complex
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
623 $mutation = new Bio::LiveSeq::Mutation (-seq => $varstring,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
624 -pos => $pos,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
625 -len => $len
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
626 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
627 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
628
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
629 return $mutation;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
630 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
631
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
632 =head2 change_gene
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
633
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
634 Title : change_gene
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
635 Usage : my $mutate = Bio::LiveSeq::Mutator->new(-gene => $gene,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
636 numbering => "coding"
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
637 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
638 # $mut is Bio::LiveSeq::Mutation object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
639 $mutate->add_Mutation($mut);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
640 my $results=$mutate->change_gene();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
641
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
642 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
643
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
644 Returns a Bio::Variation::SeqDiff object containing the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
645 results of the changes performed according to the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
646 instructions present in Mutation(s). The -numbering
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
647 argument decides what molecule is being changed and what
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
648 numbering scheme being used:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
649
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
650 -numbering => "entry"
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
651
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
652 determines the DNA level, using the numbering from the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
653 beginning of the sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
654
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
655 -numbering => "coding"
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
656
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
657 determines the RNA level, using the numbering from the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
658 beginning of the 1st transcript
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
659
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
660 Alternative transcripts can be used by specifying
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
661 "coding 2" or "coding 3" ...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
662
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
663 -numbering => "gene"
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
664
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
665 determines the DNA level, using the numbering from the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
666 beginning of the 1st transcript and inluding introns.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
667 The meaning equals 'coding' if the reference molecule
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
668 is cDNA.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
669
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
670 Args : Bio::LiveSeq::Gene object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
671 Bio::LiveSeq::Mutation object(s)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
672 string specifying a numbering scheme (defaults to 'coding')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
673 Returns : Bio::Variation::SeqDiff object or 0 on error
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
674
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
675 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
676
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
677 sub change_gene {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
678 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
679
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
680 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
681 # Sanity check
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
682 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
683 unless ($self->gene) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
684 $self->warn("Input object Bio::LiveSeq::Gene is not given");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
685 return 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
686 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
687 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
688 # Setting the reference sequence based on -numbering
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
689 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
690 my @transcripts=@{$self->gene->get_Transcripts};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
691 my $refseq; # will hold Bio::LiveSeq:Transcript object or Bio::LiveSeq::DNA
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
692
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
693 # 'gene' eq 'coding' if reference sequence is cDNA
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
694 $self->numbering ('coding') if $self->gene->get_DNA->alphabet eq 'rna' and $self->numbering eq 'gene';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
695
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
696 if ($self->numbering =~ /(coding)( )?(\d+)?/ ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
697 $self->numbering($1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
698 my $transnumber = $3;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
699 $transnumber-- if $3; # 1 -> 0, 2 -> 1
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
700 if ($transnumber && $transnumber >= 0 && $transnumber <= $#transcripts) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
701 $refseq=$transcripts[$transnumber];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
702 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
703 $transnumber && $self->warn("The alternative transcript number ". $transnumber+1 .
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
704 "- does not exist. Reverting to the 1st transcript\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
705 $refseq=$transcripts[0];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
706 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
707 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
708 $refseq=$transcripts[0]->{'seq'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
709 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
710 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
711 # Recording the state: SeqDiff object creation ?? transcript no.??
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
712 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
713 my $seqDiff = Bio::Variation::SeqDiff->new();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
714 $seqDiff->alphabet($self->gene->get_DNA->alphabet);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
715 $seqDiff->numbering($self->numbering);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
716 my ($DNAobj, $RNAobj);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
717 if ($refseq->isa("Bio::LiveSeq::Transcript")) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
718 $self->RNA($refseq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
719 $self->DNA($refseq->{'seq'});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
720 $seqDiff->rna_ori($refseq->seq );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
721 $seqDiff->aa_ori($refseq->get_Translation->seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
722 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
723 $self->DNA($refseq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
724 $self->RNA($transcripts[0]);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
725 $seqDiff->rna_ori($self->RNA->seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
726 $seqDiff->aa_ori($self->RNA->get_Translation->seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
727 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
728 $seqDiff->dna_ori($self->DNA->seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
729 # put the accession number into the SeqDiff object ID
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
730 $seqDiff->id($self->DNA->accession_number);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
731
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
732 # the atg_offset takes in account that DNA object could be a subset of the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
733 # whole entry (via the light_weight loader)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
734 my $atg_label=$self->RNA->start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
735 my $atg_offset=$self->DNA->position($atg_label)+($self->DNA->start)-1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
736 $seqDiff->offset($atg_offset - 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
737 $self->DNA->coordinate_start($atg_label);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
738
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
739 my @exons = $self->RNA->all_Exons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
740 $seqDiff->cds_end($exons[$#exons]->end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
741
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
742 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
743 # Converting mutation positions to labels
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
744 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
745 $self->warn("no mutations"), return 0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
746 unless $self->_mutationpos2label($refseq, $seqDiff);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
747
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
748 # need to add more than one rna & aa
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
749 #foreach $transcript (@transcripts) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
750 # $seqDiff{"ori_transcript_${i}_seq"}=$transcript->seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
751 # $seqDiff{"ori_translation_${i}_seq"}=$transcript->get_Translation->seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
752 #}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
753
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
754 # do changes
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
755 my $k;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
756 foreach my $mutation ($self->each_Mutation) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
757 next unless $mutation->label > 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
758 $self->mutation($mutation);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
759
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
760 $mutation->issue(++$k);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
761 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
762 # current position on the transcript
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
763 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
764 if ($self->numbering =~ /coding/) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
765 $mutation->transpos($mutation->pos); # transpos given by user
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
766 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
767 #transpos of label / It will be 0 if mutating an intron, negative if upstream of ATG
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
768 $mutation->transpos($self->RNA->position($mutation->label,$atg_label));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
769 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
770 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
771 # Calculate adjacent labels based on the position on the current sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
772 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
773 $mutation->prelabel($self->DNA->label(-1, $mutation->label)); # 1 before label
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
774 if ($mutation->len == 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
775 $mutation->postlabel($mutation->label);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
776 $mutation->lastlabel($mutation->label);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
777 } elsif ($mutation->len == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
778 $mutation->lastlabel($mutation->label); # last nucleotide affected
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
779 $mutation->postlabel($self->DNA->label(2,$mutation->lastlabel)); # $len after label
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
780 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
781 $mutation->lastlabel($self->DNA->label($mutation->len,$mutation->label));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
782 $mutation->postlabel($self->DNA->label(2,$mutation->lastlabel));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
783 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
784 my $dnamut = $self->_set_DNAMutation($seqDiff);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
785 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
786 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
787 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
788 if ($self->_rnaAffected) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
789 $self->_set_effects($seqDiff, $dnamut);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
790 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
791 elsif ($seqDiff->offset != 0 and $dnamut->region ne 'intron') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
792 $self->_untranslated ($seqDiff, $dnamut);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
793 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
794 #$self->warn("Mutation starts outside coding region, RNAChange object not created");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
795 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
796
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
797 #########################################################################
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
798 # Mutations are done here! #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
799 $refseq->labelchange($mutation->seq, $mutation->label, $mutation->len); #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
800 #########################################################################
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
801
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
802 $self->_post_mutation ($seqDiff);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
803
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
804 $self->dnamut(undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
805 $self->rnachange(undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
806 $self->aachange(undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
807 $self->exons(undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
808 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
809 # record the final state of all three sequences
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
810 $seqDiff->dna_mut($self->DNA->seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
811 $seqDiff->rna_mut($self->RNA->seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
812 if ($refseq->isa("Bio::LiveSeq::Transcript")) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
813 $seqDiff->aa_mut($refseq->get_Translation->seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
814 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
815 $seqDiff->aa_mut($self->RNA->get_Translation->seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
816 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
817
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
818 #$seqDiff{mut_dna_seq}=$gene->get_DNA->seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
819 #my $i=1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
820 #foreach $transcript (@transcripts) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
821 # $seqDiff{"mut_transcript_${i}_seq"}=$transcript->seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
822 # $seqDiff{"mut_translation_${i}_seq"}=$transcript->get_Translation->seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
823 #}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
824 return $seqDiff;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
825 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
826
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
827 =head2 _mutationpos2label
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
828
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
829 Title : _mutationpos2label
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
830 Usage :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
831 Function: converts mutation positions into labels
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
832 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
833 Returns : number of valid mutations
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
834 Args : LiveSeq sequence object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
835
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
836 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
837
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
838 sub _mutationpos2label {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
839 my ($self, $refseq, $SeqDiff) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
840 my $count;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
841 my @bb = @{$self->{'mutations'}};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
842 my $cc = scalar @bb;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
843 foreach my $mut (@{$self->{'mutations'}}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
844 # if ($self->numbering eq 'gene' and $mut->pos < 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
845 # my $tmp = $mut->pos;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
846 # print STDERR "pos: ", "$tmp\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
847 # $tmp++ if $tmp < 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
848 # $tmp += $SeqDiff->offset;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
849 # print STDERR "pos2: ", "$tmp\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
850 # $mut->pos($tmp);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
851 # }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
852 # elsif ($self->numbering eq 'entry') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
853 if ($self->numbering eq 'entry') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
854 my $tmp = $mut->pos;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
855 $tmp -= $SeqDiff->offset;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
856 $tmp-- if $tmp < 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
857 $mut->pos($tmp);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
858 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
859
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
860 my $label = $refseq->label($mut->pos); # get the label for the position
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
861 $mut->label($label), $count++ if $label > 0 ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
862 #print STDERR "x", $mut->pos,'|' ,$mut->label, "\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
863 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
864 return $count;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
865 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
866
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
867 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
868 # Calculate labels around mutated nucleotide
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
869 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
870
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
871 =head2 _set_DNAMutation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
872
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
873 Title : _set_DNAMutation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
874 Usage :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
875 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
876
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
877 Stores DNA level mutation attributes before mutation into
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
878 Bio::Variation::DNAMutation object. Links it to SeqDiff
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
879 object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
880
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
881 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
882 Returns : Bio::Variation::DNAMutation object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
883 Args : Bio::Variation::SeqDiff object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
884
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
885 See L<Bio::Variation::DNAMutation> and L<Bio::Variation::SeqDiff>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
886
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
887 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
888
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
889 sub _set_DNAMutation {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
890 my ($self, $seqDiff) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
891
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
892 my $dnamut_start = $self->mutation->label - $seqDiff->offset;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
893 # if negative DNA positions (before ATG)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
894 $dnamut_start-- if $dnamut_start <= 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
895 my $dnamut_end;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
896 ($self->mutation->len == 0 or $self->mutation->len == 1) ?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
897 ($dnamut_end = $dnamut_start) :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
898 ($dnamut_end = $dnamut_start+$self->mutation->len);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
899 #print "start:$dnamut_start, end:$dnamut_end\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
900 my $dnamut = Bio::Variation::DNAMutation->new(-start => $dnamut_start,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
901 -end => $dnamut_end,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
902 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
903 $dnamut->mut_number($self->mutation->issue);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
904 $dnamut->isMutation(1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
905 my $da_m = Bio::Variation::Allele->new;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
906 $da_m->seq($self->mutation->seq) if $self->mutation->seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
907 $dnamut->allele_mut($da_m);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
908 $dnamut->add_Allele($da_m);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
909 # allele_ori
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
910 my $allele_ori = $self->DNA->labelsubseq($self->mutation->prelabel,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
911 undef,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
912 $self->mutation->postlabel); # get seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
913 chop $allele_ori; # chop the postlabel nucleotide
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
914 $allele_ori=substr($allele_ori,1); # away the prelabel nucleotide
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
915 my $da_o = Bio::Variation::Allele->new;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
916 $da_o->seq($allele_ori) if $allele_ori;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
917 $dnamut->allele_ori($da_o);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
918 ($self->mutation->len == 0) ?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
919 ($dnamut->length($self->mutation->len)) : ($dnamut->length(CORE::length $allele_ori));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
920 #print " --------------- $dnamut_start -$len- $dnamut_end -\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
921 $seqDiff->add_Variant($dnamut);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
922 $self->dnamut($dnamut);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
923 $dnamut->mut_number($self->mutation->issue);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
924 # setting proof
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
925 if ($seqDiff->numbering eq "entry" or $seqDiff->numbering eq "gene") {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
926 $dnamut->proof('experimental');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
927 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
928 $dnamut->proof('computed');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
929 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
930 # how many nucleotides to store upstream and downstream of the change
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
931 my $flanklen = $self->{'flanklen'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
932 #print `date`, " flanking sequences start\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
933 my $uplabel = $self->DNA->label(1-$flanklen,$self->mutation->prelabel); # this could be unavailable!
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
934
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
935 my $upstreamseq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
936 if ($uplabel > 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
937 $upstreamseq =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
938 $self->DNA->labelsubseq($uplabel, undef, $self->mutation->prelabel);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
939 } else { # from start (less than $flanklen nucleotides)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
940 $upstreamseq =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
941 $self->DNA->labelsubseq($self->DNA->start, undef, $self->mutation->prelabel);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
942 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
943 $dnamut->upStreamSeq($upstreamseq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
944 my $dnstreamseq = $self->DNA->labelsubseq($self->mutation->postlabel, $flanklen);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
945 $dnamut->dnStreamSeq($dnstreamseq); # $flanklen or less nucleotides
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
946 return $dnamut;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
947 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
948
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
949
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
950 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
951 ### Check if mutation propagates to RNA (and AA) level
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
952 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
953 # side effect: sets intron/exon information
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
954 # returns a boolean value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
955 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
956
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
957 sub _rnaAffected {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
958 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
959 my @exons=$self->RNA->all_Exons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
960 my $RNAstart=$self->RNA->start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
961 my $RNAend=$self->RNA->end;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
962 my ($firstexon,$before,$after,$i);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
963 my ($rnaAffected) = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
964
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
965 # check for inserted labels (that require follows instead of <,>)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
966 my $DNAend=$self->RNA->{'seq'}->end;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
967 if ($self->mutation->prelabel > $DNAend or $self->mutation->postlabel > $DNAend) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
968 #this means one of the two labels is an inserted one
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
969 #(coming from a previous mutation. This would falsify all <,>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
970 #checks, so the follow() has to be used
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
971 $self->warn("Attention, workaround not fully tested yet! Expect unpredictable results.\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
972 if (($self->mutation->postlabel==$RNAstart) or (follows($self->mutation->postlabel,$RNAstart))) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
973 $self->warn("RNA not affected because change occurs before RNAstart");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
974 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
975 elsif (($RNAend==$self->mutation->prelabel) or (follows($RNAend,$self->mutation->prelabel))) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
976 $self->warn("RNA not affected because change occurs after RNAend");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
977 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
978 elsif (scalar @exons == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
979 #no introns, just one exon
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
980 $rnaAffected = 1; # then RNA is affected!
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
981 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
982 # otherwise check for change occurring inside an intron
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
983 $firstexon=shift(@exons);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
984 $before=$firstexon->end;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
985
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
986 foreach $i (0..$#exons) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
987 $after=$exons[$i]->start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
988 if (follows($self->mutation->prelabel,$before) or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
989 ($after==$self->mutation->prelabel) or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
990 follows($after,$self->mutation->prelabel) or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
991 follows($after,$self->mutation->postlabel)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
992
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
993 $rnaAffected = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
994 # $i is number of exon and can be used for proximity check
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
995 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
996 $before=$exons[$i]->end;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
997 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
998
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
999 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1000 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1001 my $strand = $exons[0]->strand;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1002 if (($strand == 1 and $self->mutation->postlabel <= $RNAstart) or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1003 ($strand != 1 and $self->mutation->postlabel >= $RNAstart)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1004 #$self->warn("RNA not affected because change occurs before RNAstart");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1005 $rnaAffected = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1006 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1007 elsif (($strand == 1 and $self->mutation->prelabel >= $RNAend) or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1008 ($strand != 1 and $self->mutation->prelabel <= $RNAend)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1009 #$self->warn("RNA not affected because change occurs after RNAend");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1010 $rnaAffected = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1011 my $dist;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1012 if ($strand == 1){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1013 $dist = $self->mutation->prelabel - $RNAend;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1014 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1015 $dist = $RNAend - $self->mutation->prelabel;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1016 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1017 $self->dnamut->region_dist($dist);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1018 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1019 elsif (scalar @exons == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1020 #if just one exon -> no introns,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1021 $rnaAffected = 1; # then RNA is affected!
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1022 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1023 # otherwise check for mutation occurring inside an intron
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1024 $firstexon=shift(@exons);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1025 $before=$firstexon->end;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1026 if ( ($strand == 1 and $self->mutation->prelabel < $before) or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1027 ($strand == -1 and $self->mutation->prelabel > $before)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1028 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1029 $rnaAffected = 1 ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1030
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1031 #print "Exon 1 : ", $firstexon->start, " - ", $firstexon->end, "<br>\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1032 my $afterdist = $self->mutation->prelabel - $firstexon->start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1033 my $beforedist = $firstexon->end - $self->mutation->postlabel;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1034 my $exonvalue = $i + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1035 $self->dnamut->region('exon');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1036 $self->dnamut->region_value($exonvalue);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1037 if ($afterdist < $beforedist) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1038 $afterdist++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1039 $afterdist++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1040 $self->dnamut->region_dist($afterdist);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1041 #print "splice site $afterdist nt upstream!<br>";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1042 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1043 $self->dnamut->region_dist($beforedist);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1044 #print "splice site $beforedist nt downstream!<br>";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1045 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1046 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1047 #print "first exon : ", $firstexon->start, " - ", $firstexon->end, "<br>\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1048 foreach $i (0..$#exons) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1049 $after=$exons[$i]->start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1050 #proximity test for intronic mutations
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1051 if ( ($strand == 1 and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1052 $self->mutation->prelabel >= $before and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1053 $self->mutation->postlabel <= $after)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1054 or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1055 ($strand == -1 and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1056 $self->mutation->prelabel <= $before and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1057 $self->mutation->postlabel >= $after) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1058 $self->dnamut->region('intron');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1059 #$self->dnamut->region_value($i);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1060 my $afterdist = $self->mutation->prelabel - $before;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1061 my $beforedist = $after - $self->mutation->postlabel;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1062 my $intronvalue = $i + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1063 if ($afterdist < $beforedist) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1064 $afterdist++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1065 $self->dnamut->region_value($intronvalue);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1066 $self->dnamut->region_dist($afterdist);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1067 #print "splice site $afterdist nt upstream!<br>";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1068 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1069 $self->dnamut->region_value($intronvalue);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1070 $self->dnamut->region_dist($beforedist * -1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1071 #print "splice site $beforedist nt downstream!<br>";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1072 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1073 $self->rnachange(undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1074 last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1075 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1076 #proximity test for exon mutations
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1077 elsif ( ( $strand == 1 and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1078 $exons[$i]->start <= $self->mutation->prelabel and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1079 $exons[$i]->end >= $self->mutation->postlabel) or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1080 ( $strand == -1 and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1081 $exons[$i]->start >= $self->mutation->prelabel and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1082 $exons[$i]->end <= $self->mutation->postlabel) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1083 $rnaAffected = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1084
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1085 my $afterdist = $self->mutation->prelabel - $exons[$i]->start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1086 my $beforedist = $exons[$i]->end - $self->mutation->postlabel;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1087 my $exonvalue = $i + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1088 $self->dnamut->region('exon');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1089 if ($afterdist < $beforedist) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1090 $afterdist++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1091 $self->dnamut->region_value($exonvalue+1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1092 $self->dnamut->region_dist($afterdist);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1093 #print "splice site $afterdist nt upstream!<br>";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1094 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1095 #$beforedist;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1096 $self->dnamut->region_value($exonvalue+1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1097 $self->dnamut->region_dist($beforedist * -1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1098 #print "splice site $beforedist nt downstream!<br>";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1099 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1100 last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1101 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1102 $before=$exons[$i]->end;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1103 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1104 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1105 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1106 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1107 #$self->warn("RNA not affected because change occurs inside an intron");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1108 #return(0); # if still not returned, then not affected, return 0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1109 return $rnaAffected;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1110 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1111
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1112 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1113 # ### Creation of RNA and AA variation objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1114 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1115
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1116 =head2 _set_effects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1117
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1118 Title : _set_effects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1119 Usage :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1120 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1121
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1122 Stores RNA and AA level mutation attributes before mutation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1123 into Bio::Variation::RNAChange and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1124 Bio::Variation::AAChange objects. Links them to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1125 SeqDiff object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1126
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1127 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1128 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1129 Args : Bio::Variation::SeqDiff object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1130 Bio::Variation::DNAMutation object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1131
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1132 See L<Bio::Variation::RNAChange>, L<Bio::Variation::RNAChange>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1133 L<Bio::Variation::SeqDiff>, and L<Bio::Variation::DNAMutation>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1134
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1135 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1136
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1137 sub _set_effects {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1138 my ($self, $seqDiff, $dnamut) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1139 my ($rnapos_end, $upstreamseq, $dnstreamseq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1140 my $flanklen = $self->{'flanklen'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1141
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1142 ($self->mutation->len == 0) ?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1143 ($rnapos_end = $self->mutation->transpos) :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1144 ($rnapos_end = $self->mutation->transpos + $self->mutation->len -1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1145 my $rnachange = Bio::Variation::RNAChange->new(-start => $self->mutation->transpos,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1146 -end => $rnapos_end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1147 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1148 $rnachange->isMutation(1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1149
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1150 # setting proof
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1151 if ($seqDiff->numbering eq "coding") {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1152 $rnachange->proof('experimental');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1153 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1154 $rnachange->proof('computed');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1155 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1156
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1157 $seqDiff->add_Variant($rnachange);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1158 $self->rnachange($rnachange);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1159 $rnachange->DNAMutation($dnamut);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1160 $dnamut->RNAChange($rnachange);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1161 $rnachange->mut_number($self->mutation->issue);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1162
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1163 # setting the codon_position of the "start" nucleotide of the change
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1164 $rnachange->codon_pos(($self->RNA->frame($self->mutation->label))+1); # codon_pos=frame+1
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1165
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1166 my @exons=$self->RNA->all_Exons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1167 $self->exons(\@exons);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1168 #print `date`, " before flank, after exons. RNAObj query\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1169 # if cannot retrieve from Transcript, Transcript::upstream_seq will be used
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1170 # before "fac7 g 65" bug discovered
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1171 # $uplabel=$self->RNA->label(1-$flanklen,$prelabel);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1172 my $RNAprelabel=$self->RNA->label(-1,$self->mutation->label); # to fix fac7g65 bug
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1173 # for the fix, all prelabel used in the next block have been changed to RNAprelabel
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1174 my $uplabel=$self->RNA->label(1-$flanklen,$RNAprelabel);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1175 if ($self->RNA->valid($uplabel)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1176 $upstreamseq = $self->RNA->labelsubseq($uplabel, undef, $RNAprelabel);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1177 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1178 $upstreamseq = $self->RNA->labelsubseq($self->RNA->start, undef, $RNAprelabel)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1179 if $self->RNA->valid($RNAprelabel);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1180 my $lacking=$flanklen-length($upstreamseq); # how many missing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1181 my $upstream_atg=$exons[0]->subseq(-$lacking,-1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1182 $upstreamseq=$upstream_atg . $upstreamseq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1183 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1184
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1185 $rnachange->upStreamSeq($upstreamseq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1186
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1187 # won't work OK if postlabel NOT in Transcript
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1188 # now added RNApostlabel but this has to be /fully tested/
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1189 # for the fix, all postlabel used in the next block have been changed to RNApostlabel
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1190 my $RNApostlabel; # to fix fac7g64 bug
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1191 if ($self->mutation->len == 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1192 $RNApostlabel=$self->mutation->label;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1193 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1194 my $mutlen = 1 + $self->mutation->len;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1195 $RNApostlabel=$self->RNA->label($mutlen,$self->mutation->label);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1196 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1197 $dnstreamseq=$self->RNA->labelsubseq($RNApostlabel, $flanklen);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1198 if ($dnstreamseq eq '-1') { # if out of transcript was requested
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1199 my $lastexon=$exons[-1];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1200 my $lastexonlength=$lastexon->length;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1201 $dnstreamseq=$self->RNA->labelsubseq($RNApostlabel); # retrieves till RNAend
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1202 my $lacking=$flanklen-length($dnstreamseq); # how many missing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1203 my $downstream_stop=$lastexon->subseq($lastexonlength+1,undef,$lacking);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1204 $dnstreamseq .= $downstream_stop;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1205 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1206 $rnachange->dnStreamSeq($dnstreamseq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1207 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1208 # AAChange creation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1209 my $AAobj=$self->RNA->get_Translation;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1210 # storage of prelabel here, to be used in create_mut_objs_after
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1211 my $aachange = Bio::Variation::AAChange->new(-start => $RNAprelabel
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1212 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1213 $aachange->isMutation(1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1214 $aachange->proof('computed');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1215
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1216 $seqDiff->add_Variant($aachange);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1217 $self->aachange($aachange);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1218 $rnachange->AAChange($aachange);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1219 $aachange->RNAChange($rnachange);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1220
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1221 $aachange->mut_number($self->mutation->issue);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1222 # $before_mutation{aachange}=$aachange;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1223
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1224 my $ra_o = Bio::Variation::Allele->new;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1225 $ra_o->seq($dnamut->allele_ori->seq) if $dnamut->allele_ori->seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1226 $rnachange->allele_ori($ra_o);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1227
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1228 $rnachange->length(CORE::length $rnachange->allele_ori->seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1229
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1230 my $ra_m = Bio::Variation::Allele->new;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1231 $ra_m->seq($self->mutation->seq) if $self->mutation->seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1232 $rnachange->allele_mut($ra_m);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1233 $rnachange->add_Allele($ra_m);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1234
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1235 #$rnachange->allele_mut($seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1236 $rnachange->end($rnachange->start) if $rnachange->length == 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1237
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1238 # this holds the aminoacid sequence that will be affected by the mutation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1239 my $aa_allele_ori=$AAobj->labelsubseq($self->mutation->label,undef,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1240 $self->mutation->lastlabel);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1241
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1242 my $aa_o = Bio::Variation::Allele->new;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1243 $aa_o->seq($aa_allele_ori) if $aa_allele_ori;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1244 $aachange->allele_ori($aa_o);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1245 #$aachange->allele_ori($aa_allele_ori);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1246
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1247 my $aa_length_ori = length($aa_allele_ori);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1248 $aachange->length($aa_length_ori); #print "==========$aa_length_ori\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1249 $aachange->end($aachange->start + $aa_length_ori - 1 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1250 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1251
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1252 =head2 _untranslated
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1253
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1254 Title : _untranslated
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1255 Usage :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1256 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1257
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1258 Stores RNA change attributes before mutation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1259 into Bio::Variation::RNAChange object. Links it to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1260 SeqDiff object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1261
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1262 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1263 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1264 Args : Bio::Variation::SeqDiff object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1265 Bio::Variation::DNAMutation object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1266
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1267 See L<Bio::Variation::RNAChange>, L<Bio::Variation::SeqDiff> and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1268 L<Bio::Variation::DNAMutation> for details.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1269
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1270 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1271
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1272 sub _untranslated {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1273 my ($self, $seqDiff, $dnamut) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1274 my $rnapos_end;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1275 ($self->mutation->len == 0) ?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1276 ($rnapos_end = $self->mutation->transpos) :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1277 ($rnapos_end = $self->mutation->transpos + $self->mutation->len -1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1278 my $rnachange = Bio::Variation::RNAChange->new(-start => $self->mutation->transpos,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1279 -end => $rnapos_end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1280 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1281 #my $rnachange = Bio::Variation::RNAChange->new;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1282
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1283 $rnachange->isMutation(1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1284 my $ra_o = Bio::Variation::Allele->new;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1285 $ra_o->seq($dnamut->allele_ori->seq) if $dnamut->allele_ori->seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1286 $rnachange->allele_ori($ra_o);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1287 my $ra_m = Bio::Variation::Allele->new;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1288 $ra_m->seq($dnamut->allele_mut->seq) if $dnamut->allele_mut->seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1289 $rnachange->allele_mut($ra_m);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1290 $rnachange->add_Allele($ra_m);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1291 $rnachange->upStreamSeq($dnamut->upStreamSeq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1292 $rnachange->dnStreamSeq($dnamut->dnStreamSeq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1293 $rnachange->length($dnamut->length);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1294 $rnachange->mut_number($dnamut->mut_number);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1295 # setting proof
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1296 if ($seqDiff->numbering eq "coding") {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1297 $rnachange->proof('experimental');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1298 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1299 $rnachange->proof('computed');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1300 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1301
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1302 my $dist;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1303 if ($rnachange->end < 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1304 $rnachange->region('5\'UTR');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1305 $dnamut->region('5\'UTR');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1306 my $dist = $dnamut->end ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1307 $dnamut->region_dist($dist);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1308 $dist = $seqDiff->offset - $self->gene->maxtranscript->start + 1 + $dist;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1309 $rnachange->region_dist($dist);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1310 return if $dist < 1; # if mutation is not in mRNA
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1311 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1312 $rnachange->region('3\'UTR');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1313 $dnamut->region('3\'UTR');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1314 my $dist = $dnamut->start - $seqDiff->cds_end + $seqDiff->offset;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1315 $dnamut->region_dist($dist);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1316 $dist = $seqDiff->cds_end - $self->gene->maxtranscript->end -1 + $dist;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1317 $rnachange->region_dist($dist);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1318 return if $dist > 0; # if mutation is not in mRNA
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1319 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1320 $seqDiff->add_Variant($rnachange);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1321 $self->rnachange($rnachange);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1322 $rnachange->DNAMutation($dnamut);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1323 $dnamut->RNAChange($rnachange);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1324 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1325
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1326 # args: reference to label changearray, reference to position changearray
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1327 # Function: take care of the creation of mutation objects, with
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1328 # information AFTER the change takes place
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1329 sub _post_mutation {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1330 my ($self, $seqDiff) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1331
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1332 if ($self->rnachange and $self->rnachange->region eq 'coding') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1333
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1334 #$seqDiff->add_Variant($self->rnachange);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1335
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1336 my $aachange=$self->aachange;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1337 my ($AAobj,$aa_start_prelabel,$aa_start,$mut_translation);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1338 $AAobj=$self->RNA->get_Translation;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1339 $aa_start_prelabel=$aachange->start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1340 $aa_start=$AAobj->position($self->RNA->label(2,$aa_start_prelabel));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1341 $aachange->start($aa_start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1342 $mut_translation=$AAobj->seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1343
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1344 # this now takes in account possible preinsertions
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1345 my $aa_m = Bio::Variation::Allele->new;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1346 $aa_m->seq(substr($mut_translation,$aa_start-1)) if substr($mut_translation,$aa_start-1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1347 $aachange->allele_mut($aa_m);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1348 $aachange->add_Allele($aa_m);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1349 #$aachange->allele_mut(substr($mut_translation,$aa_start-1));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1350 #$aachange->allele_mut($mut_translation);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1351 my ($rlenori, $rlenmut);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1352 $rlenori = CORE::length($aachange->RNAChange->allele_ori->seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1353 $rlenmut = CORE::length($aachange->RNAChange->allele_mut->seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1354 #point mutation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1355
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1356 if ($rlenori == 1 and $rlenmut == 1 and $aachange->allele_ori->seq ne '*') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1357 my $alleleseq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1358 if ($aachange->allele_mut->seq) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1359 $alleleseq = substr($aachange->allele_mut->seq, 0, 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1360 $aachange->allele_mut->seq($alleleseq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1361 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1362 $aachange->end($aachange->start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1363 $aachange->length(1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1364 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1365 elsif ( $rlenori == $rlenmut and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1366 $aachange->allele_ori->seq ne '*' ) { #complex inframe mutation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1367 $aachange->allele_mut->seq(substr $aachange->allele_mut->seq,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1368 0,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1369 length($aachange->allele_ori->seq));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1370 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1371 #inframe mutation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1372 elsif ((int($rlenori-$rlenmut))%3 == 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1373 if ($aachange->RNAChange->allele_mut->seq and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1374 $aachange->RNAChange->allele_ori->seq ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1375 # complex
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1376 my $rna_len = length ($aachange->RNAChange->allele_mut->seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1377 my $len = $rna_len/3;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1378 $len++ unless $rna_len%3 == 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1379 $aachange->allele_mut->seq(substr $aachange->allele_mut->seq, 0, $len );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1380 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1381 elsif ($aachange->RNAChange->codon_pos == 1){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1382 # deletion
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1383 if ($aachange->RNAChange->allele_mut->seq eq '') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1384 $aachange->allele_mut->seq('');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1385 $aachange->end($aachange->start + $aachange->length - 1 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1386 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1387 # insertion
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1388 elsif ($aachange->RNAChange->allele_ori->seq eq '' ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1389 $aachange->allele_mut->seq(substr $aachange->allele_mut->seq, 0,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1390 length ($aachange->RNAChange->allele_mut->seq) / 3);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1391 $aachange->allele_ori->seq('');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1392 $aachange->end($aachange->start + $aachange->length - 1 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1393 $aachange->length(0);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1394 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1395 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1396 #elsif ($aachange->RNAChange->codon_pos == 2){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1397 # deletion
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1398 if (not $aachange->RNAChange->allele_mut->seq ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1399 $aachange->allele_mut->seq(substr $aachange->allele_mut->seq, 0, 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1400 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1401 # insertion
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1402 elsif (not $aachange->RNAChange->allele_ori->seq) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1403 $aachange->allele_mut->seq(substr $aachange->allele_mut->seq, 0,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1404 length ($aachange->RNAChange->allele_mut->seq) / 3 +1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1405 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1406 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1407 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1408 #frameshift
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1409 #my $pos = index $aachange->allele_mut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1410 #$aachange->allele_mut(substr($aachange->allele_mut, 0, 1));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1411 $aachange->length(CORE::length($aachange->allele_ori->seq));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1412 my $aaend = $aachange->start + $aachange->length -1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1413 $aachange->end($aachange->start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1414 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1415
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1416 # splicing site deletion check
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1417 my @beforeexons=@{$self->exons};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1418 my @afterexons=$self->RNA->all_Exons;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1419 my $i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1420 if (scalar(@beforeexons) ne scalar(@afterexons)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1421 my $mut_number = $self->mutation->issue;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1422 $self->warn("Exons have been modified at mutation n.$mut_number!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1423 $self->rnachange->exons_modified(1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1424 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1425 EXONCHECK:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1426 foreach $i (0..$#beforeexons) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1427 if ($beforeexons[$i] ne $afterexons[$i]) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1428 my $mut_number = $self->mutation->issue;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1429 $self->warn("Exons have been modified at mutation n.$mut_number!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1430 $self->rnachange->exons_modified(1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1431 last EXONCHECK;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1432 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1433 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1434 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1435 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1436 #$seqDiff->rnachange(undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1437 #print "getting here?";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1438 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1439 return 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1440 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1441
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1442 1;