annotate variant_effect_predictor/Bio/SeqFeature/Generic.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: Generic.pm,v 1.74.2.1 2003/09/09 20:12:37 lstein Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # BioPerl module for Bio::SeqFeature::Generic
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Ewan Birney <birney@sanger.ac.uk>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 # Copyright Ewan Birney
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 # POD documentation - main docs before the code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 Bio::SeqFeature::Generic - Generic SeqFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 $feat = new Bio::SeqFeature::Generic ( -start => 10, -end => 100,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 -strand => -1, -primary => 'repeat',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 -source_tag => 'repeatmasker',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 -score => 1000,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 -tag => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 new => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 author => 'someone',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 sillytag => 'this is silly!' } );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 $feat = new Bio::SeqFeature::Generic ( -gff_string => $string );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 # if you want explicitly GFF1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 $feat = new Bio::SeqFeature::Generic ( -gff1_string => $string );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 # add it to an annotated sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 $annseq->add_SeqFeature($feat);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 Bio::SeqFeature::Generic is a generic implementation for the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 Bio::SeqFeatureI interface, providing a simple object to provide all
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 the information for a feature on a sequence.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 For many Features, this is all you will need to use (for example, this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 is fine for Repeats in DNA sequence or Domains in protein
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 sequence). For other features, which have more structure, this is a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 good base class to extend using inheritence to have new things: this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 is what is done in the Bio::SeqFeature::Gene,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 Bio::SeqFeature::Transcript and Bio::SeqFeature::Exon, which provide
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 well coordinated classes to represent genes on DNA sequence (for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 example, you can get the protein sequence out from a transcript
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 class).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 For many Features, you want to add some piece of information, for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 example a common one is that this feature is 'new' whereas other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 features are 'old'. The tag system, which here is implemented using a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 hash can be used here. You can use the tag system to extend the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 SeqFeature::Generic programmatically: that is, you know that you have
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 read in more information into the tag 'mytag' which you can then
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 retrieve. This means you do not need to know how to write inherieted
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 Perl to provide more complex information on a feature, and/or, if you
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 do know but you do not want to write a new class every time you need
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 some extra piece of information, you can use the tag system to easily
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 store and then retrieve information.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 The tag system can be written in/out of GFF format, and also into EMBL
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 format via the SeqIO system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 =head1 Implemented Interfaces
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 This class implementes the following interfaces.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 =over 4
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 =item Bio::SeqFeatureI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 Note that this includes implementing Bio::RangeI.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 =item Bio::AnnotatableI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 =item Bio::FeatureHolderI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 Features held by a feature are essentially sub-features.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 =back
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 User feedback is an integral part of the evolution of this and other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 Bioperl modules. Send your comments and suggestions preferably to one
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 of the Bioperl mailing lists. Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 http://bio.perl.org/MailList.html - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 Report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 the bugs and their resolution. Bug reports can be submitted via email
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 bioperl-bugs@bio.perl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 =head1 AUTHOR - Ewan Birney
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 Ewan Birney E<lt>birney@sanger.ac.ukE<gt>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 =head1 DEVELOPERS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 This class has been written with an eye out of inheritence. The fields
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 the actual object hash are:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 _gsf_tag_hash = reference to a hash for the tags
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 _gsf_sub_array = reference to an array for subfeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 The rest of the documentation details each of the object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 methods. Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 package Bio::SeqFeature::Generic;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 use Bio::Root::Root;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 use Bio::SeqFeatureI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 use Bio::AnnotatableI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 use Bio::FeatureHolderI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 use Bio::Annotation::Collection;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 use Bio::Location::Simple;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 use Bio::Tools::GFF;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 #use Tie::IxHash;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 @ISA = qw(Bio::Root::Root Bio::SeqFeatureI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 Bio::AnnotatableI Bio::FeatureHolderI);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 my ( $caller, @args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 my ($self) = $caller->SUPER::new(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 $self->{'_parse_h'} = {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 $self->{'_gsf_tag_hash'} = {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 # tie %{$self->{'_gsf_tag_hash'}}, "Tie::IxHash";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 # bulk-set attributes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 $self->set_attributes(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 # done - we hope
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 =head2 set_attributes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 Title : set_attributes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 Usage :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 Function: Sets a whole array of parameters at once.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 Returns : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 Args : Named parameters, in the form as they would otherwise be passed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 to new(). Currently recognized are:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 -start start position
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 -end end position
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 -strand strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 -primary primary tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 -source source tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 -frame frame
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 -score score value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 -tag a reference to a tag/value hash
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 -gff_string GFF v.2 string to initialize from
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 -gff1_string GFF v.1 string to initialize from
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 -seq_id the display name of the sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 -annotation the AnnotationCollectionI object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 -location the LocationI object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 sub set_attributes {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 my ($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 my ($start, $end, $strand, $primary_tag, $source_tag, $primary, $source, $frame,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 $score, $tag, $gff_string, $gff1_string,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 $seqname, $seqid, $annot, $location,$display_name) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 $self->_rearrange([qw(START
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 END
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 STRAND
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 PRIMARY_TAG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 SOURCE_TAG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 PRIMARY
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 SOURCE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 FRAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 SCORE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 TAG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 GFF_STRING
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 GFF1_STRING
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 SEQNAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 SEQ_ID
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 ANNOTATION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 LOCATION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 DISPLAY_NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 )], @args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 $location && $self->location($location);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 $gff_string && $self->_from_gff_string($gff_string);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 $gff1_string && do {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 $self->gff_format(Bio::Tools::GFF->new('-gff_version' => 1));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 $self->_from_gff_stream($gff1_string);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 $primary_tag && $self->primary_tag($primary_tag);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 $source_tag && $self->source_tag($source_tag);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 $primary && $self->primary_tag($primary);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 $source && $self->source_tag($source);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 defined $start && $self->start($start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 defined $end && $self->end($end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 defined $strand && $self->strand($strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 defined $frame && $self->frame($frame);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 $score && $self->score($score);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 $annot && $self->annotation($annot);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 defined $display_name && $self->display_name($display_name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 if($seqname) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 $self->warn("-seqname is deprecated. Please use -seq_id instead.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 $seqid = $seqname unless $seqid;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 $seqid && $self->seq_id($seqid);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 $tag && do {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 foreach my $t ( keys %$tag ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 $self->add_tag_value($t,$tag->{$t});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 =head2 direct_new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 Title : direct_new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 Usage : my $obj = Bio::SeqFeature::Generic->direct_new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 Function: create a blessed hash - for performance improvement in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 object creation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 Returns : Bio::SeqFeature::Generic object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 sub direct_new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 my ( $class) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 my ($self) = {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 bless $self,$class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 =head2 location
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 Title : location
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 Usage : my $location = $seqfeature->location()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 Function: returns a location object suitable for identifying location
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 of feature on sequence or parent feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 Returns : Bio::LocationI object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 Args : [optional] Bio::LocationI object to set the value to.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 sub location {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 my($self, $value ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 if (defined($value)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 unless (ref($value) and $value->isa('Bio::LocationI')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 $self->throw("object $value pretends to be a location but ".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 "does not implement Bio::LocationI");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 $self->{'_location'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 elsif (! $self->{'_location'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 # guarantees a real location object is returned every time
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 $self->{'_location'} = Bio::Location::Simple->new();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 return $self->{'_location'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 =head2 start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 Title : start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 Usage : $start = $feat->start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 $feat->start(20)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 Function: Get/set on the start coordinate of the feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 Returns : integer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 sub start {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 return $self->location->start($value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 =head2 end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 Title : end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 Usage : $end = $feat->end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 $feat->end($end)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 Function: get/set on the end coordinate of the feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 Returns : integer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 sub end {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 return $self->location->end($value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 =head2 length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 Title : length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 Usage :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 Function:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 Returns :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 sub length {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 return $self->end - $self->start() + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 =head2 strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 Title : strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 Usage : $strand = $feat->strand()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 $feat->strand($strand)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 Function: get/set on strand information, being 1,-1 or 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 Returns : -1,1 or 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 sub strand {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 return $self->location->strand($value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 =head2 score
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 Title : score
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 Usage : $score = $feat->score()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 $feat->score($score)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 Function: get/set on score information
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 Returns : float
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 Args : none if get, the new value if set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 sub score {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 if (defined($value)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 if ( $value !~ /^[+-]?\d+\.?\d*(e-\d+)?/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 $self->throw("'$value' is not a valid score");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 $self->{'_gsf_score'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 return $self->{'_gsf_score'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 =head2 frame
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 Title : frame
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 Usage : $frame = $feat->frame()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 $feat->frame($frame)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 Function: get/set on frame information
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 Returns : 0,1,2, '.'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 Args : none if get, the new value if set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 sub frame {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 if ( defined $value ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 if ( $value !~ /^[0-2.]$/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 $self->throw("'$value' is not a valid frame");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 if( $value eq '.' ) { $value = '.'; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 $self->{'_gsf_frame'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 return $self->{'_gsf_frame'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 =head2 primary_tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 Title : primary_tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 Usage : $tag = $feat->primary_tag()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 $feat->primary_tag('exon')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 Function: get/set on the primary tag for a feature,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 eg 'exon'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 Returns : a string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 sub primary_tag {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 if ( defined $value ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 $self->{'_primary_tag'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 return $self->{'_primary_tag'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 =head2 source_tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 Title : source_tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 Usage : $tag = $feat->source_tag()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 $feat->source_tag('genscan');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 Function: Returns the source tag for a feature,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 eg, 'genscan'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 Returns : a string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 sub source_tag {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 if( defined $value ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 $self->{'_source_tag'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 return $self->{'_source_tag'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 =head2 has_tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 Title : has_tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 Usage : $value = $self->has_tag('some_tag')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 Function: Tests wether a feature contaings a tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 Returns : TRUE if the SeqFeature has the tag,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 and FALSE otherwise.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 Args : The name of a tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 sub has_tag {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 my ($self, $tag) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 return exists $self->{'_gsf_tag_hash'}->{$tag};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 =head2 add_tag_value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 Title : add_tag_value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 Usage : $self->add_tag_value('note',"this is a note");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 Returns : TRUE on success
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 Args : tag (string) and value (any scalar)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 sub add_tag_value {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 my ($self, $tag, $value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 $self->{'_gsf_tag_hash'}->{$tag} ||= [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 push(@{$self->{'_gsf_tag_hash'}->{$tag}},$value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 =head2 get_tag_values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 Title : get_tag_values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 Usage : @values = $gsf->get_tag_values('note');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 Function: Returns a list of all the values stored
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 under a particular tag.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 Returns : A list of scalars
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 Args : The name of the tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 sub get_tag_values {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 my ($self, $tag) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 if( ! defined $tag ) { return (); }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 if ( ! exists $self->{'_gsf_tag_hash'}->{$tag} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 $self->throw("asking for tag value that does not exist $tag");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 return @{$self->{'_gsf_tag_hash'}->{$tag}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 =head2 get_all_tags
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 Title : get_all_tags
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 Usage : @tags = $feat->get_all_tags()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 Function: Get a list of all the tags in a feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 Returns : An array of tag names
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 sub get_all_tags {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 my ($self, @args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 return keys %{ $self->{'_gsf_tag_hash'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 =head2 remove_tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 Title : remove_tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 Usage : $feat->remove_tag('some_tag')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 Function: removes a tag from this feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 Returns : the array of values for this tag before removing it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 Args : tag (string)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 sub remove_tag {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 my ($self, $tag) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 if ( ! exists $self->{'_gsf_tag_hash'}->{$tag} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 $self->throw("trying to remove a tag that does not exist: $tag");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 my @vals = @{$self->{'_gsf_tag_hash'}->{$tag}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 delete $self->{'_gsf_tag_hash'}->{$tag};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 return @vals;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 =head2 attach_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 Title : attach_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 Usage : $sf->attach_seq($seq)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 Function: Attaches a Bio::Seq object to this feature. This
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 Bio::Seq object is for the *entire* sequence: ie
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 from 1 to 10000
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 Returns : TRUE on success
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 Args : a Bio::PrimarySeqI compliant object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 sub attach_seq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 my ($self, $seq) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 if ( ! ($seq && ref($seq) && $seq->isa("Bio::PrimarySeqI")) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 $self->throw("Must attach Bio::PrimarySeqI objects to SeqFeatures");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 $self->{'_gsf_seq'} = $seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 # attach to sub features if they want it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 foreach ( $self->sub_SeqFeature() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 $_->attach_seq($seq);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 =head2 seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 Title : seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 Usage : $tseq = $sf->seq()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 Function: returns the truncated sequence (if there) for this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 Returns : sub seq (a Bio::PrimarySeqI compliant object) on attached sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 bounded by start & end, or undef if there is no sequence attached
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592 sub seq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593 my ($self, $arg) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595 if ( defined $arg ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 $self->throw("Calling SeqFeature::Generic->seq with an argument. You probably want attach_seq");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 if ( ! exists $self->{'_gsf_seq'} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 # assumming our seq object is sensible, it should not have to yank
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 # the entire sequence out here.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 my $seq = $self->{'_gsf_seq'}->trunc($self->start(), $self->end());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 if ( $self->strand == -1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 # ok. this does not work well (?)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612 #print STDERR "Before revcom", $seq->str, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613 $seq = $seq->revcom;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 #print STDERR "After revcom", $seq->str, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 return $seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 =head2 entire_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622 Title : entire_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 Usage : $whole_seq = $sf->entire_seq()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 Function: gives the entire sequence that this seqfeature is attached to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 Returns : a Bio::PrimarySeqI compliant object, or undef if there is no
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627 sequence attached
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633 sub entire_seq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636 return $self->{'_gsf_seq'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 =head2 seq_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642 Title : seq_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643 Usage : $obj->seq_id($newval)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644 Function: There are many cases when you make a feature that you
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645 do know the sequence name, but do not know its actual
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646 sequence. This is an attribute such that you can store
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 the ID (e.g., display_id) of the sequence.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649 This attribute should *not* be used in GFF dumping, as
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650 that should come from the collection in which the seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651 feature was found.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652 Returns : value of seq_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653 Args : newvalue (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658 sub seq_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659 my ($obj,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660 if ( defined $value ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661 $obj->{'_gsf_seq_id'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663 return $obj->{'_gsf_seq_id'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666 =head2 display_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668 Title : display_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669 Usage : $featname = $obj->display_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670 Function: Implements the display_name() method, which is a human-readable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671 name for the feature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672 Returns : value of display_name (a string)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673 Args : Optionally, on set the new value or undef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677 sub display_name{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680 return $self->{'display_name'} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681 return $self->{'display_name'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684 =head1 Methods for implementing Bio::AnnotatableI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688 =head2 annotation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690 Title : annotation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691 Usage : $obj->annotation($annot_obj)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692 Function: Get/set the annotation collection object for annotating this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693 feature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696 Returns : A Bio::AnnotationCollectionI object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697 Args : newvalue (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702 sub annotation {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
703 my ($obj,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
704
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
705 # we are smart if someone references the object and there hasn't been
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
706 # one set yet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
707 if(defined $value || ! defined $obj->{'annotation'} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
708 $value = new Bio::Annotation::Collection unless ( defined $value );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
709 $obj->{'annotation'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
710 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
711 return $obj->{'annotation'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
712 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
713
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
714 =head1 Methods to implement Bio::FeatureHolderI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
715
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
716 This includes methods for retrieving, adding, and removing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
717 features. Since this is already a feature, features held by this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
718 feature holder are essentially sub-features.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
719
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
720 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
721
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
722 =head2 get_SeqFeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
723
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
724 Title : get_SeqFeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
725 Usage : @feats = $feat->get_SeqFeatures();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
726 Function: Returns an array of sub Sequence Features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
727 Returns : An array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
728 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
729
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
730
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
731 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
732
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
733 sub get_SeqFeatures {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
734 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
735
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
736 if ($self->{'_gsf_sub_array'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
737 return @{$self->{'_gsf_sub_array'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
738 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
739 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
740 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
741 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
742
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
743 =head2 add_SeqFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
744
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
745 Title : add_SeqFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
746 Usage : $feat->add_SeqFeature($subfeat);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
747 $feat->add_SeqFeature($subfeat,'EXPAND')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
748 Function: adds a SeqFeature into the subSeqFeature array.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
749 with no 'EXPAND' qualifer, subfeat will be tested
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
750 as to whether it lies inside the parent, and throw
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
751 an exception if not.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
752
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
753 If EXPAND is used, the parent's start/end/strand will
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
754 be adjusted so that it grows to accommodate the new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
755 subFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
756 Returns : nothing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
757 Args : An object which has the SeqFeatureI interface
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
758
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
759
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
760 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
761
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
762 #'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
763 sub add_SeqFeature{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
764 my ($self,$feat,$expand) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
765
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
766 if ( !$feat->isa('Bio::SeqFeatureI') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
767 $self->warn("$feat does not implement Bio::SeqFeatureI. Will add it anyway, but beware...");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
768 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
769
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
770 if($expand && ($expand eq 'EXPAND')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
771 $self->_expand_region($feat);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
772 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
773 if ( !$self->contains($feat) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
774 $self->throw("$feat is not contained within parent feature, and expansion is not valid");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
775 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
776 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
777
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
778 $self->{'_gsf_sub_array'} = [] unless exists($self->{'_gsf_sub_array'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
779 push(@{$self->{'_gsf_sub_array'}},$feat);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
780
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
781 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
782
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
783 =head2 remove_SeqFeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
784
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
785 Title : remove_SeqFeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
786 Usage : $sf->remove_SeqFeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
787 Function: Removes all sub SeqFeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
788
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
789 If you want to remove only a subset, remove that subset from the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
790 returned array, and add back the rest.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
791
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
792 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
793 Returns : The array of Bio::SeqFeatureI implementing sub-features that was
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
794 deleted from this feature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
795 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
796
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
797
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
798 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
799
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
800 sub remove_SeqFeatures {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
801 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
802
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
803 my @subfeats = @{$self->{'_gsf_sub_array'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
804 $self->{'_gsf_sub_array'} = []; # zap the array implicitly.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
805 return @subfeats;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
806 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
807
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
808 =head1 GFF-related methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
809
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
810 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
811
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
812 =head2 gff_format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
813
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
814 Title : gff_format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
815 Usage : # get:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
816 $gffio = $feature->gff_format();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
817 # set (change the default version of GFF2):
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
818 $feature->gff_format(Bio::Tools::GFF->new(-gff_version => 1));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
819 Function: Get/set the GFF format interpreter. This object is supposed to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
820 format and parse GFF. See Bio::Tools::GFF for the interface.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
821
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
822 If this method is called as class method, the default for all
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
823 newly created instances will be changed. Otherwise only this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
824 instance will be affected.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
825 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
826 Returns : a Bio::Tools::GFF compliant object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
827 Args : On set, an instance of Bio::Tools::GFF or a derived object.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
828
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
829
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
830 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
831
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
832 sub gff_format {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
833 my ($self, $gffio) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
834
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
835 if(defined($gffio)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
836 if(ref($self)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
837 $self->{'_gffio'} = $gffio;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
838 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
839 $Bio::SeqFeatureI::static_gff_formatter = $gffio;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
840 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
841 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
842 return (ref($self) && exists($self->{'_gffio'}) ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
843 $self->{'_gffio'} : $self->_static_gff_formatter);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
844 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
845
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
846 =head2 gff_string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
847
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
848 Title : gff_string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
849 Usage : $str = $feat->gff_string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
850 $str = $feat->gff_string($gff_formatter);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
851 Function: Provides the feature information in GFF format.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
852
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
853 We override this here from Bio::SeqFeatureI in order to use the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
854 formatter returned by gff_format().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
855
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
856 Returns : A string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
857 Args : Optionally, an object implementing gff_string().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
858
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
859
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
860 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
861
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
862 sub gff_string{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
863 my ($self,$formatter) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
864
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
865 $formatter = $self->gff_format() unless $formatter;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
866 return $formatter->gff_string($self);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
867 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
868
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
869 # =head2 slurp_gff_file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
870 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
871 # Title : slurp_file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
872 # Usage : @features = Bio::SeqFeature::Generic::slurp_gff_file(\*FILE);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
873 # Function: Sneaky function to load an entire file as in memory objects.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
874 # Beware of big files.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
875 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
876 # This method is deprecated. Use Bio::Tools::GFF instead, which can
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
877 # also handle large files.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
878 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
879 # Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
880 # Returns :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
881 # Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
882 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
883 # =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
884
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
885 sub slurp_gff_file {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
886 my ($f) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
887 my @out;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
888 if ( !defined $f ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
889 die "Must have a filehandle";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
890 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
891
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
892 Bio::Root::Root->warn("deprecated method slurp_gff_file() called in Bio::SeqFeature::Generic. Use Bio::Tools::GFF instead.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
893
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
894 while(<$f>) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
895
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
896 my $sf = Bio::SeqFeature::Generic->new('-gff_string' => $_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
897 push(@out, $sf);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
898 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
899
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
900 return @out;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
901
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
902 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
903
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
904 =head2 _from_gff_string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
905
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
906 Title : _from_gff_string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
907 Usage :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
908 Function: Set feature properties from GFF string.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
909
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
910 This method uses the object returned by gff_format() for the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
911 actual interpretation of the string. Set a different GFF format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
912 interpreter first if you need a specific version, like GFF1. (The
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
913 default is GFF2.)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
914 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
915 Returns :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
916 Args : a GFF-formatted string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
917
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
918
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
919 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
920
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
921 sub _from_gff_string {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
922 my ($self, $string) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
923
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
924 $self->gff_format()->from_gff_string($self, $string);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
925 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
926
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
927
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
928 =head2 _expand_region
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
929
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
930 Title : _expand_region
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
931 Usage : $self->_expand_region($feature);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
932 Function: Expand the total region covered by this feature to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
933 accomodate for the given feature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
934
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
935 May be called whenever any kind of subfeature is added to this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
936 feature. add_sub_SeqFeature() already does this.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
937 Returns :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
938 Args : A Bio::SeqFeatureI implementing object.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
939
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
940
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
941 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
942
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
943 sub _expand_region {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
944 my ($self, $feat) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
945 if(! $feat->isa('Bio::SeqFeatureI')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
946 $self->warn("$feat does not implement Bio::SeqFeatureI");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
947 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
948 # if this doesn't have start/end set - forget it!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
949 if((! defined($self->start())) && (! defined $self->end())) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
950 $self->start($feat->start());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
951 $self->end($feat->end());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
952 $self->strand($feat->strand) unless defined($self->strand());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
953 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
954 my $range = $self->union($feat);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
955 $self->start($range->start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
956 $self->end($range->end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
957 $self->strand($range->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
958 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
959 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
960
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
961 =head2 _parse
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
962
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
963 Title : _parse
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
964 Usage :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
965 Function: Parsing hints
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
966 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
967 Returns :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
968 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
969
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
970
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
971 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
972
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
973 sub _parse {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
974 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
975
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
976 return $self->{'_parse_h'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
977 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
978
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
979 =head2 _tag_value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
980
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
981 Title : _tag_value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
982 Usage :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
983 Function: For internal use only. Convenience method for those tags that
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
984 may only have a single value.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
985 Returns :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
986 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
987
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
988
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
989 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
990
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
991 sub _tag_value {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
992 my ($self, $tag, $value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
993
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
994 if(defined($value) || (! $self->has_tag($tag))) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
995 $self->remove_tag($tag) if($self->has_tag($tag));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
996 $self->add_tag_value($tag, $value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
997 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
998 return ($self->each_tag_value($tag))[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
999 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1000
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1001 #######################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1002 # aliases for methods that changed their names in an attempt to make #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1003 # bioperl names more consistent #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1004 #######################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1005
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1006 sub seqname {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1007 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1008 $self->warn("SeqFeatureI::seqname() is deprecated. Please use seq_id() instead.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1009 return $self->seq_id(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1010 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1011
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1012 sub display_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1013 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1014 $self->warn("SeqFeatureI::display_id() is deprecated. Please use display_name() instead.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1015 return $self->display_name(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1016 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1017
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1018 # this is towards consistent naming
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1019 sub each_tag_value { return shift->get_tag_values(@_); }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1020 sub all_tags { return shift->get_all_tags(@_); }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1021
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1022 # we revamped the feature containing property to implementing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1023 # Bio::FeatureHolderI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1024 *sub_SeqFeature = \&get_SeqFeatures;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1025 *add_sub_SeqFeature = \&add_SeqFeature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1026 *flush_sub_SeqFeatures = \&remove_SeqFeatures;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1027 # this one is because of inconsistent naming ...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1028 *flush_sub_SeqFeature = \&remove_SeqFeatures;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1029
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1030
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1031 1;