Mercurial > repos > mahtabm > ensembl
comparison variant_effect_predictor/Bio/Map/CytoMarker.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: CytoMarker.pm,v 1.3 2002/10/22 07:45:15 lapp Exp $ | |
| 2 # | |
| 3 # BioPerl module for Bio::Map::CytoMarker | |
| 4 # | |
| 5 # Cared for by Heikki Lehvaslaiho heikki@ebi.ac.uk | |
| 6 # | |
| 7 # Copyright Heikki Lehvaslaiho | |
| 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::CytoMarker - An object representing a marker. | |
| 16 | |
| 17 =head1 SYNOPSIS | |
| 18 | |
| 19 $o_usat = new Bio::Map::CytoMarker(-name=>'Chad Super Marker 2', | |
| 20 -position => $pos); | |
| 21 | |
| 22 =head1 DESCRIPTION | |
| 23 | |
| 24 This object handles markers with a positon in a cytogenetic map known. | |
| 25 This marker will have a name and a position. | |
| 26 | |
| 27 | |
| 28 =head1 FEEDBACK | |
| 29 | |
| 30 =head2 Mailing Lists | |
| 31 | |
| 32 User feedback is an integral part of the evolution of this and other | |
| 33 Bioperl modules. Send your comments and suggestions preferably to the | |
| 34 Bioperl mailing list. Your participation is much appreciated. | |
| 35 | |
| 36 bioperl-l@bioperl.org - General discussion | |
| 37 http://bioperl.org/MailList.shtml - About the mailing lists | |
| 38 | |
| 39 =head2 Reporting Bugs | |
| 40 | |
| 41 Report bugs to the Bioperl bug tracking system to help us keep track | |
| 42 of the bugs and their resolution. Bug reports can be submitted via | |
| 43 email or the web: | |
| 44 | |
| 45 bioperl-bugs@bioperl.org | |
| 46 http://bugzilla.bioperl.org/ | |
| 47 | |
| 48 =head1 AUTHOR - Heikki Lehvaslaiho | |
| 49 | |
| 50 Email heikki@ebi.ac.uk | |
| 51 | |
| 52 =head1 CONTRIBUTORS | |
| 53 | |
| 54 Chad Matsalla bioinformatics1@dieselwurks.com | |
| 55 Lincoln Stein lstein@cshl.org | |
| 56 Jason Stajich jason@bioperl.org | |
| 57 | |
| 58 =head1 APPENDIX | |
| 59 | |
| 60 The rest of the documentation details each of the object methods. | |
| 61 Internal methods are usually preceded with a _ | |
| 62 | |
| 63 =cut | |
| 64 | |
| 65 # Let the code begin... | |
| 66 | |
| 67 package Bio::Map::CytoMarker; | |
| 68 use vars qw(@ISA); | |
| 69 use strict; | |
| 70 use Bio::Map::Marker; | |
| 71 use Bio::Map::CytoPosition; | |
| 72 use Bio::RangeI; | |
| 73 | |
| 74 @ISA = qw(Bio::Map::Marker Bio::RangeI ); | |
| 75 | |
| 76 | |
| 77 =head2 Bio::Map::MarkerI methods | |
| 78 | |
| 79 =cut | |
| 80 | |
| 81 =head2 get_position_object | |
| 82 | |
| 83 Title : get_position_class | |
| 84 Usage : my $pos = $marker->get_position_object(); | |
| 85 Function: To get an object of the default Position class | |
| 86 for this Marker. Subclasses should redefine this method. | |
| 87 The Position needs to be L<Bio::Map::PositionI>. | |
| 88 Returns : L<Bio::Map::CytoPosition> | |
| 89 Args : none | |
| 90 | |
| 91 =cut | |
| 92 | |
| 93 sub get_position_object { | |
| 94 my ($self) = @_; | |
| 95 return new Bio::Map::CytoPosition(); | |
| 96 } | |
| 97 | |
| 98 | |
| 99 =head2 Comparison methods | |
| 100 | |
| 101 The numeric values for cutogeneic loctions go from the p tip of | |
| 102 chromosome 1, down to the q tip and similarly throgh consecutive | |
| 103 chromosomes, through X and end the the q tip of X. See | |
| 104 L<Bio::Map::CytoPosition::cytorange> for more details. | |
| 105 | |
| 106 The numeric values for cytogenetic positions are ranges of type | |
| 107 L<Bio::Range>, so MarkerI type of operators (equals, less_than, | |
| 108 greater_than) are not very meaningful, but they might be of some use | |
| 109 combined with L<Bio::RangeI> methods (overlaps, contains, equals, | |
| 110 intersection, union). equals(), present in both interfaces is treated | |
| 111 as a more precice RangeI method. | |
| 112 | |
| 113 CytoMarker has a method L<get_chr> which might turn out to be useful | |
| 114 in this context. | |
| 115 | |
| 116 The L<less_than> and L<greater_than> methods are implemented by | |
| 117 comparing the end values of the range, so you better first check that | |
| 118 markers do not overlap, or you get an opposite result than expected. | |
| 119 The numerical values are not metric, so avarages are not meaningful. | |
| 120 | |
| 121 Note: These methods always return a value. A false value (0) might | |
| 122 mean that you have not set the position! Check those warnings. | |
| 123 | |
| 124 =cut | |
| 125 | |
| 126 =head2 Bio::Map::MarkerI comparison methods | |
| 127 | |
| 128 =cut | |
| 129 | |
| 130 =head2 tuple | |
| 131 | |
| 132 Title : tuple | |
| 133 Usage : ($me, $you) = $self->_tuple($compare) | |
| 134 Function: Utility method to extract numbers and test for missing values. | |
| 135 Returns : two ranges or tuple of -1 | |
| 136 Args : Bio::Map::MappableI or Bio::Map::PositionI | |
| 137 | |
| 138 =cut | |
| 139 | |
| 140 =head2 less_than | |
| 141 | |
| 142 Title : less_than | |
| 143 Usage : if( $mappable->less_than($m2) ) ... | |
| 144 Function: Tests if a position is less than another position | |
| 145 Returns : boolean | |
| 146 Args : Bio::Map::MappableI or Bio::Map::PositionI | |
| 147 | |
| 148 =cut | |
| 149 | |
| 150 | |
| 151 sub less_than { | |
| 152 my ($self,$compare) = @_; | |
| 153 | |
| 154 my ($me, $you) = $self->tuple($compare); | |
| 155 return 0 if $me == -1 or $you == -1 ; | |
| 156 | |
| 157 $me = $me->end; | |
| 158 $you = $you->start; | |
| 159 | |
| 160 print STDERR "me=$me, you=$you\n" if $self->verbose > 0; | |
| 161 return $me < $you; | |
| 162 } | |
| 163 | |
| 164 =head2 greater_than | |
| 165 | |
| 166 Title : greater_than | |
| 167 Usage : if( $mappable->greater_than($m2) ) ... | |
| 168 Function: Tests if position is greater than another position | |
| 169 Returns : boolean | |
| 170 Args : Bio::Map::MappableI or Bio::Map::PositionI | |
| 171 | |
| 172 =cut | |
| 173 | |
| 174 | |
| 175 sub greater_than { | |
| 176 my ($self,$compare) = @_; | |
| 177 | |
| 178 my ($me, $you) = $self->tuple($compare); | |
| 179 return 0 if $me == -1 or $you == -1 ; | |
| 180 | |
| 181 $me = $me->start; | |
| 182 $you = $you->end; | |
| 183 print STDERR "me=$me, you=$you\n" if $self->verbose > 0; | |
| 184 return $me > $you; | |
| 185 } | |
| 186 | |
| 187 =head2 RangeI methods | |
| 188 | |
| 189 =cut | |
| 190 | |
| 191 | |
| 192 =head2 equals | |
| 193 | |
| 194 Title : equals | |
| 195 Usage : if( $mappable->equals($mapable2)) ... | |
| 196 Function: Test if a position is equal to another position | |
| 197 Returns : boolean | |
| 198 Args : Bio::Map::MappableI or Bio::Map::PositionI | |
| 199 | |
| 200 =cut | |
| 201 | |
| 202 sub equals { | |
| 203 my ($self,$compare) = @_; | |
| 204 | |
| 205 my ($me, $you) = $self->tuple($compare); | |
| 206 return 0 unless $me->isa('Bio::RangeI') and $you->isa('Bio::RangeI'); | |
| 207 | |
| 208 return $me->equals($you); | |
| 209 } | |
| 210 | |
| 211 =head2 overlaps | |
| 212 | |
| 213 Title : overlaps | |
| 214 Usage : if($r1->overlaps($r2)) { do stuff } | |
| 215 Function : tests if $r2 overlaps $r1 | |
| 216 Args : a range to test for overlap with | |
| 217 Returns : true if the ranges overlap, false otherwise | |
| 218 Inherited: Bio::RangeI | |
| 219 | |
| 220 =cut | |
| 221 | |
| 222 sub overlaps { | |
| 223 my ($self,$compare) = @_; | |
| 224 | |
| 225 my ($me, $you) = $self->tuple($compare); | |
| 226 return 0 unless $me->isa('Bio::RangeI') and $you->isa('Bio::RangeI'); | |
| 227 | |
| 228 return $me->overlaps($you); | |
| 229 } | |
| 230 | |
| 231 =head2 contains | |
| 232 | |
| 233 Title : contains | |
| 234 Usage : if($r1->contains($r2) { do stuff } | |
| 235 Function : tests wether $r1 totaly contains $r2 | |
| 236 Args : a range to test for being contained | |
| 237 Returns : true if the argument is totaly contained within this range | |
| 238 Inherited: Bio::RangeI | |
| 239 | |
| 240 =cut | |
| 241 | |
| 242 sub contains { | |
| 243 my ($self,$compare) = @_; | |
| 244 | |
| 245 my ($me, $you) = $self->tuple($compare); | |
| 246 return 0 unless $me->isa('Bio::RangeI') and $you->isa('Bio::RangeI'); | |
| 247 print STDERR "me=", $me->start. "-", $me->end, " ", | |
| 248 "you=", $you->start. "-", $you->end, "\n" | |
| 249 if $self->verbose > 0; | |
| 250 | |
| 251 return $me->contains($you); | |
| 252 } | |
| 253 | |
| 254 =head2 intersection | |
| 255 | |
| 256 Title : intersection | |
| 257 Usage : ($start, $stop, $strand) = $r1->intersection($r2) | |
| 258 Function : gives the range that is contained by both ranges | |
| 259 Args : a range to compare this one to | |
| 260 Returns : nothing if they do not overlap, or the range that they do overlap | |
| 261 Inherited: Bio::RangeI::intersection | |
| 262 | |
| 263 =cut | |
| 264 | |
| 265 sub intersection { | |
| 266 my ($self,$compare) = @_; | |
| 267 | |
| 268 my ($me, $you) = $self->tuple($compare); | |
| 269 return 0 unless $me->isa('Bio::RangeI') and $you->isa('Bio::RangeI'); | |
| 270 | |
| 271 return $me->intersection($you); | |
| 272 } | |
| 273 | |
| 274 =head2 union | |
| 275 | |
| 276 Title : union | |
| 277 Usage : ($start, $stop, $strand) = $r1->union($r2); | |
| 278 : ($start, $stop, $strand) = Bio::Range->union(@ranges); | |
| 279 Function : finds the minimal range that contains all of the ranges | |
| 280 Args : a range or list of ranges to find the union of | |
| 281 Returns : the range containing all of the ranges | |
| 282 Inherited: Bio::RangeI::union | |
| 283 | |
| 284 =cut | |
| 285 | |
| 286 sub union { | |
| 287 my ($self,$compare) = @_; | |
| 288 | |
| 289 my ($me, $you) = $self->tuple($compare); | |
| 290 return 0 unless $me->isa('Bio::RangeI') and $you->isa('Bio::RangeI'); | |
| 291 | |
| 292 return $me->union($you); | |
| 293 } | |
| 294 | |
| 295 | |
| 296 =head2 New methods | |
| 297 | |
| 298 =cut | |
| 299 | |
| 300 | |
| 301 =head2 get_chr | |
| 302 | |
| 303 Title : get_chr | |
| 304 Usage : my $mychr = $marker->get_chr(); | |
| 305 Function: Read only method for the chromosome string of the location. | |
| 306 A shotrcut to $marker->position->chr(). | |
| 307 Returns : chromosome value | |
| 308 Args : [optional] new chromosome value | |
| 309 | |
| 310 =cut | |
| 311 | |
| 312 | |
| 313 sub get_chr { | |
| 314 my ($self) = @_; | |
| 315 return undef unless $self->position; | |
| 316 return $self->position->chr; | |
| 317 } | |
| 318 | |
| 319 1; | |
| 320 |
