[Bioperl-l] Re: [Bioperl-guts-l] bioperl-live/Bio/SeqFeature
Annotated.pm, 1.16, 1.17
Steffen Grossmann
grossman at molgen.mpg.de
Wed Nov 24 13:54:35 EST 2004
As it is now, the expansion only takes place, when you explicitly say
'EXPAND'. If you don't do this and try to add a feature, which is not
contained, you get a warning
("$val is not contained within parent feature, ignoring.")
and nothing is added.
Allen Day wrote:
>i'd like a warning issued if the range expands. i see expansion as a
>convenience feature, and want to know when it happens because i don't
>generally expect it.
>
>On Wed, 24 Nov 2004, Steffen Grossman wrote:
>
>
>
>>Update of /home/repository/bioperl/bioperl-live/Bio/SeqFeature
>>In directory pub.open-bio.org:/tmp/cvs-serv19535
>>
>>Modified Files:
>> Annotated.pm
>>Log Message:
>>Added support for the 'EXPAND' option in 'add_SeqFeature'.
>>
>>
>>Index: Annotated.pm
>>===================================================================
>>RCS file: /home/repository/bioperl/bioperl-live/Bio/SeqFeature/Annotated.pm,v
>>retrieving revision 1.16
>>retrieving revision 1.17
>>diff -C2 -d -r1.16 -r1.17
>>*** Annotated.pm 24 Nov 2004 02:14:06 -0000 1.16
>>--- Annotated.pm 24 Nov 2004 16:31:59 -0000 1.17
>>***************
>>*** 604,617 ****
>> =head2 add_SeqFeature()
>>
>>! Usage : $obj->add_SeqFeature($feat);
>>! Function: Returns : nothing
>>! Args : A Bio::SeqFeatureI object. Objects not implementing Bio::SeqFeatureI
>>! and those whose bounds are not within those of the called object are
>>! ignored with a warning.
>>
>> =cut
>>
>> sub add_SeqFeature {
>>! my ($self,$val) = @_;
>>
>> return undef unless $val;
>>--- 604,625 ----
>> =head2 add_SeqFeature()
>>
>>! Usage : $feat->add_SeqFeature($subfeat);
>>! $feat->add_SeqFeature($subfeat,'EXPAND')
>>! Function: adds a SeqFeature into the subSeqFeature array.
>>! with no 'EXPAND' qualifer, subfeat will be tested
>>! as to whether it lies inside the parent, and throw
>>! an exception if not.
>>!
>>! If EXPAND is used, the parent''s start/end/strand will
>>! be adjusted so that it grows to accommodate the new
>>! subFeature
>>! Example :
>>! Returns : nothing
>>! Args : a Bio::SeqFeatureI object
>>
>> =cut
>>
>> sub add_SeqFeature {
>>! my ($self,$val, $expand) = @_;
>>
>> return undef unless $val;
>>***************
>>*** 619,626 ****
>> if ( !$val->isa('Bio::SeqFeatureI') ) {
>> $self->warn("$val does not implement Bio::SeqFeatureI, ignoring.");
>> }
>>
>>! if ( !$self->contains($val) ) {
>>! $self->warn("$val is not contained within parent feature, ignoring.");
>> }
>>
>>--- 627,640 ----
>> if ( !$val->isa('Bio::SeqFeatureI') ) {
>> $self->warn("$val does not implement Bio::SeqFeatureI, ignoring.");
>>+ return undef;
>> }
>>
>>! if($expand && ($expand eq 'EXPAND')) {
>>! $self->_expand_region($val);
>>! } else {
>>! if ( !$self->contains($val) ) {
>>! $self->warn("$val is not contained within parent feature, and expansion is not valid, ignoring.");
>>! return undef;
>>! }
>> }
>>
>>***************
>>*** 734,737 ****
>>--- 748,785 ----
>> my ($self) = @_;
>> return $self->{'targets'} ? @{ $self->{'targets'} } : ();
>>+ }
>>+
>>+ =head2 _expand_region
>>+
>>+ Title : _expand_region
>>+ Usage : $self->_expand_region($feature);
>>+ Function: Expand the total region covered by this feature to
>>+ accomodate for the given feature.
>>+
>>+ May be called whenever any kind of subfeature is added to this
>>+ feature. add_SeqFeature() already does this.
>>+ Returns :
>>+ Args : A Bio::SeqFeatureI implementing object.
>>+
>>+
>>+ =cut
>>+
>>+ sub _expand_region {
>>+ my ($self, $feat) = @_;
>>+ if(! $feat->isa('Bio::SeqFeatureI')) {
>>+ $self->warn("$feat does not implement Bio::SeqFeatureI");
>>+ }
>>+ # if this doesn't have start/end set - forget it!
>>+ if((! defined($self->start())) && (! defined $self->end())) {
>>+ $self->start($feat->start());
>>+ $self->end($feat->end());
>>+ $self->strand($feat->strand) unless defined($self->strand());
>>+ # $self->strand($feat->strand) unless $self->strand();
>>+ } else {
>>+ my $range = $self->union($feat);
>>+ $self->start($range->start);
>>+ $self->end($range->end);
>>+ $self->strand($range->strand);
>>+ }
>> }
>>
>>
>>_______________________________________________
>>Bioperl-guts-l mailing list
>>Bioperl-guts-l at portal.open-bio.org
>>http://portal.open-bio.org/mailman/listinfo/bioperl-guts-l
>>
>>
>>
>_______________________________________________
>Bioperl-l mailing list
>Bioperl-l at portal.open-bio.org
>http://portal.open-bio.org/mailman/listinfo/bioperl-l
>
>
--
%---------------------------------------------%
% Steffen Grossmann %
% %
% Max Planck Institute for Molecular Genetics %
% Computational Molecular Biology %
%---------------------------------------------%
% Ihnestrasse 73 %
% 14195 Berlin %
% Germany %
%---------------------------------------------%
% Tel: (++49 +30) 8413-1167 %
% Fax: (++49 +30) 8413-1152 %
%---------------------------------------------%
More information about the Bioperl-l
mailing list