annotate variant_effect_predictor/Bio/Location/Fuzzy.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: Fuzzy.pm,v 1.24 2002/12/01 00:05:20 jason Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # BioPerl module for Bio::Location::Fuzzy
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 # Cared for by Jason Stajich <jason@bioperl.org>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 # Copyright Jason Stajich
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 # You may distribute this module under the same terms as perl itself
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::Location::Fuzzy - Implementation of a Location on a Sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 which has unclear start and/or end locations
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 use Bio::Location::Fuzzy;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 my $fuzzylocation = new Bio::Location::Fuzzy(-start => '<30',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 -end => 90,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 -location_type => '.');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 print "location string is ", $fuzzylocation->to_FTstring(), "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 print "location is of the type ", $fuzzylocation->location_type, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 This module contains the necessary methods for representing a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 Fuzzy Location, one that does not have clear start and/or end points.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 This will initially serve to handle features from Genbank/EMBL feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 tables that are written as 1^100 meaning between bases 1 and 100 or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 E<lt>100..300 meaning it starts somewhere before 100. Advanced
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 implementations of this interface may be able to handle the necessary
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 logic of overlaps/intersection/contains/union. It was constructed to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 handle fuzzy locations that can be represented in Genbank/EMBL.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 =head1 FEEDBACK
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 - Jason Stajich
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 Email jason@bioperl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 The rest of the documentation details each of the object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 methods. Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 package Bio::Location::Fuzzy;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 use vars qw(@ISA );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 use Bio::Location::FuzzyLocationI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 use Bio::Location::Atomic;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 @ISA = qw(Bio::Location::Atomic Bio::Location::FuzzyLocationI );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 BEGIN {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 use vars qw( %FUZZYCODES %FUZZYPOINTENCODE %FUZZYRANGEENCODE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 @LOCATIONCODESBSANE );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 @LOCATIONCODESBSANE = (undef, 'EXACT', 'WITHIN', 'BETWEEN',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 'BEFORE', 'AFTER');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 %FUZZYCODES = ( 'EXACT' => '..', # Position is 'exact
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 # Exact position is unknown, but is within the range specified, ((1.2)..100)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 'WITHIN' => '.',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 # 1^2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 'BETWEEN' => '^',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 # <100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 'BEFORE' => '<',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 # >10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 'AFTER' => '>');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 # The following regular expressions map to fuzzy location types. Every
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 # expression must match the complete encoded point string, and must
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 # contain two groups identifying min and max. Empty matches are automatic.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 # converted to undef, except for 'EXACT', for which max is set to equal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 # min.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 %FUZZYPOINTENCODE = (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 '\>(\d+)(.{0})' => 'AFTER',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 '\<(.{0})(\d+)' => 'BEFORE',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 '(\d+)' => 'EXACT',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 '(\d+)(.{0})\>' => 'AFTER',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 '(.{0})(\d+)\<' => 'BEFORE',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 '(\d+)\.(\d+)' => 'WITHIN',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 '(\d+)\^(\d+)' => 'BETWEEN',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 %FUZZYRANGEENCODE = ( '\.' => 'WITHIN',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 '\.\.' => 'EXACT',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 '\^' => 'BETWEEN' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 Title : new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 Usage : my $fuzzyloc = new Bio::Location::Fuzzy( @args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 Function:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 Returns :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 Args : -start => value for start (initialize by superclass)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 -end => value for end (initialize by superclass)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 -strand => value for strand (initialize by superclass)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 -location_type => either ('EXACT', 'WITHIN', 'BETWEEN') OR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 ( 1,2,3)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 -start_ext=> extension for start - defaults to 0,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 -start_fuz= fuzzy code for start can be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 ( 'EXACT', 'WITHIN', 'BETWEEN', 'BEFORE', 'AFTER') OR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 a value 1 - 5 corresponding to index+1 above
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 -end_ext=> extension for end - defaults to 0,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 -end_fuz= fuzzy code for end can be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 ( 'EXACT', 'WITHIN', 'BETWEEN', 'BEFORE', 'AFTER') OR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 a value 1 - 5 corresponding to index+1 above
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 my ($class, @args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 my $self = $class->SUPER::new(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 my ($location_type, $start_ext, $start_fuz, $end_ext, $end_fuz) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 $self->_rearrange([ qw(LOCATION_TYPE START_EXT START_FUZ
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 END_EXT END_FUZ )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 ], @args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 $location_type && $self->location_type($location_type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 $start_ext && $self->max_start($self->min_start + $start_ext);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 $end_ext && $self->max_end($self->min_end + $end_ext);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 $start_fuz && $self->start_pos_type($start_fuz);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 $end_fuz && $self->end_pos_type($end_fuz);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 =head2 location_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 Title : location_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 Usage : my $location_type = $location->location_type();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 Function: Get location type encoded as text
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 Returns : string ('EXACT', 'WITHIN', 'BETWEEN')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 sub location_type {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 if( defined $value || ! defined $self->{'_location_type'} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 $value = 'EXACT' unless defined $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 if(! defined $FUZZYCODES{$value}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 $value = uc($value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 if( $value =~ /\.\./ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 $value = 'EXACT';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 } elsif( $value =~ /^\.$/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 $value = 'WITHIN';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 } elsif( $value =~ /\^/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 $value = 'BETWEEN';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 $self->throw("Use Bio::Location::Simple for IN-BETWEEN locations [". $self->start. "] and [". $self->end. "]")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 if defined $self->start && defined $self->end && ($self->end - 1 == $self->start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 } elsif( $value ne 'EXACT' && $value ne 'WITHIN' &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 $value ne 'BETWEEN' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 $self->throw("Did not specify a valid location type");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 $self->{'_location_type'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 return $self->{'_location_type'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 =head1 LocationI methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 =head2 length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 Title : length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 Usage : $length = $fuzzy_loc->length();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 Function: Get the length of this location.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 Note that the length of a fuzzy location will always depend
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 on the currently active interpretation of start and end. The
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 result will therefore vary for different CoordinatePolicy objects.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 Returns : an integer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 #sub length {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 # my($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 # return $self->SUPER::length() if( !$self->start || !$self->end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 # $self->warn('Length is not valid for a FuzzyLocation');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 # return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 #}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 =head2 start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 Title : start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 Usage : $start = $fuzzy->start();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 Function: get/set start of this range, handling fuzzy_starts
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 Returns : a positive integer representing the start of the location
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 Args : start location on set (can be fuzzy point string)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 sub start {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 my($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 if( defined $value ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 my ($encode,$min,$max) = $self->_fuzzypointdecode($value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 $self->start_pos_type($encode);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 $self->min_start($min);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 $self->max_start($max);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 $self->throw("Use Bio::Location::Simple for IN-BETWEEN locations [". $self->SUPER::start. "] and [". $self->SUPER::end. "]")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 if $self->location_type eq 'BETWEEN' && defined $self->SUPER::end && ($self->SUPER::end - 1 == $self->SUPER::start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 return $self->SUPER::start();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 =head2 end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 Title : end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 Usage : $end = $fuzzy->end();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 Function: get/set end of this range, handling fuzzy_ends
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 Returns : a positive integer representing the end of the range
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 Args : end location on set (can be fuzzy string)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 sub end {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 my($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 if( defined $value ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 my ($encode,$min,$max) = $self->_fuzzypointdecode($value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 $self->end_pos_type($encode);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 $self->min_end($min);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 $self->max_end($max);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 $self->throw("Use Bio::Location::Simple for IN-BETWEEN locations [". $self->SUPER::start. "] and [". $self->SUPER::end. "]")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 if $self->location_type eq 'BETWEEN' && defined $self->SUPER::start && ($self->SUPER::end - 1 == $self->SUPER::start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 return $self->SUPER::end();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 =head2 min_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 Title : min_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 Usage : $min_start = $fuzzy->min_start();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 Function: get/set the minimum starting point
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 Returns : the minimum starting point from the contained sublocations
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 Args : integer or undef on set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 sub min_start {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 my ($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 if(@args) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 $self->{'_min_start'} = $args[0]; # the value may be undef!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 return $self->{'_min_start'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 =head2 max_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 Title : max_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 Usage : my $maxstart = $location->max_start();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 Function: Get/set maximum starting location of feature startpoint
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 Returns : integer or undef if no maximum starting point.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 Args : integer or undef on set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 sub max_start {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 my ($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 if(@args) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 $self->{'_max_start'} = $args[0]; # the value may be undef!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 return $self->{'_max_start'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 =head2 start_pos_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 Title : start_pos_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 Usage : my $start_pos_type = $location->start_pos_type();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 Function: Get/set start position type.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 Returns : type of position coded as text
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 ('BEFORE', 'AFTER', 'EXACT','WITHIN', 'BETWEEN')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 Args : a string on set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 sub start_pos_type {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 if(defined $value && $value =~ /^\d+$/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 if( $value == 0 ) { $value = 'EXACT'; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 my $v = $LOCATIONCODESBSANE[$value];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 if( ! defined $v ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 $self->warn("Provided value $value which I don't understand, reverting to 'EXACT'");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 $v = 'EXACT';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 $value = $v;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 if(defined($value)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 $self->{'_start_pos_type'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 return $self->{'_start_pos_type'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 =head2 min_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 Title : min_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 Usage : my $minend = $location->min_end();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 Function: Get/set minimum ending location of feature endpoint
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 Returns : integer or undef if no minimum ending point.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 Args : integer or undef on set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 sub min_end {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 my ($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 if(@args) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 $self->{'_min_end'} = $args[0]; # the value may be undef!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 return $self->{'_min_end'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 =head2 max_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 Title : max_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 Usage : my $maxend = $location->max_end();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 Function: Get/set maximum ending location of feature endpoint
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 Returns : integer or undef if no maximum ending point.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 Args : integer or undef on set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 sub max_end {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 my ($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 if(@args) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 $self->{'_max_end'} = $args[0]; # the value may be undef!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 return $self->{'_max_end'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 =head2 end_pos_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 Title : end_pos_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 Usage : my $end_pos_type = $location->end_pos_type();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 Function: Get/set end position type.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 Returns : type of position coded as text
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 ('BEFORE', 'AFTER', 'EXACT','WITHIN', 'BETWEEN')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 Args : a string on set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 sub end_pos_type {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 if( defined $value && $value =~ /^\d+$/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 if( $value == 0 ) { $value = 'EXACT'; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 my $v = $LOCATIONCODESBSANE[$value];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 if( ! defined $v ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 $self->warn("Provided value $value which I don't understand, reverting to 'EXACT'");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 $v = 'EXACT';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 $value = $v;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 if(defined($value)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 $self->{'_end_pos_type'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 return $self->{'_end_pos_type'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 =head2 seq_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 Title : seq_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 Usage : my $seqid = $location->seq_id();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 Function: Get/Set seq_id that location refers to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 Returns : seq_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 Args : [optional] seq_id value to set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 =head2 coordinate_policy
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 Title : coordinate_policy
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 Usage : $policy = $location->coordinate_policy();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 $location->coordinate_policy($mypolicy); # set may not be possible
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 Function: Get the coordinate computing policy employed by this object.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 See Bio::Location::CoordinatePolicyI for documentation about
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 the policy object and its use.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 The interface *does not* require implementing classes to accept
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 setting of a different policy. The implementation provided here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 does, however, allow to do so.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 Implementors of this interface are expected to initialize every
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 new instance with a CoordinatePolicyI object. The implementation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 provided here will return a default policy object if none has
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 been set yet. To change this default policy object call this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 method as a class method with an appropriate argument. Note that
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 in this case only subsequently created Location objects will be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 affected.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 Returns : A Bio::Location::CoordinatePolicyI implementing object.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 Args : On set, a Bio::Location::CoordinatePolicyI implementing object.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 =head2 to_FTstring
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 Title : to_FTstring
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 Usage : my $locstr = $location->to_FTstring()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 Function: Get/Set seq_id that location refers to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 Returns : seq_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 Args : [optional] seq_id value to set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 sub to_FTstring {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 my (%vals) = ( 'start' => $self->start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 'min_start' => $self->min_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 'max_start' => $self->max_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 'start_code' => $self->start_pos_type,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 'end' => $self->end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 'min_end' => $self->min_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 'max_end' => $self->max_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 'end_code' => $self->end_pos_type );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 my (%strs) = ( 'start' => '',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 'end' => '');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 my ($delimiter) = $FUZZYCODES{$self->location_type};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 # I'm lazy, lets do this in a loop since behaviour will be the same for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 # start and end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 foreach my $point ( qw(start end) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 if( $vals{$point."_code"} ne 'EXACT' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 if( (!defined $vals{"min_$point"} ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 !defined $vals{"max_$point"})
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 && ( $vals{$point."_code"} eq 'WITHIN' ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 $vals{$point."_code"} eq 'BETWEEN')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 $vals{"min_$point"} = '' unless defined $vals{"min_$point"};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 $vals{"max_$point"} = '' unless defined $vals{"max_$point"};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 $self->warn("Fuzzy codes for start are in a strange state, (".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 join(",", ($vals{"min_$point"},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 $vals{"max_$point"},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 $vals{$point."_code"})). ")");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 return '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 if( defined $vals{$point."_code"} &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 ($vals{$point."_code"} eq 'BEFORE' ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 $vals{$point."_code"} eq 'AFTER')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 $strs{$point} .= $FUZZYCODES{$vals{$point."_code"}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 if( defined $vals{"min_$point"} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 $strs{$point} .= $vals{"min_$point"};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 if( defined $vals{$point."_code"} &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 ($vals{$point."_code"} eq 'WITHIN' ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 $vals{$point."_code"} eq 'BETWEEN')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 $strs{$point} .= $FUZZYCODES{$vals{$point."_code"}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 if( defined $vals{"max_$point"} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 $strs{$point} .= $vals{"max_$point"};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 if(($vals{$point."_code"} eq 'WITHIN') ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 ($vals{$point."_code"} eq 'BETWEEN')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 $strs{$point} = "(".$strs{$point}.")";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 $strs{$point} = $vals{$point};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 my $str = $strs{'start'} . $delimiter . $strs{'end'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 if($self->is_remote() && $self->seq_id()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 $str = $self->seq_id() . ":" . $str;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 if( $self->strand == -1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 $str = "complement(" . $str . ")";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 } elsif($self->location_type() eq "WITHIN") {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 $str = "(".$str.")";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 return $str;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 =head2 _fuzzypointdecode
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 Title : _fuzzypointdecode
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 Usage : ($type,$min,$max) = $self->_fuzzypointdecode('<5');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 Function: Decode a fuzzy string.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 Returns : A 3-element array consisting of the type of location, the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 minimum integer, and the maximum integer describing the range
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 of coordinates this start or endpoint refers to. Minimum or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 maximum coordinate may be undefined.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 : Returns empty array on fail.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 Args : fuzzypoint string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 sub _fuzzypointdecode {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 my ($self, $string) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 return () if( !defined $string);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 # strip off leading and trailing space
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 $string =~ s/^\s*(\S+)\s*/$1/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 foreach my $pattern ( keys %FUZZYPOINTENCODE ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 if( $string =~ /^$pattern$/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 my ($min,$max) = ($1,$2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 if($FUZZYPOINTENCODE{$pattern} eq 'EXACT') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 $max = $min;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 $max = undef if(length($max) == 0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 $min = undef if(length($min) == 0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 return ($FUZZYPOINTENCODE{$pattern},$min,$max);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 if( $self->verbose >= 1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 $self->warn("could not find a valid fuzzy encoding for $string");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 return ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560