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

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