annotate variant_effect_predictor/Bio/LiveSeq/AARange.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: AARange.pm,v 1.10 2001/10/22 08:22:49 heikki Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # bioperl module for Bio::LiveSeq::AARange
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Joseph Insana <insana@ebi.ac.uk> <jinsana@gmx.net>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 # Copyright Joseph Insana
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 # POD documentation - main docs before the code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 Bio::LiveSeq::AARange - AARange abstract class for LiveSeq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 #documentation needed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 This is used as possible parent for aminoacid range object classes.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 Or it can be used straight away to define aminoacid ranges. The idea
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 is that the ranges defined are attached to a Translation object and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 they refer to its coordinate-system when they are first created (via
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 the new() method). When they are created they are anyway linked to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 the underlying DNA LiveSeq by way of the LiveSeq labels. This allows
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 to preserve the ranges even if the numbering changes in the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 Translation due to deletions or insertions.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 The protein sequence associated with the AARange can be accessed via
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 the usual seq() or subseq() methods.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 The start and end of the AARange in protein coordinate system can be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 fetched with aa_start() and aa_end() methods. Note: the behaviour of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 these methods would be influenced by the coordinate_start set in the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 corresponding Translation object. This can be desirable but can also
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 lead to confusion if the coordinate_start had been changed and the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 original position of the AARange was to be retrieved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 start() and end() methods of the AARange will point to the labels
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 identifying the first nucleotide of the first and last triplet coding
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 for the start and end of the AminoAcidRange.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 The underlying nucleotide sequence of the AARange can be retrieved
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 with the labelsubseq() method. This would retrieve the whole DNA
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 sequence, including possible introns. This is called "DNA_sequence".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 To fetch the nucleotide sequence of the Transcript, without introns,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 the labelsubseq() of the attached Transcript (the Transcript the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 Translation comes from) has to be accessed. This is called
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 "cDNA_sequence".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 Here are the operations to retrieve these latter two kinds of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 sequences:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 $startlabel=$AARange->start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 $endtripletlabel=$AARange->end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 $endlabel=$AARange->{'seq'}->label(3,$endtripletlabel,$AARange->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 $dnaseq=$AARange->labelsubseq($startlabel,undef,$endlabel));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 $cdnaseq=$AARange->get_Transcript->labelsubseq($startlabel,undef,$endlabel);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 To simplify, these operations have been included in two additional
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 methods: dna_seq() and cdna_seq().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 These would return the whole sequence, as in the examples above. But
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 the above general scheme can be used by specifying different labels,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 to retrieve hypothetical subsequences of interest.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 =head1 AUTHOR - Joseph A.L. Insana
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 Email: Insana@ebi.ac.uk, jinsana@gmx.net
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 Address:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 EMBL Outstation, European Bioinformatics Institute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 Wellcome Trust Genome Campus, Hinxton
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 Cambs. CB10 1SD, United Kingdom
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 The rest of the documentation details each of the object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 methods. Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 package Bio::LiveSeq::AARange;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 $VERSION=1.8;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 # Version history:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 # Wed Apr 19 15:10:29 BST 2000 v 1.0 begun
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 # Wed Apr 19 17:26:58 BST 2000 v 1.4 new, aa_start, aa_end, seq, length created
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 # Wed Apr 19 19:57:42 BST 2000 v 1.5 subseq position label added
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 # Thu Apr 20 16:13:58 BST 2000 v 1.7 added: documentation, dna_seq, cdna_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 # Wed Mar 28 16:58:02 BST 2001 v 1.8 carp -> warn,throw (coded methods in SeqI)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 use vars qw($VERSION @ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 use Bio::LiveSeq::SeqI 3.2; # uses SeqI, inherits from it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 @ISA=qw(Bio::LiveSeq::SeqI);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 Title : new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 Usage : $aarange = Bio::LiveSeq::AARange->new(-translation => $obj_ref,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 -start => $beginaa,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 -end => $endaa,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 -name => "ABCD",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 -description => "DCBA",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 -translength => $length);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 Function: generates a new AminoAcidRange LiveSeq object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 Returns : reference to a new object of class AARange
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 Errorcode -1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 Args : two positions in AminoAcid coordinate numbering
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 an object reference specifying to which translation the aminoacid
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 ranges refer to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 a name and a description (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 an optional "translength" argument: this can be given when
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 a lot of AARanges are to be created at the same time for the same
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 Translation object, calculating it with $translation->length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 This would increase the speed, avoiding the new() function to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 calculate everytime the same length again and again for every obj.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 my ($thing, %args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 my $class = ref($thing) || $thing;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 my ($obj,%range);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 $obj = \%range;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 $obj = bless $obj, $class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 my $self=$obj;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 my ($translation,$start,$end,$name,$description,$translength)=($args{-translation},$args{-start},$args{-end},$args{-name},$args{-description},$args{-translength});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 unless (($translation)&&(ref($translation) eq "Bio::LiveSeq::Translation")) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 $self->warn("No -translation or wrong type given");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 return (-1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 unless ($translength) { # if it's not given, fetch it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 $translength=$translation->length;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 my $seq=$translation->{'seq'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 if (($start < 1)&&($start > $translength)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 $self->warn("$class not initialised because start aminoacid position not valid");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 return (-1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 if (($end < 1)&&($end > $translength)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 $self->warn("$class not initialised because end aminoacid position not valid");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 return (-1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 if ($start > $end) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 $self->warn("$class not initialised because start position > end position!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 return (-1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 my ($starttripletlabel,$endtripletlabel);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 if ($start == $end) { # trick to increase speed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 $starttripletlabel=$endtripletlabel=$translation->label($start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 ($starttripletlabel,$endtripletlabel)=($translation->label($start),$translation->label($end));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 unless (($starttripletlabel > 0)&&($endtripletlabel > 0)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 $self->warn("$class not initialised because of problems in retrieving start or end label!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 return (-1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 # unsure if needed:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 #my $endlabel=$seq->label(3,$endtripletlabel); # to get the real end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 #unless ($endlabel > 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 #carp "$class not initialised because of problems retrieving the last nucleotide of the triplet coding for the end aminoacid";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 #return (-1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 #}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 $self->{'seq'}=$seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 $self->{'start'}=$starttripletlabel;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 $self->{'end'}=$endtripletlabel;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 $self->{'strand'}=$translation->strand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 $self->{'translation'}=$translation;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 $self->{'name'}=$name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 $self->{'description'}=$description;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 $self->{'alphabet'}="protein";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 return $obj;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 sub coordinate_start {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 my $self=shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 $self->warn("Cannot perform this operation in an AminoAcidRange object!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 return (-1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 sub all_labels {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 my $self=shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 $self->warn("Cannot perform this operation in an AminoAcidRange object!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 return (-1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 sub valid {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 my $self=shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 $self->warn("Cannot perform this operation in an AminoAcidRange object!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 return (-1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 =head2 get_Transcript
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 Title : valid
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 Usage : $transcript = $obj->get_Transcript()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 Function: retrieves the reference to the object of class Transcript (if any)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 attached to a LiveSeq object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 Returns : object reference
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 sub get_Transcript {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 my $self=shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 return ($self->get_Translation->get_Transcript);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 =head2 get_Translation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 Title : valid
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 Usage : $translation = $obj->get_Translation()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 Function: retrieves the reference to the object of class Translation (if any)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 attached to a LiveSeq object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 Returns : object reference
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 sub get_Translation {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 my $self=shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 return ($self->{'translation'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 sub change {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 my $self=shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 $self->warn("Cannot change an AminoAcidRange object!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 return (-1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 sub positionchange {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 my $self=shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 $self->warn("Cannot change an AminoAcidRange object!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 return (-1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 sub labelchange {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 my $self=shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 $self->warn("Cannot change an AminoAcidRange object!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 return (-1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 sub subseq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 my ($self,$pos1,$pos2,$length) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 if (defined ($length)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 if ($length < 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 $self->warn("No sense asking for a subseq of length < 1");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 return (-1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 unless (defined ($pos1)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 $pos1=1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 } elsif ($pos1 < 1) { # if position out of boundaries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 $self->warn("Starting position for AARange cannot be < 1!"); return (-1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 if ((defined ($pos2))&&($pos1>$pos2)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 $self->warn("1st position($pos1) cannot be > 2nd position($pos2)!"); return (-1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 my $seq=$self->seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 my $objlength=length($seq);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 unless (defined ($length)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 $length=$objlength-$pos1+1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 if (defined ($pos2)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 if ($pos2 > $objlength) { # if position out of boundaries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 $self->warn("Ending position for AARange cannot be > length of AARange!"); return (-1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 $length=$pos2-$pos1+1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 if ((defined ($pos1))&&($pos1>$pos2)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 $self->warn("1st position($pos1) cannot be > 2nd position($pos2)!"); return (-1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 my $str=substr($seq,$pos1-1,$length);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 if (length($str) < $length) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 $self->warn("Attention, cannot return the length requested for subseq",1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 return $str;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 sub seq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 my $self=shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 my ($aa_start,$aa_end)=($self->aa_start,$self->aa_end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 unless (($aa_start)&&($aa_end)) { # they must both exist
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 $self->warn("Not able to find start or end of the AminoAcid Range");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 return (0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 my $translseq=$self->get_Translation->seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 return substr($translseq,$aa_start-1,$aa_end-$aa_start+1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 # Note: it will return "undef" if the translation stops before the start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 # of the aarange (because of upstream nonsense mutation creating STOP).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 # For the same reason it would return uncomplete (up to the STOP) string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 # if the stop happens in between aarange's start and stop
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 sub length {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 my $self=shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 my $seq=$self->seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 my $length=length($seq);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 return $length;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 sub label {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 my ($self,$position)=@_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 my $translation=$self->get_Translation;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 my $origstart=$translation->coordinate_start; # preserve it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 $translation->coordinate_start($self->start); # change it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 my $label=$translation->label($position);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 $translation->coordinate_start($origstart); # restore it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 return ($label);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 sub position {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 my ($self,$label)=@_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 my $translation=$self->get_Translation;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 my $origstart=$translation->coordinate_start; # preserve it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 $translation->coordinate_start($self->start); # change it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 my $position=$translation->position($label);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 $translation->coordinate_start($origstart); # restore it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 return ($position);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 =head2 aa_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 Title : aa_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 Usage : $end = $aarange->aa_start()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 Returns : integer (position, according to Translation coordinate system) of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 the start of an AminoAcidRange object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 sub aa_start {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 my $self=shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 my $aastart=$self->get_Translation->position($self->{'start'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 =head2 aa_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 Title : aa_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 Usage : $end = $aarange->aa_end()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 Returns : integer (position, according to Translation coordinate system) of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 the end of an AminoAcidRange object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 sub aa_end {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 my $self=shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 my $aastart=$self->get_Translation->position($self->{'end'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 =head2 dna_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 Title : dna_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 Usage : $end = $aarange->dna_seq()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 Returns : the sequence at DNA level of the entire AminoAcidRange
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 this would include introns (if present)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 sub dna_seq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 my $self=shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 my $startlabel=$self->start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 my $endtripletlabel=$self->end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 my $endlabel=$self->{'seq'}->label(3,$endtripletlabel,$self->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 return ($self->labelsubseq($startlabel,undef,$endlabel));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 =head2 cdna_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 Title : cdna_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 Usage : $end = $aarange->cdna_seq()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 Returns : the sequence at cDNA level of the entire AminoAcidRange
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 i.e. this is the part of the Transcript that codes for the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 AminoAcidRange. It would be composed just of exonic DNA.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 sub cdna_seq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 my $self=shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 my $startlabel=$self->start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 my $endtripletlabel=$self->end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 my $endlabel=$self->{'seq'}->label(3,$endtripletlabel,$self->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 return ($self->get_Transcript->labelsubseq($startlabel,undef,$endlabel));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 # this checks if the attached Transcript has a Gene object attached
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 sub gene {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 if (defined $value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 $self->{'gene'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 unless (exists $self->{'gene'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 unless (exists $self->get_Transcript->{'gene'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 return (0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 return ($self->get_Transcript->{'gene'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 return $self->{'gene'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 1;