comparison variant_effect_predictor/Bio/Map/SimpleMap.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:1f6dce3d34e0
1 # $Id: SimpleMap.pm,v 1.8 2002/10/22 07:45:16 lapp Exp $
2 #
3 # BioPerl module for Bio::Map::SimpleMap
4 #
5 # Cared for by Jason Stajich <jason@bioperl.org>
6 #
7 # Copyright Jason Stajich
8 #
9 # You may distribute this module under the same terms as perl itself
10
11 # POD documentation - main docs before the code
12
13 =head1 NAME
14
15 Bio::Map::SimpleMap - A MapI implementation handling the basics of a Map
16
17 =head1 SYNOPSIS
18
19 use Bio::Map::SimpleMap;
20 my $map = new Bio::Map::SimpleMap(-name => 'genethon',
21 -type => 'Genetic',
22 -units=> 'cM',
23 -species => $human);
24 foreach my $marker ( @markers ) { # get a list of markers somewhere
25 $map->add_element($marker);
26 }
27
28 =head1 DESCRIPTION
29
30 This is the basic implementation of a Bio::Map::MapI. It handles the
31 essential storage of name, species, type, and units as well as in
32 memory representation of the elements of a map.
33
34 Subclasses might need to redefine or hardcode type(), length() and
35 units().
36
37 =head1 FEEDBACK
38
39 =head2 Mailing Lists
40
41 User feedback is an integral part of the evolution of this and other
42 Bioperl modules. Send your comments and suggestions preferably to
43 the Bioperl mailing list. Your participation is much appreciated.
44
45 bioperl-l@bioperl.org - General discussion
46 http://bioperl.org/MailList.shtml - About the mailing lists
47
48 =head2 Reporting Bugs
49
50 Report bugs to the Bioperl bug tracking system to help us keep track
51 of the bugs and their resolution. Bug reports can be submitted via
52 email or the web:
53
54 bioperl-bugs@bioperl.org
55 http://bugzilla.bioperl.org/
56
57 =head1 AUTHOR - Jason Stajich
58
59 Email jason@bioperl.org
60
61 =head1 CONTRIBUTORS
62
63 Heikki Lehvaslaiho heikki@ebi.ac.uk
64 Lincoln Stein lstein@cshl.org
65
66 =head1 APPENDIX
67
68 The rest of the documentation details each of the object methods.
69 Internal methods are usually preceded with a _
70
71 =cut
72
73
74 # Let the code begin...
75
76
77 package Bio::Map::SimpleMap;
78 use vars qw(@ISA $MAPCOUNT);
79 use strict;
80
81 # Object preamble - inherits from Bio::Root::Root
82
83 use Bio::Root::Root;
84 use Bio::Map::MapI;
85
86 @ISA = qw(Bio::Root::Root Bio::Map::MapI);
87 BEGIN { $MAPCOUNT = 1; }
88
89 =head2 new
90
91 Title : new
92 Usage : my $obj = new Bio::Map::SimpleMap();
93 Function: Builds a new Bio::Map::SimpleMap object
94 Returns : Bio::Map::SimpleMap
95 Args : -name => name of map (string)
96 -species => species for this map (Bio::Species) [optional]
97 -units => map units (string)
98 -elements=> elements to initialize with
99 (arrayref of Bio::Map::MappableI objects) [optional]
100
101 -uid => Unique Id
102 =cut
103
104 sub new {
105 my($class,@args) = @_;
106
107 my $self = $class->SUPER::new(@args);
108
109 $self->{'_elements'} = [];
110 $self->{'_name'} = '';
111 $self->{'_species'} = '';
112 $self->{'_units'} = '';
113 $self->{'_type'} = '';
114 $self->{'_uid'} = $MAPCOUNT++;
115 my ($name, $type,$species, $units,
116 $elements,$uid) = $self->_rearrange([qw(NAME TYPE
117 SPECIES UNITS
118 ELEMENTS UID)], @args);
119 defined $name && $self->name($name);
120 defined $species && $self->species($species);
121 defined $units && $self->units($units);
122 defined $type && $self->type($type);
123 defined $uid && $self->unique_id($uid);
124
125 if( $elements && ref($elements) =~ /array/ ) {
126 foreach my $item ( @$elements ) {
127 $self->add_element($item);
128 }
129 }
130 return $self;
131 }
132
133 =head2 species
134
135 Title : species
136 Usage : my $species = $map->species;
137 Function: Get/Set Species for a map
138 Returns : Bio::Species object or string
139 Args : (optional) Bio::Species or string
140
141 =cut
142
143 sub species{
144 my ($self,$value) = @_;
145 if( defined $value ) {
146 $self->{'_species'} = $value;
147 }
148 return $self->{'_species'};
149 }
150
151 =head2 units
152
153 Title : units
154 Usage : $map->units('cM');
155 Function: Get/Set units for a map
156 Returns : units for a map
157 Args : units for a map (string)
158
159 =cut
160
161 sub units{
162 my ($self,$value) = @_;
163 if( defined $value ) {
164 $self->{'_units'} = $value;
165 }
166 return $self->{'_units'};
167 }
168
169 =head2 type
170
171 Title : type
172 Usage : my $type = $map->type
173 Function: Get/Set Map type
174 Returns : String coding map type
175 Args : (optional) string
176
177 =cut
178
179 sub type {
180 my ($self,$value) = @_;
181 # this may be hardcoded/overriden by subclasses
182
183 if( defined $value ) {
184 $self->{'_type'} = $value;
185 }
186 return $self->{'_type'};
187 }
188
189
190 =head2 name
191
192 Title : name
193 Usage : my $name = $map->name
194 Function: Get/Set Map name
195 Returns : Map name
196 Args : (optional) string
197
198 =cut
199
200 sub name {
201 my ($self,$value) = @_;
202 if( defined $value ) {
203 $self->{'_name'} = $value;
204 }
205 return $self->{'_name'};
206 }
207
208 =head2 length
209
210 Title : length
211 Usage : my $length = $map->length();
212 Function: Retrieves the length of the map,
213 It is possible for the length to be unknown
214 for maps such as Restriction Enzyme, will return undef
215 in that case
216 Returns : integer representing length of map in current units
217 will return undef if length is not calculateable
218 Args : none
219
220 =cut
221
222 sub length {
223 my ($self) = @_;
224 my ($len ) = 0;
225
226 foreach my $marker ($self->each_element) {
227 $len = $marker->position->numeric if $marker->position->numeric > $len;
228 }
229 return $len;
230 }
231
232
233 =head2 unique_id
234
235 Title : unique_id
236 Usage : my $id = $map->unique_id;
237 Function: Get/Set the unique ID for this map
238 Returns : a unique identifier
239 Args : [optional] new identifier to set
240
241 =cut
242
243 sub unique_id {
244 my ($self,$id) = @_;
245 if( defined $id ) {
246 $self->{'_uid'} = $id;
247 }
248 return $self->{'_uid'};
249 }
250
251
252 =head2 add_element
253
254 Title : add_element
255 Usage : $map->add_element($marker)
256 Function: Add a Bio::Map::MappableI object to the Map
257 Returns : none
258 Args : Bio::Map::MappableI object
259
260 =cut
261
262 sub add_element{
263 my ($self,$mapelement) = @_;
264 return unless ( defined $mapelement);
265
266 $self->throw("This is not a Bio::Map::MarkerI object but a [$self]")
267 unless $mapelement->isa('Bio::Map::MarkerI');
268
269 $mapelement->map($self); # tell the marker its default map
270
271 push @{$self->{'_elements'}}, $mapelement;
272
273 }
274
275 =head2 each_element
276
277 Title : each_element
278 Usage : my @elements = $map->each_element;
279 Function: Retrieves all the elements in a map
280 unordered
281 Returns : Array of Bio::Map::MappableI objects
282 Args : none
283
284
285 =cut
286
287 sub each_element{
288 my ($self) = @_;
289 return @{$self->{'_elements'}};
290 }
291
292 1;