comparison variant_effect_predictor/Bio/Map/Microsatellite.pm @ 0:2bc9b66ada89 draft default tip

Uploaded
author mahtabm
date Thu, 11 Apr 2013 06:29:17 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:2bc9b66ada89
1 # BioPerl module for Bio::Map::Microsatellite
2 #
3 # Cared for by Chad Matsalla <bioinformatics1@dieselwurks.com>
4 #
5 # Copyright Chad Matsalla
6 #
7 # You may distribute this module under the same terms as perl itself
8
9 # POD documentation - main docs before the code
10
11 =head1 NAME
12
13 Bio::Map::Microsatellite - An object representing a Microsatellite marker.
14
15 =head1 SYNOPSIS
16
17 $o_usat = new Bio::Map::Microsatellite
18 (-name=>'Chad Super Marker 2',
19 -sequence => 'gctgactgatcatatatatatatatatatatatatatatatcgcgatcgtga',
20 -motif => 'at',
21 -repeats => 15,
22 -repeat_start_position => 11
23 );
24
25 $sequence_before_usat = $o_usat->get_leading_flank();
26 $sequence_after_usat = $o_usat->get_trailing_flank();
27
28
29 =head1 DESCRIPTION
30
31 This object handles the notion of an Microsatellite. This microsatellite can
32 be placed on a (linear) Map or used on its own. If this Microsatellites
33 will be used in a mapping context (it doesn't have to, you know) it can have
34 multiple positions in a map. For information about a Microsatellite's position
35 in a map one must query the associate PositionI object which is accessible
36 through the position() method.
37
38 =head1 FEEDBACK
39
40 =head2 Mailing Lists
41
42 User feedback is an integral part of the evolution of this and other
43 Bioperl modules. Send your comments and suggestions preferably to
44 the Bioperl mailing list. Your participation is much appreciated.
45
46 bioperl-l@bioperl.org - General discussion
47 http://bioperl.org/MailList.shtml - About the mailing lists
48
49 =head2 Reporting Bugs
50
51 Report bugs to the Bioperl bug tracking system to help us keep track
52 of the bugs and their resolution. Bug reports can be submitted via
53 email or the web:
54
55 bioperl-bugs@bioperl.org
56 http://bugzilla.bioperl.org/
57
58 =head1 AUTHOR - Chad Matsalla
59
60 Email bioinformatics1@dieselwurks.com
61
62 =head1 CONTRIBUTORS
63
64 Heikki Lehvaslaiho heikki@ebi.ac.uk
65 Lincoln Stein lstein@cshl.org
66 Jason Stajich jason@bioperl.org
67
68 =head1 APPENDIX
69
70 The rest of the documentation details each of the object methods.
71 Internal methods are usually preceded with a _
72
73 =cut
74
75 # Let the code begin...
76
77 package Bio::Map::Microsatellite;
78 use vars qw(@ISA);
79 use strict;
80 use Bio::Root::Root;
81 use Bio::Map::Marker;
82
83 @ISA = qw(Bio::Map::Marker);
84
85 =head2 new
86
87 Title : new
88 Usage : $o_usat =
89 Function: Builds a new Bio::Map::Microsatellite object
90 Returns : Bio::Map::Microsatellite
91 Args :
92 -name => name of this microsatellite (optional, string,
93 default 'Unknown microsatellite')
94 -positions => position(s) for this marker in maps[optional],
95 An array reference of tuples (array refs themselves)
96 Each tuple conatins a Bio::Map::MapI-inherited object and a
97 Bio::Map::PositionI-inherited obj, no default)
98 -sequence => the sequence of this microsatellite (optional,
99 scalar, no default)
100 -motif => the repeat motif of this microsatellite (optional,
101 scalar, no default)
102 -repeats => the number of motif repeats for this microsatellite
103 (optional, scalar, no default)
104 -repeat_start_position => the starting position of the
105 microsatellite in this sequence. The first base of the
106 sequence is position "1". (optional, scalar, no default)
107
108 Note : Creating a Bio::Map::Microsatellite object with no position
109 might be useful for microsatellite people wanting to embrace
110 and extend this module. <raising hand> Me! Me! Me!
111 - using repeat_start_position will trigger a mechinism to
112 calculate a value for repeat_end_position.
113
114
115 =cut
116
117 sub new {
118 my ($class,@args) = @_;
119 my $self = $class->SUPER::new(@args);
120 my ($map, $position, $sequence, $motif, $repeats, $start) =
121 $self->_rearrange([qw(MAP
122 POSITION
123 SEQUENCE
124 MOTIF
125 REPEATS
126 REPEAT_START_POSITION
127 )], @args);
128 if( ! $self->name ) {
129 $self->name('Unnamed microsatellite');
130 }
131 $map && $self->map($map);
132 $position && $self->position($position);
133 $sequence && $self->sequence($sequence);
134 $self->motif(defined $motif ? $motif : 'Unknown motif');
135 $repeats && $self->repeats($repeats);
136 $start && $self->repeat_start_position($start);
137 return $self;
138 }
139
140 =head2 Bio::Map::Marker methods
141
142 =cut
143
144 =head2 position
145
146 Title : position
147 Usage : my $position = $mappable->position($map); OR
148 $mappable->position($map,$position); OR
149 Function: Get/Set the Bio::Map::PositionI for a mappable element
150 in a specific Map
151 Returns : Bio::Map::PositionI
152 Args : $map =Bio::Map::MapI # Map we are talking about
153 $position = Bio::Map::PositionI # Position we want to set
154
155
156 =head2 name($new_name)
157
158 Title : name($new_name)
159 Usage : $o_usat->name($new_name) _or_
160 my $name = $o_usat->name()
161 Function: Get/Set the name for this Microsatellite
162 Returns : A scalar representing the current name of this Microsatellite
163 Args : If provided, the current name of this Microsatellite
164 will be set to $new_name.
165
166 =head2 motif($new_motif)
167
168 Title : motif($new_motif)
169 Usage : my $motif = $o_usat->motif($new_motif) _or_
170 my $motif = $o_usat->motif()
171 Function: Get/Set the repeat motif for this Microsatellite
172 Returns : A scalar representing the current repeat motif of this
173 Microsatellite.
174 Args : If provided, the current repeat motif of this Microsatellite
175 will be set to $new_motif.
176
177 =cut
178
179 sub motif {
180 my ($self,$motif) = @_;
181 if ($motif) {
182 $self->{'_motif'} = $motif;
183 }
184 return $self->{'_motif'};
185 }
186
187 =head2 sequence($new_sequence)
188
189 Title : sequence($new_sequence)
190 Usage : my $sequence = $o_usat->sequence($new_sequence) _or_
191 my $sequence = $o_usat->sequence()
192 Function: Get/Set the sequence for this Microsatellite
193 Returns : A scalar representing the current sequence of this
194 Microsatellite.
195 Args : If provided, the current sequence of this Microsatellite
196 will be set to $new_sequence.
197
198 =cut
199
200 sub sequence {
201 my ($self,$sequence) = @_;
202 if ($sequence) {
203 $self->{'_sequence'} = $sequence;
204 }
205 return $self->{'_sequence'};
206 }
207
208 =head2 repeats($new_repeats)
209
210 Title : repeats($new_repeats)
211 Usage : my $repeats = $o_usat->repeats($new_repeats) _or_
212 my $repeats = $o_usat->repeats()
213 Function: Get/Set the repeat repeats for this Microsatellite
214 Returns : A scalar representing the current number of repeats of this
215 Microsatellite.
216 Args : If provided, the current number of repeats of this
217 Microsatellite will be set to $new_repeats.
218
219 =cut
220
221 sub repeats {
222 my ($self,$repeats) = @_;
223 if ($repeats) {
224 $self->{'_repeats'} = $repeats;
225 }
226 return $self->{'_repeats'};
227 }
228
229 =head2 repeat_start_position($new_repeat_start_position)
230
231 Title : repeat_start_position($new_repeat_start_position)
232 Usage : my $repeat_start_position =
233 $o_usat->repeat_start_position($new_repeat_start_position) _or_
234 my $repeat_start_position = $o_usat->repeat_start_position()
235 Function: Get/Set the repeat repeat_start_position for this
236 Microsatellite
237 Returns : A scalar representing the repeat start position for this
238 Microsatellite.
239 Args : If provided, the current repeat start position of this
240 Microsatellite will be set to $new_repeat_start_position.
241 This method will also try to set the repeat end position. This
242 depends on having information for the motif and the number of
243 repeats. If you want to use methods like get_trailing_flank or
244 get_leading flank, be careful to include the right information.
245
246 =cut
247
248 sub repeat_start_position {
249 my ($self,$repeat_start_position) = @_;
250 if ($repeat_start_position) {
251 $self->{'_repeat_start_position'} = $repeat_start_position;
252 $self->repeat_end_position("set");
253 }
254 return $self->{'_repeat_start_position'};
255 }
256
257 =head2 repeat_end_position($value)
258
259 Title : repeat_end_position($set)
260 Usage : $new_repeat_end_position =
261 $o_usat->repeat_end_position("set"); _or_
262 $new_repeat_end_position =
263 $o_usat->repeat_end_position($value); _or_
264 $current_repeat_end_position = $o_usat->repeat_end_position();
265 Function: get/set the end position of the repeat in this sequence
266 Returns : A scalar representing the base index of the end of the
267 repeat in this Microsatellite. The first base in the sequence
268 is base 1.
269 Args : A scalar representing a value, the string "set", or no
270 argument (see Notes).
271 Notes : If you do not provide an argument to this method, the current
272 end position of the repeat in this Microsatellite will be
273 returned (a scalar).
274 If you provide the string "set" to this method it will set the
275 end position based on the start position, the length of the
276 motif, and the nuimber of repeats.
277 If you specify a value the current end position of the repeat
278 will be set to that value. This is a really bad idea. Don't do
279 it.
280
281 =cut
282
283 #'
284 sub repeat_end_position {
285 my ($self,$caller) = @_;
286 if( defined $caller ) {
287 if ($caller eq "set") {
288 $self->{'_repeat_end_position'} =
289 $self->{'_repeat_start_position'} +
290 (length($self->motif()) * $self->repeats());
291 }
292 elsif ($caller) {
293 $self->{'_repeat_end_position'} = $caller;
294 }
295 }
296 return $self->{'_repeat_end_position'};
297 }
298
299 =head2 equals
300
301 Title : equals
302 Usage : if( $mappable->equals($mapable2)) ...
303 Function: Test if a position is equal to another position
304 Returns : boolean
305 Args : Bio::Map::MappableI
306
307 =cut
308
309 sub equals {
310 my ($self,@args) = @_;
311 $self->warn("equals is not yet implemented in ".
312 ref($self)." yet. Check back real soon!");
313 }
314
315 =head2 less_than
316
317 Title : less_than
318 Usage : if( $mappable->less_than($m2) ) ...
319 Function: Tests if a position is less than another position
320 Returns : boolean
321 Args : Bio::Map::MappableI
322
323 =cut
324
325 sub less_than {
326 my ($self,@args) = @_;
327 $self->warn("less_then is not yet implemented in ".
328 ref($self)." yet. Check back real soon!");
329 }
330
331 =head2 greater_than
332
333 Title : greater_than
334 Usage : if( $mappable->greater_than($m2) ) ...
335 Function: Tests if position is greater than another position
336 Returns : boolean
337 Args : Bio::Map::MappableI
338
339 =cut
340
341 sub greater_than {
342 my ($self,@args) = @_;
343 $self->warn("greater_then is not yet implemented in ".
344 ref($self)." yet. Check back real soon!");
345 }
346
347 =head2 get_leading_flank()
348
349 Title : get_leading_flank()
350 Usage : $leading_sequence = $o_usat->get_leading_flank();
351 Returns : A scalar representing the sequence before the repeats in this
352 Microsatellite.
353 Args : None.
354
355 =cut
356
357 sub get_leading_flank {
358 my $self = shift;
359 return substr $self->sequence(),0,$self->repeat_start_position-1;
360
361 }
362
363 =head2 get_trailing_flank()
364
365 Title : get_trailing_flank()
366 Usage : $trailing_flank = $o_usat->get_trailing_flank();
367 Returns : A scalar representing the sequence after the repeats in this
368 Microsatellite.
369 Args : None.
370
371 =cut
372
373 sub get_trailing_flank {
374 my $self = shift;
375 return substr $self->sequence(),$self->repeat_end_position()-1;
376 }
377
378
379 1;
380
381