annotate variant_effect_predictor/Bio/Map/Marker.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 # BioPerl module for Bio::Map::Marker
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # Cared for by Chad Matsalla <bioinformatics1@dieselwurks.com>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 # Copyright Chad Matsalla
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 # You may distribute this module under the same terms as perl itself
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 # POD documentation - main docs before the code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 Bio::Map::Marker - An central map object representing a generic marker
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 that can have multiple location in several maps.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18 # get map objects somehow
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 # a marker with complex localisation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 $o_usat = new Bio::Map::Marker (-name=>'Chad Super Marker 2',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 -positions => [ [$map1, $position1],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 [$map1, $position2]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 ] );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 # The markers deal with Bio::Map::Position objects which can also
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 # be explicitely created and passed on to markers as an array ref:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 $o_usat2 = new Bio::Map::Marker (-name=>'Chad Super Marker 3',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 -positions => [ $pos1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 $pos2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 ] );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 # a marker with unique position in a map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 $marker1 = new Bio::Map::Marker (-name=>'hypervariable1',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 -map => $map1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 -position => 100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 # an other way of creating a marker with unique position in a map:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 $marker2 = new Bio::Map::Marker (-name=>'hypervariable2');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 $map1->add_marker($marker2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 $marker2->position(100);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 # position method is a short cut for get/set'ing unigue positions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 # which overwrites previous values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 # to place a marker to other maps or to have multiple positions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 # for a map within the same map use add_position()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 $marker2->add_position(200); # new position in the same map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 $marker2->add_position($map2,200); # new map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 # setting a map() in a marker or adding a marker into a map are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 # identical mathods. Both set the bidirectional connection which is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 # used by the marker to remember its latest, default map.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 # Regardes of how marker positions are created, they are stored and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 # returned as Bio::Map::PositionI objects:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 # unique position
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 print $marker1->position->value, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 # several positions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 foreach $pos ($marker2->each_position($map1)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 print $pos->value, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 See L<Bio::Map::Position> and L<Bio::Map::PositionI> for more information.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 This object handles the notion of a generic marker. This marker will
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 have a name and a position in a map.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 This object is intended to be used by a marker parser like Mapmaker.pm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 and then blessed into the proper type of marker (ie Microsatellite) by
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 the calling script.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 =head2 Design principles
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 A Marker is a central object in Bio::Map name space. A Map is a holder
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 class for objects. A Marker has a Position in a Map. A Marker can be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 compared to an other Markers using boolean methods. Positions can have
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 non-numeric values or other methods to store the locations, so they
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 have a method numeric() which does the conversion.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 A Marker has a convinience method position() which is able to create
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 Positions of required class from scalars by calling method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 get_position_object().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 For more complex situations, a Marker can have multiple positions in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 multiple Maps. It is therefore possible to extract Positions (all or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 belonging to certain Map) and compare Markers to them. It is up to the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 programmer to make sure position values and Maps they belong to can be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 sensibly compared.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 User feedback is an integral part of the evolution of this and other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 Bioperl modules. Send your comments and suggestions preferably to the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 Bioperl mailing list. Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 http://bioperl.org/MailList.shtml - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 Report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 of the bugs and their resolution. Bug reports can be submitted via
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 email or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 bioperl-bugs@bioperl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 =head1 AUTHOR - Chad Matsalla
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 Email bioinformatics1@dieselwurks.com
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 =head1 CONTRIBUTORS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 Heikki Lehvaslaiho heikki@ebi.ac.uk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 Lincoln Stein lstein@cshl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 Jason Stajich jason@bioperl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 The rest of the documentation details each of the object methods.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 package Bio::Map::Marker;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 use Bio::Root::Root;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 use Bio::Map::MarkerI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 use Bio::Map::Position;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 @ISA = qw(Bio::Root::Root Bio::Map::MarkerI);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 Title : new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 Usage : $o_marker = new Bio::Map::Marker( -name => 'Whizzy marker',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 -position => $position);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 Function: Builds a new Bio::Map::Marker object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 Returns : Bio::Map::Marker
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 -name => name of this microsatellite
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 [optional], string,default 'Unknown'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 -positions => map position for this marker, [optional]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 Bio::Map::PositionI-inherited obj, no default)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 my ($class,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 my $self = $class->SUPER::new(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 $self->{'_positions'} = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 my ($name, $map, $position, $positions) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 $self->_rearrange([qw(NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 MAP
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 POSITION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 POSITIONS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 )], @args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 if ($name) { $self->name($name); }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 else {$self->name('Unnamed marker'); }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 $position && $self->position($position);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 $positions && $self->positions($positions);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 $map && $self->map($map);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 =head2 name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 Title : name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 Usage : $o_usat->name($new_name) _or_
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 my $name = $o_usat->name()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 Function: Get/Set the name for this Microsatellite
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 Returns : A scalar representing the current name of this marker
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 Args : If provided, the current name of this marker
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 will be set to $new_name.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 sub name {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 my ($self,$name) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 my $last = $self->{'_name'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 if ($name) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 $self->{'_name'} = $name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 return $last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 =head2 map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 Title : map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 Usage : my $mymap = $marker->map();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 Function: Get/Set the default map for the marker.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 This is set by L<Bio::Map::CytoMap::add_element> method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 Returns : L<Bio::Map::MapI>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 Args : [optional] new L<Bio::Map::MapI>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 sub map {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 my ($self,$map) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 if( defined $map ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 $self->thow('This is [$map], not Bio::Map::MapI object')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 unless $map->isa('Bio::Map::MapI');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 $self->{'_default_map'} = $map;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 return $self->{'_default_map'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 =head2 get_position_object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 Title : get_position_class
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 Usage : my $pos = $marker->get_position_object();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 Function: To get an object of the default Position class
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 for this Marker. Subclasses should redefine this method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 The Position needs to be Bio::Map::PositionI.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 Returns : Bio::Map::Position
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 See L<Bio::Map::Position> and L<Bio::Map::PositionI> for more information.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 sub get_position_object {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 return new Bio::Map::Position();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 =head2 position
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 Title : position
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 Usage : $position = $mappable->position($map); OR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 $mappable->position($position); # $position can be Bio::Map::PositionI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 $mappable->position(100); # or scalar if the marker has a default map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 $mappable->position($map, 100); # if not give explicit $map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 Function: Get/Set the Bio::Map::PositionI for a mappable element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 in a specific Map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 Adds the marker to a map automatically if Map is given.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 Altenaitvely, you can add the merker to the map first
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 (L<Bio::Map::Map::add_element>) to set the default map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 Returns : Bio::Map::PositionI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 Args : $position - Bio::Map::PositionI # Position we want to set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 OR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 $map - Bio::Map::MapI AND
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 scalar
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 OR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 scalar, but only if the marker has been added to a map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 sub position {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 my ($self, $pos, $secondary_pos) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 my ($map);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 POS: {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 if ($pos) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 if (ref($pos) eq 'SCALAR' || ref($pos) eq '') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 $map = $self->map;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 elsif (ref($pos) eq 'ARRAY') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 $map = $pos->[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 $pos = $pos->[1];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 elsif ($pos->isa('Bio::Map::PositionI')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 $pos->marker($self);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 $self->purge_positions;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 $self->add_position($pos);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 $map = $pos->map;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 $map->add_element($self) unless defined($self->map) && $self->map eq $map;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 last POS;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 elsif ($pos->isa('Bio::Map::MapI')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 $map = $pos;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 $pos = $secondary_pos;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 $map = $self->map;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 $self->throw("You need to add a marker to a map before ".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 "you can set positions without explicit map!" )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 unless $map;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 $self->throw("Position better be scalar, not [$pos=". ref($pos) ."]")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 unless ref($pos) eq 'SCALAR' || ref($pos) eq '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 my $newpos = $self->get_position_object;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 $newpos->map($map);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 $newpos->value($pos);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 $newpos->marker($self);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 $map->add_element($self) unless defined($self->map) && $self->map eq $map;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 $self->purge_positions;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 $self->add_position($newpos)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 my @array = $self->each_position();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 $self->warn('More than one value is associated with this position')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 if scalar @array > 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 return $array[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 =head2 add_position
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 Title : add_position
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 Usage : $position->add_position($position)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 Function: Add the Position to the Marker container.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 If you are using this method, you need to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 add the Marker to the Map yourself
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 Returns : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 Args : Position - Reference to Bio::Map::PositionI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 sub add_position{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 my ($self, $pos) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 $self->throw("Must give a Position") unless defined $pos;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 $self->throw("Must give a Bio::Map::PositionI, not [". ref($pos) ."]")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 unless $pos->isa('Bio::Map::PositionI');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 my $map = $pos->map;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 $map->add_element($self) unless defined($self->map) && $self->map eq $map;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 push @{$self->{'_positions'}}, $pos;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 =head2 positions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 Title : positions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 Usage : $mappable->positions([$pos1, $pos2, $pos3]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 Function: Add multiple Bio::Map::PositionI for a mappable element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 in a Map.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 Returns : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 Args : array ref of $map/value tuples or array ref of Positions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 sub positions {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 my ($self, $arrayref) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 my ($map);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 $self->throw_not_implemented();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 =head2 each_position
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 Title : each_position
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 Usage : my @positions = $position->each_position('mapname');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 Function: Retrieve a list of Positions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 Returns : Array of L<Bio::Map::PositionI>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 sub each_position {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 my ($self,$mapname) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 $self->warn("Retrieving positions in a named map only is ".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 "not implemented. Getting all.") if $mapname;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 return @{$self->{'_positions'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 =head2 purge_positions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 Title : purge_positions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 Usage : $marker->purge_positions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 Function: Remove all the position values stored for a Marker
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 Returns : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 Args : [optional] only purge values for a given map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 sub purge_positions{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 my ($self, $map) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 $self->warn("Retrieving positions in a named map only, not implemented ") if $map;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 $self->{'_positions'} = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 =head2 known_maps
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 Title : known_maps
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 Usage : my @maps = $marker->known_maps
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 Function: Returns the list of maps that this position has values for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 Returns : list of Bio::Map::MapI unique ids
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 sub known_maps{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 my %hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 foreach my $pos ($self->each_position) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 $hash{$pos->map->unique_id} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 return keys %hash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 =head2 in_map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 Title : in_map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 Usage : if ( $position->in_map($map) ) {}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 Function: Tests if a position has values in a specific map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 Returns : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 Args : a map unique id OR Bio::Map::MapI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 sub in_map{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 my ($self,$map) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 $self->throw("Need an argument") unless $map;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 if (ref($map) && $map->isa('Bio::Map::MapI')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 foreach my $pos ($self->each_position) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 return 1 if $pos->map eq $map;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 } else { # assuming a scalar
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 foreach my $pos ($self->each_position) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 return 1 if $pos->map->unique_id eq $map;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 =head2 Comparison methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 =head2 tuple
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 Title : tuple
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 Usage : ($me, $you) = $self->_tuple($compare)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 Function: Utility ethod to extract numbers and test for missing values.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 Returns : tuple values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 Args : Bio::Map::MappableI or Bio::Map::PositionI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 sub tuple {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 my ($self,$compare) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 my ($me, $you) = (-1, -1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 $self->warn("Trying to compare [". $self->name. "] to nothing.") &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 return ($me, $you) unless defined $compare;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 $self->warn("[". $self->name. "] has no position.") &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 return ($me, $you) unless $self->position;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 $me = $self->position->numeric;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 if( $compare->isa('Bio::Map::MappableI') ){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 $self->warn("[". $compare->name. "] has no position.") &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 return ($me, $you) unless $compare->position;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 $you = $compare->position->numeric;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 return ($me, $you);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 } elsif( $compare->isa('Bio::Map::PositionI') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 $you = $compare->numeric;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 return ($me, $you);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 $self->warn("Can only run equals with Bio::Map::MappableI or ".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 "Bio::Map::PositionI not [$compare]");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 return ($me, $you);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 =head2 equals
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 Title : equals
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 Usage : if( $mappable->equals($mapable2)) ...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 Function: Test if a position is equal to another position
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 Returns : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 Args : Bio::Map::MappableI or Bio::Map::PositionI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 sub equals {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 my ($self,$compare) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 my ($me, $you) = $self->tuple($compare);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 return 0 if $me == -1 or $you == -1 ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 return $me == $you;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 =head2 less_than
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 Title : less_than
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 Usage : if( $mappable->less_than($m2) ) ...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 Function: Tests if a position is less than another position
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 Returns : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 Args : Bio::Map::MappableI or Bio::Map::PositionI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 sub less_than {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 my ($self,$compare) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 my ($me, $you) = $self->tuple($compare);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 return 0 if $me == -1 or $you == -1 ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 return $me < $you;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 =head2 greater_than
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 Title : greater_than
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 Usage : if( $mappable->greater_than($m2) ) ...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 Function: Tests if position is greater than another position
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 Returns : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 Args : Bio::Map::MappableI or Bio::Map::PositionI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 sub greater_than {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 my ($self,$compare) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 my ($me, $you) = $self->tuple($compare);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 return 0 if $me == -1 or $you == -1 ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 return $me > $you;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 1;