[Bioperl-l] Bio::AnnotatableI function annotation()
Chris Fields
cjfields at illinois.edu
Fri Mar 27 19:34:41 UTC 2009
No, it's been that way for quite a while now. From the 1.2 branch (6
yrs old) for Bio::SeqFeature::Generic:
@ISA = qw(Bio::Root::Root Bio::SeqFeatureI Bio::AnnotatableI
Bio::FeatureHolderI);
I think there is still some contention about what the difference is
between a Feature and an Annotation. Our basic assumption is a
Feature describes a specific section of the sequence while Annotation
describes the full sequence.
However, we do have Annotation implementations that can describe parts
of the sequence (Bio::Annotation::Reference, Bio::Annotation::Target)
and Features that describe the entire sequence (the GenBank/EMBL
'source' feature). This is probably a good compromise.
Personally, I think all sequences should be RangeI (implement start/
end/strand) and have SeqFeature::Collections, that SeqFeatureI should
be genericized to FeatureI to allow descriptives of any range
(sequence, alignment, array, whatever), and that most object creation
should be on the fly vs. up-front. Oh if I only had the tuits...
chris
On Mar 27, 2009, at 2:14 PM, Mark A. Jensen wrote:
> So, is it right that the inheritance of AnnotatableI by
> SeqFeature::Generic was
> essentially for backward-compatibility?
> MAJ
> ----- Original Message ----- From: "Chris Fields" <cjfields at illinois.edu
> >
> To: "Hilmar Lapp" <hlapp at gmx.net>
> Cc: "Govind Chandra" <govind.chandra at bbsrc.ac.uk>; <bioperl-l at lists.open-bio.org
> >; "Mark A. Jensen" <maj at fortinbras.us>
> Sent: Friday, March 27, 2009 3:02 PM
> Subject: Re: [Bioperl-l] Bio::AnnotatableI function annotation()
>
>
>> Right now SeqFeatureI doesn't inherit AnnotatableI, even though
>> the note about the deprecated *_tag_* methods imply that it does.
>> We should probably add back the abstract (unimplemented) tag
>> methods to Bio::SeqFeatureI and either remove them from
>> Bio::AnnotatableI or activate the deprecation (they have no place
>> with annotations). This shouldn't hurt things (FLW).
>>
>> Not sure if we really need to add AnnotatableI to SeqFeatureI; I
>> think that would be up to the SeqFeatureI implementation, and it
>> doesn't hurt leaving it out.
>>
>> chris
>>
>> On Mar 27, 2009, at 1:14 PM, Hilmar Lapp wrote:
>>
>>> $feature->annotation() is a legitimate method call (it implements
>>> AnnotatableI).
>>>
>>> SeqFeature::Generic has indeed two mechanism to store annotation,
>>> the tag system and the annotation collection. This is because it
>>> inherits from SeqFeatureI (which brings in the tag/value
>>> annotation) and from AnnotatableI (which brings in annotation()).
>>>
>>> I agree this can be confusing from a user's perspective. As a
>>> rule of thumb, SeqIO parsers will almost universally populate
>>> only the tag/value system, because typically they will (or
>>> should) assume not more than that the feature object they are
>>> dealing with is a SeqFeatureI.
>>>
>>> Once you have the feature objects in your hands, you can add to
>>> either tag/values or annotation() to your heart's content. Just
>>> be aware that nearly all SeqIO writers won't use the
>>> annotation() collection when you pass the sequence back to them
>>> since typically they won't really know what to do with feature
>>> annotation that isn't tag/value (unlike as for sequence
>>> annotation).
>>>
>>> If in your code you want to treat tag/value annotation in the
>>> same way as (i.e., as if it were part of) the annotation that's
>>> in the annotation collection then use
>>> SeqFeature::AnnotationAdaptor. That's in fact what Bioperl-db
>>> does to ensure that all annotation gets serialized to the
>>> database no matter where it is.
>>>
>>> Hth,
>>>
>>> -hilmar
>>>
>>> On Mar 27, 2009, at 1:44 PM, Govind Chandra wrote:
>>>
>>>> Hi Mark,
>>>> Will it be unfair to say that the documentation as well as the
>>>> implementation are confusing. SeqFeature::Generic should cause
>>>> an error
>>>> when annotation() is called on it if it cannot do the right
>>>> thing. For
>>>> the time being I will stick with the old ways (has_tag etc.).
>>>> Good to
>>>> know they are not deprecated in the way I intend to use them (via
>>>> SeqFeature::Generic).
>>>> Cheers
>>>> Govind
>>>>
>>>>
>>>>
>>>> On Fri, 2009-03-27 at 13:30 -0400, Mark A. Jensen wrote:
>>>>> Hey Govind--
>>>>> You're right-- SeqFeature::Generic object inherits from
>>>>> AnnotatableI-- but the *_tags_* methods are now
>>>>> SeqFeature::Generic methods--ie, you can use these
>>>>> on features, and they are no longer hitting AnnotableI.
>>>>> It appears that the feature's AnnotationCollection doesn't
>>>>> even get loaded now.
>>>>> [developer out there like to chime in?]
>>>>> cheers,
>>>>> Mark
>>>>> ----- Original Message -----
>>>>> From: "Govind Chandra" <govind.chandra at bbsrc.ac.uk>
>>>>> To: "Mark A. Jensen" <maj at fortinbras.us>
>>>>> Cc: <bioperl-l at lists.open-bio.org>
>>>>> Sent: Friday, March 27, 2009 1:09 PM
>>>>> Subject: [Bioperl-l] Bio::AnnotatableI function annotation()
>>>>>
>>>>>
>>>>>> Thanks Mark,
>>>>>>
>>>>>> Sorry for not putting a proper subject in the last post.
>>>>>>
>>>>>> What you suggest is what I have been doing for a long time. I
>>>>>> am just
>>>>>> trying to alter my code to conform to the latest bioperl
>>>>>> version and ran
>>>>>> into this issue. I could be wrong (I am more a user rather
>>>>>> than writer
>>>>>> of modules) but since $feature->annotation() does not result
>>>>>> in an error
>>>>>> I think $feature is-a Bio::AnnotatableI as well.
>>>>>>
>>>>>> Cheers
>>>>>>
>>>>>> Govind
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Fri, 2009-03-27 at 12:17 -0400, Mark A. Jensen wrote:
>>>>>>> Hi Govind-
>>>>>>>
>>>>>>> As near as I can tell, the *_tags methods are deprecated for
>>>>>>> Bio::AnnotatableI objects, but these methods are available
>>>>>>> off the SeqFeatureI objects themselves: i.e., rather than
>>>>>>>
>>>>>>>> $ac=$feature->annotation();
>>>>>>>> $temp1=$ac->get_Annotations("locus_tag");
>>>>>>>
>>>>>>> do
>>>>>>>
>>>>>>> $temp1 = $feature->get_tag_values("locus_tag");
>>>>>>>
>>>>>>> directly.
>>>>>>>
>>>>>>> hope it helps -
>>>>>>> Mark
>>>>>>>
>>>>>>> ----- Original Message -----
>>>>>>> From: "Govind Chandra" <govind.chandra at bbsrc.ac.uk>
>>>>>>> To: <bioperl-l at lists.open-bio.org>
>>>>>>> Sent: Friday, March 27, 2009 11:26 AM
>>>>>>> Subject: Re: [Bioperl-l] Bioperl-l Digest, Vol 71, Issue 15
>>>>>>>
>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> The code below
>>>>>>>>
>>>>>>>>
>>>>>>>> ====== code begins =======
>>>>>>>> #use strict;
>>>>>>>> use Bio::SeqIO;
>>>>>>>>
>>>>>>>> $infile='NC_000913.gbk';
>>>>>>>> my $seqio=Bio::SeqIO->new(-file => $infile);
>>>>>>>> my $seqobj=$seqio->next_seq();
>>>>>>>> my @features=$seqobj->all_SeqFeatures();
>>>>>>>> my $count=0;
>>>>>>>> foreach my $feature (@features) {
>>>>>>>> unless($feature->primary_tag() eq 'CDS') {next;}
>>>>>>>> print($feature->start()," ", $feature->end(), "
>>>>>>>> ",$feature->strand(),"\n");
>>>>>>>> $ac=$feature->annotation();
>>>>>>>> $temp1=$ac->get_Annotations("locus_tag");
>>>>>>>> @temp2=$ac->get_Annotations();
>>>>>>>> print("$temp1 $temp2[0] @temp2\n");
>>>>>>>> if($count++ > 5) {last;}
>>>>>>>> }
>>>>>>>>
>>>>>>>> print(ref($ac),"\n");
>>>>>>>> exit;
>>>>>>>>
>>>>>>>> ======= code ends ========
>>>>>>>>
>>>>>>>> produces the output
>>>>>>>>
>>>>>>>> ========== output begins ========
>>>>>>>>
>>>>>>>> 190 255 1
>>>>>>>> 0
>>>>>>>> 337 2799 1
>>>>>>>> 0
>>>>>>>> 2801 3733 1
>>>>>>>> 0
>>>>>>>> 3734 5020 1
>>>>>>>> 0
>>>>>>>> 5234 5530 1
>>>>>>>> 0
>>>>>>>> 5683 6459 -1
>>>>>>>> 0
>>>>>>>> 6529 7959 -1
>>>>>>>> 0
>>>>>>>> Bio::Annotation::Collection
>>>>>>>>
>>>>>>>> =========== output ends ==========
>>>>>>>>
>>>>>>>> $ac is-a Bio::Annotation::Collection but does not actually
>>>>>>>> contain any
>>>>>>>> annotation from the feature. Is this how it should be? I
>>>>>>>> cannot figure
>>>>>>>> out what is wrong with the script. Earlier I used to use
>>>>>>>> has_tag(),
>>>>>>>> get_tag_values() etc. but the documentation says these are
>>>>>>>> deprecated.
>>>>>>>>
>>>>>>>> Perl is 5.8.8. BioPerl version is 1.6 (installed today).
>>>>>>>> Output of uname
>>>>>>>> -a is
>>>>>>>>
>>>>>>>> Linux n61347 2.6.18-92.1.6.el5 #1 SMP Fri Jun 20 02:36:06
>>>>>>>> EDT 2008
>>>>>>>> x86_64 x86_64 x86_64 GNU/Linux
>>>>>>>>
>>>>>>>> Thanks in advance for any help.
>>>>>>>>
>>>>>>>> Govind
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Bioperl-l mailing list
>>>>>>>> Bioperl-l at lists.open-bio.org
>>>>>>>> http://lists.open-bio.org/mailman/listinfo/bioperl-l
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Bioperl-l mailing list
>>>>>> Bioperl-l at lists.open-bio.org
>>>>>> http://lists.open-bio.org/mailman/listinfo/bioperl-l
>>>>>>
>>>>>>
>>>>
>>>> _______________________________________________
>>>> Bioperl-l mailing list
>>>> Bioperl-l at lists.open-bio.org
>>>> http://lists.open-bio.org/mailman/listinfo/bioperl-l
>>>
>>> --
>>> ===========================================================
>>> : Hilmar Lapp -:- Durham, NC -:- hlapp at gmx dot net :
>>> ===========================================================
>>>
>>>
>>>
>>> _______________________________________________
>>> Bioperl-l mailing list
>>> Bioperl-l at lists.open-bio.org
>>> http://lists.open-bio.org/mailman/listinfo/bioperl-l
>>
>>
>
More information about the Bioperl-l
mailing list