annotate variant_effect_predictor/Bio/LiveSeq/SeqI.pm @ 0:2bc9b66ada89 draft default tip

Uploaded
author mahtabm
date Thu, 11 Apr 2013 06:29:17 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: SeqI.pm,v 1.25 2002/10/22 07:38:34 lapp Exp $
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3 # bioperl module for Bio::LiveSeq::SeqI
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
4 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Joseph Insana <insana@ebi.ac.uk> <jinsana@gmx.net>
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
6 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
7 # Copyright Joseph Insana
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
8 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
10 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
11 # POD documentation - main docs before the code
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
12
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
13 =head1 NAME
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
14
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
15 Bio::LiveSeq::SeqI - Abstract sequence interface class for LiveSeq
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
16
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
17 =head1 SYNOPSIS
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
18
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
19 # documentation needed
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
20
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
21 =head1 DESCRIPTION
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
22
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
23 This class implements BioPerl PrimarySeqI interface for Live Seq objects.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
24
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
25 One of the main difference in LiveSequence compared to traditional
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
26 "string" sequences is that coordinate systems are flexible. Typically
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
27 gene nucleotide numbering starts from 1 at the first character of the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
28 initiator codon (A in ATG). This means that negative positions are
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
29 possible and common!
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
30
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
31 Secondly, the sequence manipulation methods do not return a new
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
32 sequence object but change the current object. The current status can
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
33 be written out to BioPerl sequence objects.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
34
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
35 =head1 FEEDBACK
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
36
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
37 =head2 Mailing Lists
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
38
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
39 User feedback is an integral part of the evolution of this and other
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
40 Bioperl modules. Send your comments and suggestions preferably to one
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
41 of the Bioperl mailing lists. Your participation is much appreciated.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
42
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
43 bioperl-l@bioperl.org - General discussion
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
44 http://bio.perl.org/MailList.html - About the mailing lists
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
45
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
46 =head2 Reporting Bugs
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
47
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
48 Report bugs to the Bioperl bug tracking system to help us keep track
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
49 the bugs and their resolution. Bug reports can be submitted via email
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
50 or the web:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
51
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
52 bioperl-bugs@bio.perl.org
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
53 http://bugzilla.bioperl.org/
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
54
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
55 =head1 AUTHOR - Joseph A.L. Insana
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
56
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
57 Email: Insana@ebi.ac.uk, jinsana@gmx.net
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
58
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
59 Address:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
60
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
61 EMBL Outstation, European Bioinformatics Institute
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
62 Wellcome Trust Genome Campus, Hinxton
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
63 Cambs. CB10 1SD, United Kingdom
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
64
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
65 =head1 APPENDIX
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
66
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
67 The rest of the documentation details each of the object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
68 methods. Internal methods are usually preceded with a _
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
69
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
70 Some note on the terminology/notation of method names:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
71 label: a unique pointer to a single nucleotide
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
72 position: the position of a nucleotide according to a particular coordinate
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
73 system (e.g. counting downstream from a particular label taken as
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
74 number 1)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
75 base: the one letter code for a nucleotide (i.e.: "a" "t" "c" "g")
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
76
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
77 a base is the "value" that an "element" of a "chain" can assume
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
78 (see documentation on the Chain datastructure if interested)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
79
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
80 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
81
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
82 #'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
83 # Let the code begin...
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
84
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
85 package Bio::LiveSeq::SeqI;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
86 $VERSION=3.3;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
87 # Version history:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
88 # Thu Mar 16 18:11:18 GMT 2000 v.1.0 Started implementation, interface/inheritance from ChainI.pm
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
89 # Thu Mar 16 20:05:51 GMT 2000 v 1.2 implemented up to splice_out
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
90 # Fri Mar 17 05:37:37 GMT 2000 v 1.3 implemented lot of new methods and written their documentation / in sync with ChainI 1.6 and Chain 2.4
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
91 # Fri Mar 17 17:17:24 GMT 2000 v 1.7 in sync with ChainI 1.7
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
92 # Fri Mar 17 20:12:27 GMT 2000 v 1.8 NAMING change: index->label everywhere
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
93 # Mon Mar 20 19:19:21 GMT 2000 v 2.0 renamed from DNA to SeqI and begun
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
94 # working on methods defined with Heikki
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
95 # Tue Mar 21 01:37:52 GMT 2000 v 2.1 created strand(), seq()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
96 # Tue Mar 21 02:43:21 GMT 2000 v 2.11 seq() prints correctly also for exons
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
97 # Wed Mar 22 19:41:45 GMT 2000 v 2.22 translate, alphabet, length, all_labels
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
98 # Thu Mar 23 21:03:42 GMT 2000 v 2.3 follows() label() position()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
99 # Fri Mar 24 18:33:18 GMT 2000 v 2.33 rewritten position(), now works with diverse coordinate_starts
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
100 # Sat Mar 25 06:11:55 GMT 2000 v 2.4 started subseq
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
101 # Mon Mar 27 19:22:32 BST 2000 v 2.45 subseq should be ok but the thing about reverse strand has to be checked!!
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
102 # Tue Mar 28 01:53:31 BST 2000 v 2.46 changed strand behaviour in subseq
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
103 # Wed Mar 29 00:05:21 BST 2000 v 2.5 change() begun
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
104 # Wed Mar 29 02:06:20 BST 2000 v 2.53 _delete _mutate _praeinsert coded
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
105 # Wed Mar 29 02:29:01 BST 2000 v 2.531 _mutate changed to make it more general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
106 # Wed Mar 29 03:38:21 BST 2000 v 2.54 tested and corrected change
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
107 # Wed Mar 29 16:23:39 BST 2000 v 2.55 change deals with complex now
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
108 # Fri Mar 31 18:26:54 BST 2000 v 2.56 translate_string added
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
109 # Sat Apr 1 19:02:28 BST 2000 v 2.57 labelchange() created
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
110 # Fri Apr 7 03:31:35 BST 2000 v 2.6 labelsubseq() created
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
111 # Sat Apr 8 13:01:09 BST 2000 v 2.61 obj_valid() created
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
112 # Wed Apr 12 16:23:21 BST 2000 v 2.7 _deletecheck call added in _delete
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
113 # Wed Apr 19 16:21:33 BST 2000 v 2.72 name() source() description() added
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
114 # Thu Apr 20 14:42:57 BST 2000 v 2.8 added or rewritten much pod documentation
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
115 # Thu Apr 27 16:18:55 BST 2000 v 2.82 translate now accounts for ttable info
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
116 # Thu Jun 22 20:02:39 BST 2000 v 2.9 valid() from Transcript now moved here, as the general for all objects inheriting from SeqI
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
117 # Thu Jun 22 20:17:32 BST 2000 v 2.91 _unsecure_labelsubseq() added
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
118 # Sat Jun 24 00:10:31 BST 2000 v 2.92 unsecure is an option of labelsubseq() now
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
119 # Thu Jun 29 16:38:45 BST 2000 v 3.0 labelchange() now calls itself again for the DNAobj if the label for the change is not valid for the object requested but valid for the DNAobj
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
120 # Tue Jan 30 14:16:22 EST 2001 v 3.1 delete_Obj added, to flush circular references
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
121 # Wed Mar 28 15:16:38 BST 2001 v 3.2 functions warn, verbose, throw, stack_trace, stack_trace_dump added
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
122 # Wed Apr 4 13:34:29 BST 2001 v 3.3 moved from carp to warn
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
123
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
124 use strict;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
125 use vars qw($VERSION @ISA);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
126 use Bio::LiveSeq::ChainI 1.9; # to inherit from it
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
127 use Bio::Tools::CodonTable; # for the translate() function
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
128 use Bio::PrimarySeqI;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
129
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
130 @ISA=qw(Bio::Root::Root Bio::LiveSeq::ChainI Bio::PrimarySeqI ); # inherit from ChainI
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
131
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
132 =head2 seq
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
133
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
134 Title : seq
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
135 Usage : $string = $obj->seq()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
136 Function: Returns the complete sequence of an object as a string of letters.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
137 Suggested cases are upper case for proteins and lower case for
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
138 DNA sequence (IUPAC standard),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
139 Returns : a string
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
140
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
141
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
142 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
143
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
144 sub seq {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
145 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
146 my ($start,$end) = ($self->start(),$self->end());
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
147 if ($self->strand() == 1) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
148 return $self->{'seq'}->down_chain2string($start,undef,$end);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
149 } else { # reverse strand
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
150 my $str = $self->{'seq'}->up_chain2string($start,undef,$end);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
151 $str =~ tr/acgtrymkswhbvdnxACGTRYMKSWHBVDNX/tgcayrkmswdvbhnxTGCAYRKMSWDVBHNX/;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
152 return $str;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
153 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
154 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
155
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
156 =head2 all_labels
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
157
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
158 Title : all_labels
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
159 Usage : @labels = $obj->all_labels()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
160 Function: all the labels of every nucleotide an object is composed of
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
161 Returns : an array of labels
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
162 Args : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
163
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
164 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
165
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
166 sub all_labels {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
167 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
168 my ($start,$end) = ($self->start(),$self->end());
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
169 my $labels;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
170 if ($self->strand() == 1) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
171 $labels=$self->{'seq'}->down_labels($start,$end);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
172 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
173 $labels=$self->{'seq'}->up_labels($start,$end);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
174 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
175 return (@{$labels});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
176 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
177
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
178 =head2 labelsubseq
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
179
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
180 Title : labelsubseq
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
181 Usage : $dna->labelsubseq();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
182 : $dna->labelsubseq($startlabel);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
183 : $dna->labelsubseq($startlabel,$length);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
184 : $dna->labelsubseq($startlabel,undef,$endlabel);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
185 e.g. : $dna->labelsubseq(4,undef,8);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
186 Function: prints the sequence as string. The difference between labelsubseq
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
187 and normal subseq is that it uses /labels/ as arguments, instead
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
188 than positions. This allows for faster and more efficient lookup,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
189 skipping the (usually) lengthy conversion of positions into labels.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
190 This is expecially useful for manipulating with high power
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
191 LiveSeq objects, knowing the labels and exploiting their
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
192 usefulness.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
193 Returns : a string
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
194 Errorcode -1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
195 Args : without arguments it returns the entire sequence
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
196 with a startlabel it returns the sequence downstream that label
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
197 if a length is specified, it returns only that number of bases
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
198 if an endlabel is specified, it overrides the length argument
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
199 and prints instead up to that label (included)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
200 Defaults: $startlabel defaults to the beginning of the entire sequence
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
201 $endlabel defaults to the end of the entire sequence
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
202
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
203 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
204
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
205 # NOTE: unsecuremode is to be used /ONLY/ if sure of the start and end labels, expecially that they follow each other in the correct order!!!!
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
206
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
207 sub labelsubseq {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
208 my ($self,$start,$length,$end,$unsecuremode) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
209 if (defined $unsecuremode && $unsecuremode eq "unsecuremoderequested")
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
210 { # to skip security checks (faster)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
211 unless ($start) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
212 $start=$self->start;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
213 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
214 if ($end) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
215 if ($end == $start) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
216 $length=1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
217 undef $end;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
218 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
219 undef $length;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
220 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
221 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
222 unless ($length) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
223 $end=$self->end;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
224 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
225 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
226 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
227 if ($start) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
228 unless ($self->{'seq'}->valid($start)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
229 $self->warn("Start label not valid"); return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
230 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
231 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
232 if ($end) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
233 if ($end == $start) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
234 $length=1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
235 undef $end;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
236 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
237 unless ($self->{'seq'}->valid($end)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
238 $self->warn("End label not valid"); return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
239 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
240 unless ($self->follows($start,$end) == 1) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
241 $self->warn("End label does not follow Start label!"); return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
242 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
243 undef $length;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
244 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
245 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
246 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
247 if ($self->strand() == 1) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
248 return $self->{'seq'}->down_chain2string($start,$length,$end);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
249 } else { # reverse strand
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
250 my $str = $self->{'seq'}->up_chain2string($start,$length,$end);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
251 $str =~ tr/acgtrymkswhbvdnxACGTRYMKSWHBVDNX/tgcayrkmswdvbhnxTGCAYRKMSWDVBHNX/;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
252 return $str;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
253 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
254 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
255
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
256 =head2 subseq
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
257
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
258 Title : subseq
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
259 Usage : $substring = $obj->subseq(10,40);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
260 : $substring = $obj->subseq(10,undef,4);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
261 Function: returns the subseq from start to end, where the first base
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
262 is 1 and the number is inclusive, ie 1-2 are the first two
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
263 bases of the sequence
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
264
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
265 Start cannot be larger than end but can be equal.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
266
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
267 Allows for negative numbers $obj->subseq(-10,-1). By
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
268 definition, there is no 0!
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
269 -5 -1 1 5
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
270 gctagcgcccaac atggctcgctg
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
271
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
272 This allows to retrieve sequences upstream from given position.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
273
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
274 The precedence is from left to right: if END is given LENGTH is
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
275 ignored.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
276
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
277 Examples: $obj->subseq(-10,undef,10) returns 10 elements before position 1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
278 $obj->subseq(4,8) returns elements from the 4th to the 8th, inclusive
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
279
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
280 Returns : a string
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
281 Errorcode: -1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
282 Args : start, integer, defaults to start of the sequence
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
283 end, integer, '' or undef, defaults to end of the sequence
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
284 length, integer, '' or undef
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
285 an optional strand (1 or -1) 4th argument
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
286 if strand argument is not given, it will default to the object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
287 argment. This argument is useful when a call is issued from a child
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
288 of a parent object containing the subseq method
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
289
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
290 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
291
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
292 #'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
293 # check the fact about reverse strand!
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
294 # is it feasible? Is it correct? Should we do it? How about exons? Does it
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
295 # work when you ask subseq of an exon?
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
296 # eliminated now (Mon night)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
297 sub subseq {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
298 ##my ($self,$pos1,$pos2,$length,$strand) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
299 my ($self,$pos1,$pos2,$length,$strand) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
300 ##unless (defined ($strand)) { # if optional [strand] argument not given
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
301 ## $strand=$self->strand;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
302 ##}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
303 $strand=$self->strand;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
304 my ($str,$startlabel,$endlabel);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
305 if (defined ($length)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
306 if ($length < 1) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
307 $self->warn("No sense asking for a subseq of length < 1");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
308 return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
309 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
310 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
311 unless (defined ($pos1)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
312 #print "\n##### DEBUG pos1 not defined\n";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
313 $startlabel=$self->start;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
314 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
315 if ($pos1 == 0) { # if position = 0 complain
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
316 $self->warn("Position cannot be 0!"); return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
317 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
318 ##if ($strand == 1) { # CHECK THIS!
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
319 if ((defined ($pos2))&&($pos1>$pos2)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
320 $self->warn("1st position($pos1) cannot be > 2nd position($pos2)!"); return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
321 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
322 ##} else { # CHECK THIS!
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
323 ## if ((defined ($pos2))&&($pos1<$pos2)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
324 ## $self->warn("1st position($pos1) cannot be < 2nd position($pos2) on reverse strand!)"; return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
325 ## }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
326 ##}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
327 $startlabel=$self->label($pos1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
328 if ($startlabel < 1) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
329 $self->warn("position $pos1 not valid as start of subseq!"); return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
330 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
331 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
332 unless (defined ($pos2)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
333 #print "\n##### pos2 not defined\n";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
334 unless (defined ($length)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
335 $endlabel=$self->end;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
336 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
337 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
338 if ($pos2 == 0) { # if position = 0 complain
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
339 $self->warn("Position cannot be 0!"); return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
340 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
341 undef $length;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
342 ##if ($strand == 1) { # CHECK THIS!
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
343 if ((defined ($pos1))&&($pos1>$pos2)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
344 $self->warn("1st position($pos1) cannot be > 2nd position($pos2)!"); return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
345 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
346 ##} else { # CHECK THIS!
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
347 ## if ((defined ($pos1))&&($pos1<$pos2)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
348 ## $self->warn("1st position($pos1) cannot be < 2nd position($pos2) on reverse strand!"); return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
349 ## }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
350 ##}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
351 $endlabel=$self->label($pos2);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
352 if ($endlabel < 1) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
353 $self->warn("position $pos2 not valid as end of subseq!"); return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
354 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
355 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
356 #print "\n ####DEBUG: start $startlabel end $endlabel length $length strand $strand\n";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
357
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
358 if ($strand == 1) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
359 $str = $self->{'seq'}->down_chain2string($startlabel,$length,$endlabel);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
360 } else { # reverse strand
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
361 $str = $self->{'seq'}->up_chain2string($startlabel,$length,$endlabel);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
362 $str =~ tr/acgtrymkswhbvdnxACGTRYMKSWHBVDNX/tgcayrkmswdvbhnxTGCAYRKMSWDVBHNX/;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
363 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
364 return $str;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
365 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
366
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
367 =head2 length
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
368
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
369 Title : length
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
370 Usage : $seq->length();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
371 Function: returns the number of nucleotides (or the number of aminoacids)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
372 in the entire sequence
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
373 Returns : an integer
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
374 Errorcode -1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
375 Args : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
376
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
377 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
378
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
379 sub length {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
380 my $self=shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
381 my ($start,$end,$strand)=($self->start(),$self->end(),$self->strand());
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
382 if ($strand == 1) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
383 return $self->{'seq'}->down_subchain_length($start,$end);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
384 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
385 return $self->{'seq'}->up_subchain_length($start,$end);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
386 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
387 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
388
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
389 =head2 display_id
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
390
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
391 Title : display_id
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
392 Usage : $id_string = $obj->display_id();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
393 Function: returns the display id, alias the common name of the object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
394
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
395 The semantics of this is that it is the most likely string
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
396 to be used as an identifier of the sequence, and likely to
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
397 have "human" readability. The id is equivalent to the ID
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
398 field of the GenBank/EMBL databanks and the id field of the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
399 Swissprot/sptrembl database. In fasta format, the >(\S+) is
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
400 presumed to be the id, though some people overload the id
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
401 to embed other information.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
402
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
403 See also: accession_number
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
404 Returns : a string
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
405 Args : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
406
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
407 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
408
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
409 sub display_id {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
410 my ($self,$value) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
411 if(defined $value) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
412 $self->{'display_id'} = $value;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
413 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
414 return $self->{'display_id'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
415 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
416
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
417
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
418 =head2 accession_number
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
419
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
420 Title : accession_number
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
421 Usage : $unique_biological_key = $obj->accession_number;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
422 Function: Returns the unique biological id for a sequence, commonly
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
423 called the accession_number.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
424 Notice that primary_id() provides the unique id for the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
425 implemetation, allowing multiple objects to have the same accession
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
426 number in a particular implementation.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
427
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
428 For objects with no accession_number this method returns "unknown".
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
429 Returns : a string
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
430 Args : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
431
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
432 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
433
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
434 sub accession_number {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
435 my ($self,$value) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
436 if (defined $value) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
437 $self->{'accession_number'} = $value;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
438 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
439 unless (exists $self->{'accession_number'}) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
440 return "unknown";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
441 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
442 return $self->{'accession_number'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
443 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
444 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
445
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
446 =head2 primary_id
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
447
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
448 Title : primary_id
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
449 Usage : $unique_implementation_key = $obj->primary_id;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
450 Function: Returns the unique id for this object in this
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
451 implementation. This allows implementations to manage their own
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
452 object ids in a way the implementation can control. Clients can
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
453 expect one id to map to one object.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
454
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
455 For sequences with no primary_id, this method returns
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
456 a stringified memory location.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
457
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
458 Returns : A string
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
459 Args : None
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
460
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
461 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
462
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
463
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
464 sub primary_id {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
465 my ($self,$value) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
466 if(defined $value) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
467 $self->{'primary_id'} = $value;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
468 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
469 unless (exists $self->{'primary_id'}) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
470 return "$self";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
471 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
472 return $self->{'primary_id'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
473 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
474 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
475
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
476 =head2 change
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
477
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
478 Title : change
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
479 Usage : $substring = $obj->change('AA', 10);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
480 Function: changes, modifies, mutates the LiveSequence
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
481 Examples:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
482 $obj->change('', 10); delete nucleotide #10
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
483 $obj->change('', 10, 2); delete two nucleotides starting from #10
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
484 $obj->change('G', 10); change nuc #10 to 'G'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
485 $obj->change('GA', 10, 4); replace #10 and 3 following with 'GA'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
486 $obj->change('GA', 10, 2)); is same as $obj->change('GA', 10);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
487 $obj->change('GA', 10, 0 ); insert 'GA' before nucleotide at #10
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
488 $obj->change('GA', 10, 1); GA inserted before #10, #10 deleted
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
489 $obj->change('GATC', 10, 2); GATC inserted before #10, #10&#11 deleted
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
490 $obj->change('GATC', 10, 6); GATC inserted before #10, #10-#15 deleted
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
491
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
492
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
493 Returns : a string of deleted bases (if any) or 1 (everything OK)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
494 Errorcode: -1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
495 Args : seq, string, or '' ('' = undef = 0 = deletion)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
496 start, integer
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
497 length, integer (optional)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
498
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
499 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
500
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
501 sub change {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
502 &positionchange;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
503 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
504
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
505 =head2 positionchange
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
506
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
507 Title : positionchange
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
508 Function: Exactly like change. I.e. change() defaults to positionchange()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
509
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
510 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
511
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
512 sub positionchange {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
513 my ($self,$newseq,$position,$length)=@_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
514 unless ($position) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
515 $self->warn("Position not given or position 0");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
516 return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
517 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
518 my $label=$self->label($position);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
519 unless ($label > 0) { # label not found or error
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
520 $self->warn("No valid label found at that position!");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
521 return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
522 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
523 return ($self->labelchange($newseq,$label,$length));
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
524 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
525
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
526 =head2 labelchange
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
527
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
528 Title : labelchange
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
529 Function: Exactly like change but uses a /label/ instead than a position
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
530 as second argument. This allows for multiple changes in a LiveSeq
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
531 without the burden of recomputing positions. I.e. for a multiple
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
532 change in two different points of the LiveSeq, the approach would
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
533 be the following: fetch the correct labels out of the two different
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
534 positions (method: label($position)) and then use the labelchange()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
535 method to modify the sequence using those labels instead than
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
536 relying on the positions (that would have modified after the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
537 first change).
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
538
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
539 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
540
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
541 sub labelchange {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
542 my ($self,$newseq,$label,$length)=@_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
543 unless ($self->valid($label)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
544 if ($self->{'seq'}->valid($label)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
545 #$self->warn("Label \'$label\' not valid for executing a LiveSeq change for the object asked but it's ok for DNAlevel change, reverting to that");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
546 shift @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
547 return($self->{'seq'}->labelchange(@_));
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
548 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
549 $self->warn("Label \'$label\' not valid for executing a LiveSeq change");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
550 return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
551 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
552 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
553 unless ($newseq) { # it means this is a simple deletion
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
554 if (defined($length)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
555 unless ($length >= 0) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
556 $self->warn("No sense having length < 0 in a deletion");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
557 return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
558 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
559 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
560 $self->warn("Length not defined for deletion!");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
561 return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
562 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
563 return $self->_delete($label,$length);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
564 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
565 my $newseqlength=CORE::length($newseq);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
566 if (defined($length)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
567 unless ($length >= 0) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
568 $self->warn("No sense having length < 0 in a change()");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
569 return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
570 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
571 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
572 $length=$newseqlength; # defaults to pointmutation(s)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
573 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
574 if ($length == 0) { # it means this is a simple insertion, length def&==0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
575 my ($insertbegin,$insertend)=$self->_praeinsert($label,$newseq);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
576 if ($insertbegin == -1) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
577 return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
578 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
579 return (1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
580 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
581 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
582 if ($newseqlength == $length) { # it means this is simple pointmutation(s)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
583 return $self->_mutate($label,$newseq,$length);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
584 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
585 # if we arrived here then change is complex mixture
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
586 my $strand=$self->strand();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
587 my $afterendlabel=$self->label($length+1,$label,$strand); # get the label at $length+1 positions after $label
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
588 unless ($afterendlabel > 0) { # label not found or error
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
589 $self->warn("No valid afterendlabel found for executing the complex mutation!");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
590 return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
591 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
592 my $deleted=$self->_delete($label,$length); # first delete length nucs
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
593 if ($deleted == -1) { # if errors
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
594 return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
595 } else { # then insert the newsequence
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
596 my ($insertbegin,$insertend)=$self->_praeinsert($afterendlabel,$newseq);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
597 if ($insertbegin == -1) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
598 return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
599 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
600 return (1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
601 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
602 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
603 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
604
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
605 # internal methods for change()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
606
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
607 # arguments: label for beginning of deletion, new sequence to insert
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
608 # returns: labels of beginning and end of the inserted sequence
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
609 # errorcode: -1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
610 sub _praeinsert {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
611 my ($self,$label,$newseq)=@_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
612 my ($insertbegin,$insertend);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
613 my $strand=$self->strand();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
614 if ($strand == 1) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
615 ($insertbegin,$insertend)=($self->{'seq'}->praeinsert_string($newseq,$label));
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
616 } else { # since it's reverse strand and we insert in forward direction....
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
617 $newseq=reverse($newseq);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
618 $newseq =~ tr/acgtrymkswhbvdnxACGTRYMKSWHBVDNX/tgcayrkmswdvbhnxTGCAYRKMSWDVBHNX/; # since it's reverse strand we get the complementary bases
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
619 ($insertend,$insertbegin)=($self->{'seq'}->postinsert_string($newseq,$label));
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
620 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
621 if (($insertbegin==0)||($insertend==0)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
622 $self->warn("Some error occurred while inserting!");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
623 return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
624 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
625 return ($insertbegin,$insertend);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
626 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
627 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
628
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
629 # arguments: label for beginning of deletion, length of deletion
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
630 # returns: string of deleted bases
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
631 # errorcode: -1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
632 sub _delete {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
633 my ($self,$label,$length)=@_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
634 my $strand=$self->strand();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
635 my $endlabel=$self->label($length,$label,$strand); # get the label at $length positions after $label
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
636 unless ($endlabel > 0) { # label not found or error
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
637 $self->warn("No valid endlabel found for executing the deletion!");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
638 return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
639 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
640 # this is important in Transcript to fix exon structure
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
641 $self->_deletecheck($label,$endlabel);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
642 my $deletedseq;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
643 if ($strand == 1) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
644 $deletedseq=$self->{'seq'}->splice_chain($label,undef,$endlabel);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
645 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
646 $deletedseq=$self->{'seq'}->splice_chain($endlabel,undef,$label);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
647 $deletedseq=reverse($deletedseq); # because we are on reverse strand and we cut anyway
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
648 # in forward direction
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
649 $deletedseq =~ tr/acgtrymkswhbvdnxACGTRYMKSWHBVDNX/tgcayrkmswdvbhnxTGCAYRKMSWDVBHNX/; # since it's reverse strand we get the complementary bases
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
650 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
651 return ($deletedseq);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
652 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
653
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
654 # empty function, overridden in Transcript, not useful here
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
655 sub _deletecheck {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
656 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
657
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
658 # arguments: label for beginning of mutation, newsequence, number of mutations
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
659 # returns: 1 all OK
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
660 # errorcode: -1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
661 sub _mutate {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
662 my ($self,$label,$newseq,$length)=@_; # length is equal to length(newseq)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
663 my ($i,$base,$nextlabel);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
664 my @labels; # array of labels
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
665 my $strand=$self->strand();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
666 if ($length == 1) { # special cases first
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
667 @labels=($label);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
668 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
669 my $endlabel=$self->label($length,$label,$strand); # get the label at $length positions after $label
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
670 unless ($endlabel > 0) { # label not found or error
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
671 $self->warn("No valid endlabel found for executing the mutation!");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
672 return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
673 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
674 if ($length == 2) { # another special case
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
675 @labels=($label,$endlabel);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
676 } else { # more than 3 bases changed
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
677 # this wouldn't work for Transcript
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
678 #my $labelsarrayref;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
679 #if ($strand == 1) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
680 #$labelsarrayref=$self->{'seq'}->down_labels($label,$endlabel);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
681 #} else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
682 #$labelsarrayref=$self->{'seq'}->up_labels($label,$endlabel);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
683 #}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
684 #@labels=@{$labelsarrayref};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
685 #if ($length != scalar(@labels)) { # not enough labels returned
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
686 #$self->warn("Not enough valid labels found for executing the mutation!");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
687 #return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
688 #}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
689
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
690 # this should be more general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
691 @labels=($label); # put the first one
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
692 while ($label != $endlabel) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
693 $nextlabel=$self->label(2,$label,$strand); # retrieve the next label
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
694 push (@labels,$nextlabel);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
695 $label=$nextlabel; # move on reference
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
696 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
697 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
698 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
699 if ($strand == -1) { # only for reverse strand
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
700 $newseq =~ tr/acgtrymkswhbvdnxACGTRYMKSWHBVDNX/tgcayrkmswdvbhnxTGCAYRKMSWDVBHNX/; # since it's reverse strand we get the complementary bases
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
701 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
702 my $errorcheck; # if not equal to $length after summing for all changes, error did occurr
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
703 $i = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
704 foreach $base (split(//,$newseq)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
705 $errorcheck += $self->{'seq'}->set_value_at_label($base,$labels[$i]);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
706 $i++;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
707 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
708 if ($errorcheck != $length) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
709 $self->warn("Some error occurred while mutating!");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
710 return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
711 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
712 return (1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
713 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
714 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
715
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
716 =head2 valid
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
717
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
718 Title : valid
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
719 Usage : $boolean = $obj->valid($label)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
720 Function: tests if a label exists inside the object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
721 Returns : boolean
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
722 Args : label
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
723
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
724 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
725
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
726 # argument: label
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
727 # returns: 1 YES 0 NO
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
728 sub valid {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
729 my ($self,$label)=@_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
730 my $checkme;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
731 my @labels=$self->all_labels;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
732 foreach $checkme (@labels) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
733 if ($label == $checkme) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
734 return (1); # found
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
735 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
736 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
737 return (0); # not found
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
738 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
739
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
740
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
741 =head2 start
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
742
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
743 Title : start
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
744 Usage : $startlabel=$obj->start()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
745 Function: returns the label of the first nucleotide of the object (exon, CDS)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
746 Returns : label
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
747 Args : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
748
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
749 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
750
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
751 sub start {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
752 my ($self) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
753 return $self->{'start'}; # common for all classes BUT DNA (which redefines it) and Transcript (that takes the information from the Exons)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
754 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
755
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
756 =head2 end
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
757
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
758 Title : end
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
759 Usage : $endlabel=$obj->end()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
760 Function: returns the label of the last nucleotide of the object (exon, CDS)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
761 Returns : label
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
762 Args : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
763
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
764 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
765
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
766 sub end {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
767 my ($self) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
768 return $self->{'end'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
769 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
770
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
771 =head2 strand
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
772
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
773 Title : strand
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
774 Usage : $strand=$obj->strand()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
775 $obj->strand($strand)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
776 Function: gets or sets strand information, being 1 or -1 (forward or reverse)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
777 Returns : -1 or 1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
778 Args : none OR -1 or 1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
779
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
780 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
781
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
782 sub strand {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
783 my ($self,$strand) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
784 if ($strand) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
785 if (($strand != 1)&&($strand != -1)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
786 $self->warn("strand information not changed because strand identifier not valid");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
787 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
788 $self->{'strand'} = $strand;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
789 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
790 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
791 return $self->{'strand'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
792 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
793
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
794 =head2 alphabet
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
795
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
796 Title : alphabet
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
797 Usage : if( $obj->alphabet eq 'dna' ) { /Do Something/ }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
798 Function: Returns the type of sequence being one of
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
799 'dna', 'rna' or 'protein'. This is case sensitive.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
800
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
801 Returns : a string either 'dna','rna','protein'.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
802 Args : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
803 Note : "circular dna" is set as dna
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
804
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
805 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
806
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
807
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
808 sub alphabet {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
809 my %valid_type = map {$_, 1} qw( dna rna protein );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
810 my ($self,$value) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
811 if (defined $value) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
812 $value =~ s/circular dna/dna/;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
813 unless ( $valid_type{$value} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
814 $self->warn("Molecular type '$value' is not a valid type");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
815 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
816 $self->{'alphabet'} = $value;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
817 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
818 return $self->{'alphabet'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
819 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
820
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
821 =head2 coordinate_start
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
822
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
823 Title : coordinate_start
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
824 Usage : $coordstartlabel=$obj->coordinate_start()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
825 : $coordstartlabel=$obj->coordinate_start($label)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
826 Function: returns and optionally sets the first label of the coordinate
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
827 system used
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
828 For some objects only labels inside the object or in frame (for
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
829 Translation objects) will be allowed to get set as coordinate start
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
830
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
831 Returns : label. It returns 0 if label not found.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
832 Errorcode -1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
833 Args : an optional reference $label that is position 1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
834
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
835 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
836
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
837
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
838 sub coordinate_start {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
839 my ($self,$label) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
840 if ($label) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
841 if ($self->valid($label)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
842 $self->{'coordinate_start'} = $label;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
843 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
844 $self->warn("The label you are trying to set as coordinate_start is not valid for this object");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
845 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
846 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
847 my $coord_start = $self->{'coordinate_start'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
848 if ($coord_start) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
849 return $coord_start;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
850 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
851 return $self->start();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
852 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
853 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
854
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
855 =head2 label
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
856
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
857 Title : label
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
858 Usage : $seq->label($position)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
859 : $seq->label($position,$firstlabel)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
860 Examples: $nextlabel=$seq->label(2,$label) -> retrieves the following label
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
861 : $prevlabel=$seq->label(-1,$label) -> retrieves the preceding label
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
862
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
863 Function: returns the label of the nucleotide at $position from current
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
864 coordinate start
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
865 Returns : a label. It returns 0 if label not found.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
866 Errorcode -1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
867 Args : a position,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
868 an optional reference $firstlabel that is to be used as position 1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
869 an optional strand (1 or -1) argument
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
870 if strand argument is not given, it will default to the object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
871 argument. This argument is useful when a call is issued from a child
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
872 of a parent object containing the subseq method
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
873
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
874 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
875
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
876
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
877 sub label {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
878 my ($self,$position,$firstlabel,$strand)=@_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
879 my $label;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
880 unless (defined ($firstlabel)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
881 $firstlabel=$self->coordinate_start;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
882 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
883 unless ($position) { # if position = 0 complain ?
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
884 $self->warn("Position not given or position 0");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
885 return (-1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
886 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
887 unless (defined ($strand)) { # if optional [strand] argument not given
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
888 $strand=$self->strand;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
889 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
890 if ($strand == 1) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
891 if ($position > 0) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
892 $label=$self->{'seq'}->down_get_label_at_pos($position,$firstlabel)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
893 } else { # if < 0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
894 $label=$self->{'seq'}->up_get_label_at_pos(1 - $position,$firstlabel)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
895 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
896 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
897 if ($position > 0) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
898 $label=$self->{'seq'}->up_get_label_at_pos($position,$firstlabel)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
899 } else { # if < 0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
900 $label=$self->{'seq'}->down_get_label_at_pos(1 - $position,$firstlabel)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
901 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
902 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
903 return $label;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
904 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
905
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
906
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
907 =head2 position
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
908
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
909 Title : position
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
910 Usage : $seq->position($label)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
911 : $seq->position($label,$firstlabel)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
912 Function: returns the position of nucleotide at $label
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
913 Returns : the position of the label from current coordinate start
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
914 Errorcode 0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
915 Args : a label pointing to a certain nucleotide (e.g. start of exon)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
916 an optional "firstlabel" as reference to count from
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
917 an optional strand (1 or -1) argument
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
918 if strand argument is not given, it will default to the object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
919 argument. This argument is useful when a call is issued from a child
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
920 of a parent object containing the subseq method
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
921
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
922 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
923
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
924
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
925 sub position {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
926 my ($self,$label,$firstlabel,$strand)=@_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
927 unless (defined ($strand)) { # if optional [strand] argument not given
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
928 $strand=$self->strand;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
929 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
930 unless (defined ($firstlabel)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
931 $firstlabel=$self->coordinate_start;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
932 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
933 unless ($self->valid($label)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
934 $self->warn("label not valid");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
935 return (0);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
936 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
937 if ($firstlabel == $label) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
938 return (1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
939 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
940 my ($coordpos,$position0,$position);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
941 $position0=$self->{'seq'}->down_get_pos_of_label($label);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
942 $coordpos=$self->{'seq'}->down_get_pos_of_label($firstlabel);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
943 $position=$position0-$coordpos+1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
944 if ($position <= 0) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
945 $position--;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
946 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
947 if ($strand == -1) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
948 #print "\n----------DEBUGSEQPOS label $label firstlabel $firstlabel strand $strand: position=",1-$position;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
949 return (1-$position);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
950 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
951 #print "\n----------DEBUGSEQPOS label $label firstlabel $firstlabel strand $strand: position=",$position;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
952 return ($position);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
953 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
954 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
955
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
956 =head2 follows
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
957
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
958 Title : follows
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
959 Usage : $seq->follows($firstlabel,$secondlabel)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
960 : $seq->follows($firstlabel,$secondlabel,$strand)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
961 Function: checks if SECONDlabel follows FIRSTlabel, undependent of the strand
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
962 i.e. it checks downstream for forward strand and
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
963 upstream for reverse strand
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
964 Returns : 1 or 0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
965 Errorcode -1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
966 Args : two labels
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
967 an optional strand (1 or -1) argument
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
968 if strand argument is not given, it will default to the object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
969 argument. This argument is useful when a call is issued from a child
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
970 of a parent object containing the subseq method
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
971
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
972 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
973
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
974 #'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
975 # wraparound to is_downstream and is_upstream that chooses the correct one
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
976 # depending on the strand
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
977 sub follows {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
978 my ($self,$firstlabel,$secondlabel,$strand)=@_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
979 unless (defined ($strand)) { # if optional [strand] argument not given
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
980 $strand=$self->strand;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
981 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
982 if ($strand == 1) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
983 return ($self->{'seq'}->is_downstream($firstlabel,$secondlabel));
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
984 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
985 return ($self->{'seq'}->is_upstream($firstlabel,$secondlabel));
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
986 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
987 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
988 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
989 #=head2 translate
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
990 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
991 # Title : translate
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
992 # Usage : $protein_seq = $obj->translate
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
993 # Function: Provides the translation of the DNA sequence
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
994 # using full IUPAC ambiguities in DNA/RNA and amino acid codes.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
995 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
996 # The resulting translation is identical to EMBL/TREMBL database
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
997 # translations.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
998 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
999 # Returns : a string
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1000 # Args : character for terminator (optional) defaults to '*'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1001 # character for unknown amino acid (optional) defaults to 'X'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1002 # frame (optional) valid values 0, 1, 3, defaults to 0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1003 # codon table id (optional) defaults to 1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1004 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1005 #=cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1006 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1007 #sub translate {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1008 # my ($self) = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1009 # return ($self->translate_string($self->seq,@_));
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1010 #}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1011 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1012 #=head2 translate_string
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1013 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1014 # Title : translate_string
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1015 # Usage : $protein_seq = $obj->translate_string("attcgtgttgatcgatta");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1016 # Function: Like translate, but can be used to translate subsequences after
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1017 # having retrieved them as string.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1018 # Args : 1st argument is a string. Optional following arguments: like in
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1019 # the translate method
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1020 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1021 #=cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1022 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1023 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1024 #sub translate_string {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1025 # my($self) = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1026 # my($seq) = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1027 # my($stop, $unknown, $frame, $tableid) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1028 # my($i, $len, $output) = (0,0,'');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1029 # my($codon) = "";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1030 # my $aa;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1031 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1032 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1033 # ## User can pass in symbol for stop and unknown codons
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1034 # unless(defined($stop) and $stop ne '') { $stop = "*"; }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1035 # unless(defined($unknown) and $unknown ne '') { $unknown = "X"; }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1036 # unless(defined($frame) and $frame ne '') { $frame = 0; }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1037 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1038 # ## the codon table ID
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1039 # if ($self->translation_table) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1040 # $tableid = $self->translation_table;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1041 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1042 # unless(defined($tableid) and $tableid ne '') { $tableid = 1; }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1043 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1044 # ##Error if monomer is "Amino"
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1045 # $self->warn("Can't translate an amino acid sequence.")
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1046 # if (defined $self->alphabet && $self->alphabet eq 'protein');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1047 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1048 # ##Error if frame is not 0, 1 or 2
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1049 # $self->warn("Valid values for frame are 0, 1, 2, not [$frame].")
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1050 # unless ($frame == 0 or $frame == 1 or $frame == 2);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1051 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1052 # #thows a warning if ID is invalid
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1053 # my $codonTable = Bio::Tools::CodonTable->new( -id => $tableid);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1054 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1055 # # deal with frame offset.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1056 # if( $frame ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1057 # $seq = substr ($seq,$frame);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1058 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1059 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1060 # for $codon ( grep { CORE::length == 3 } split(/(.{3})/, $seq) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1061 # my $aa = $codonTable->translate($codon);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1062 # if ($aa eq '*') {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1063 # $output .= $stop;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1064 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1065 # elsif ($aa eq 'X') {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1066 # $output .= $unknown;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1067 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1068 # else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1069 # $output .= $aa ;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1070 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1071 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1072 # #if( substr($output,-1,1) eq $stop ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1073 # # chop $output;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1074 # #}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1075 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1076 # return ($output);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1077 #}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1078
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1079 =head2 gene
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1080
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1081 Title : gene
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1082 Usage : my $gene=$obj->gene;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1083 Function: Gets or sets the reference to the LiveSeq::Gene object.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1084 Objects that are features of a LiveSeq Gene will have this
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1085 attribute set automatically.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1086
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1087 Returns : reference to an object of class Gene
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1088 Note : if Gene object is not set, this method will return 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1089 Args : none or reference to object of class Bio::LiveSeq::Gene
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1090
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1091 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1092
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1093 sub gene {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1094 my ($self,$value) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1095 if (defined $value) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1096 $self->{'gene'} = $value;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1097 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1098 unless (exists $self->{'gene'}) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1099 return (0);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1100 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1101 return $self->{'gene'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1102 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1103 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1104
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1105 =head2 obj_valid
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1106
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1107 Title : obj_valid
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1108 Usage : if ($obj->obj_valid) {do something;}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1109 Function: Checks if start and end labels are still valid for the ojbect,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1110 i.e. tests if the LiveSeq object is still valid
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1111 Returns : boolean
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1112 Args : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1113
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1114 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1115
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1116 sub obj_valid {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1117 my $self=shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1118 unless (($self->{'seq'}->valid($self->start()))&&($self->{'seq'}->valid($self->end()))) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1119 return (0);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1120 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1121 return (1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1122 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1123
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1124 =head2 name
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1125
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1126 Title : name
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1127 Usage : $name = $obj->name;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1128 : $name = $obj->name("ABCD");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1129 Function: Returns or sets the name of the object.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1130 If there is no name, it will return "unknown";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1131 Returns : A string
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1132 Args : None
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1133
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1134 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1135
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1136 sub name {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1137 my ($self,$value) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1138 if (defined $value) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1139 $self->{'name'} = $value;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1140 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1141 unless (exists $self->{'name'}) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1142 return "unknown";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1143 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1144 return $self->{'name'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1145 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1146 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1147
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1148 =head2 desc
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1149
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1150 Title : desc
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1151 Usage : $desc = $obj->desc;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1152 : $desc = $obj->desc("ABCD");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1153 Function: Returns or sets the description of the object.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1154 If there is no description, it will return "unknown";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1155 Returns : A string
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1156 Args : None
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1157
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1158 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1159
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1160 sub desc {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1161 my ($self,$value) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1162 if (defined $value) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1163 $self->{'desc'} = $value;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1164 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1165 unless (exists $self->{'desc'}) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1166 return "unknown";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1167 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1168 return $self->{'desc'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1169 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1170 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1171
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1172 =head2 source
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1173
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1174 Title : source
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1175 Usage : $name = $obj->source;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1176 : $name = $obj->source("Homo sapiens");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1177 Function: Returns or sets the organism that is source of the object.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1178 If there is no source, it will return "unknown";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1179 Returns : A string
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1180 Args : None
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1181
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1182 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1183
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1184 sub source {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1185 my ($self,$value) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1186 if (defined $value) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1187 $self->{'source'} = $value;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1188 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1189 unless (exists $self->{'source'}) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1190 return "unknown";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1191 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1192 return $self->{'source'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1193 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1194 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1195
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1196 sub delete_Obj {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1197 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1198 my @values= values %{$self};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1199 my @keys= keys %{$self};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1200
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1201 foreach my $key ( @keys ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1202 delete $self->{$key};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1203 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1204 foreach my $value ( @values ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1205 if (index(ref($value),"LiveSeq") != -1) { # object case
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1206 eval {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1207 # delete $self->{$value};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1208 $value->delete_Obj;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1209 };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1210 } elsif (index(ref($value),"ARRAY") != -1) { # array case
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1211 my @array=@{$value};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1212 my $element;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1213 foreach $element (@array) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1214 eval {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1215 $element->delete_Obj;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1216 };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1217 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1218 } elsif (index(ref($value),"HASH") != -1) { # object case
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1219 my %hash=%{$value};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1220 my $element;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1221 foreach $element (%hash) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1222 eval {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1223 $element->delete_Obj;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1224 };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1225 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1226 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1227 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1228 return(1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1229 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1230
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1231 1;