[Bioperl-l] Re: sub_Location in Bio::Location::Simple?
Charles Tilford
charles.tilford@bms.com
Tue, 28 May 2002 16:53:32 -0400
Jason Stajich wrote:
>I'd rather create a new method, something like:
>each_Location().
>
>This can be implemented as a recursive method to handle the case when
>split locations contain other split locations.
>
>I don't want to make Simple locations explictly act like Split locations
>with a single loc since that defeats the purpose of separating the
>interfaces.
>
>Other people may have input?
>-j
>
I'm happy with a new method. How about these changes then?
Bio::Location::Split
sub each_Location {
my ($self, $order) = @_;
my @locs = ();
foreach my $subloc ($self->sub_Location($order)) {
# Recursively check to get hierarchical split locations:
push @locs, $subloc->each_Location($order);
}
return @locs;
}
Bio::Location::Simple
sub each_Location {
my ($self) = @_;
return $self;
}
Bio::LocationI
sub each_Location {
my ($self,@args) = @_;
$self->throw_not_implemented();
return undef;
}
-Charles
>On Tue, 28 May 2002, Charles Tilford wrote:
>
>
>
>>Hi Jason,
>>
>>Would you mind if I added a sub_Location method in
>>Bio::Location::Simple? It would look like this:
>>
>>=head2 sub_Location
>>
>> Title : sub_Location
>> Usage : $loc = $loc->sub_Location();
>> Function: compatibility method to allow this single method to get
>>locations from either Simple or Split locations.
>> Returns : the Bio::Location::Simple object itself
>> Args :
>>
>>=cut
>>
>>sub start {
>> my ($self) = @_;
>> return $self;
>>}
>>
>>I find myself doing this frequently, to grab all the locations in a
>>given feature:
>>
>> my $fLoc = $feat->location;
>> my $locs = ($fLoc =~ /Split/) ? [$fLoc->sub_Location()] : [$fLoc];
>>
>>If ::Simple had a sub_Location method, then I could just say:
>>
>>my @locs = $feat->location->sub_Location();
>>
>>Not sure if I am overlooking a gotcha here...
>>
>>-Charles
>>
>>
>>
>
>
>