[Bioperl-l] Bio::AnnotatableI function annotation()
Mark A. Jensen
maj at fortinbras.us
Fri Mar 27 15:14:06 EDT 2009
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