[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
>>
>>    
>>
>
>  
>