annotate variant_effect_predictor/Bio/DB/GFF/Aggregator.pm @ 2:a5976b2dce6f

changing defualt values for ensembl database
author mahtabm
date Thu, 11 Apr 2013 17:15:42 +1000
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 Bio::DB::GFF::Aggregator -- Aggregate GFF groups into composite features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 use Bio::DB::GFF;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 my $agg1 = Bio::DB::GFF::Aggregator->new(-method => 'cistron',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10 -main_method => 'locus',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 -sub_parts => ['allele','variant']
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 my $agg2 = Bio::DB::GFF::Aggregator->new(-method => 'splice_group',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 -sub_parts => 'transcript');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 my $db = Bio::DB::GFF->new( -adaptor => 'dbi:mysql',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18 -aggregator => [$agg1,$agg2],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 -dsn => 'dbi:mysql:elegans42',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 Bio::DB::GFF::Aggregator is used to aggregate GFF groups into
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 composite features. Each composite feature has a "main part", the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 top-level feature, and a series of zero or more subparts, retrieved
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 with the sub_SeqFeature() method. The aggregator class is designed to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 be subclassable, allowing a variety of GFF feature types to be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 supported.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 The base Bio::DB::GFF::Aggregator class is generic, and can be used to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 create specific instances to be passed to the -aggregator argument of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 Bio::DB::GFF-E<gt>new() call. The various subclasses of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 Bio::DB::GFF::Aggregator are tuned for specific common feature types
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 such as clones, gapped alignments and transcripts.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 Instances of Bio::DB::GFF::Aggregator have three attributes:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 =over 3
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 =item method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 This is the GFF method field of the composite feature as a whole. For
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 example, "transcript" may be used for a composite feature created by
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 aggregating individual intron, exon and UTR features.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 =item main method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 Sometimes GFF groups are organized hierarchically, with one feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 logically containing another. For example, in the C. elegans schema,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 methods of type "Sequence:curated" correspond to regions covered by
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 curated genes. There can be zero or one main methods.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 =item subparts
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 This is a list of one or more methods that correspond to the component
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 features of the aggregates. For example, in the C. elegans database,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 the subparts of transcript are "intron", "exon" and "CDS".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 =back
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 Aggregators have two main methods that can be overridden in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 subclasses:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 =over 4
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 =item disaggregate()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 This method is called by the Adaptor object prior to fetching a list
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 of features. The method is passed an associative array containing the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 [method,source] pairs that the user has requested, and it returns a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 list of raw features that it would like the adaptor to fetch.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 =item aggregate()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 This method is called by the Adaptor object after it has fetched
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 features. The method is passed a list of raw features and is expected
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 to add its composite features to the list.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 =back
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 The disaggregate() and aggregate() methods provided by the base
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 Aggregator class should be sufficient for many applications. In this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 case, it suffices for subclasses to override the following methods:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 =over 4
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 =item method()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 Return the default method for the composite feature as a whole.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 =item main_name()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 Return the default main method name.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 =item part_names()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 Return a list of subpart method names.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 =back
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 Provided that method() and part_names() are overridden (and optionally
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 main_name() as well), then the bare name of the aggregator subclass
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 can be passed to the -aggregator of Bio::DB::GFF-E<gt>new(). For example,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 this is a small subclass that will aggregate features of type "allele"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 and "polymorphism" into an aggregate named "mutant":
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 package Bio::DB::GFF::Aggregator::mutant;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 use Bio::DB::GFF::Aggregator;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 use vars '@ISA';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 @ISA = 'Bio::DB::GFF::Aggregator';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 sub method { 'mutant' }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 sub part_names {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 return qw(allele polymorphism);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 Once installed, this aggregator can be passed to Bio::DB::GFF-E<gt>new()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 by name like so:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 my $db = Bio::DB::GFF->new( -adaptor => 'dbi:mysql',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 -aggregator => 'mutant',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 -dsn => 'dbi:mysql:elegans42',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 =head1 API
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 The remainder of this document describes the public and private
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 methods implemented by this module.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 package Bio::DB::GFF::Aggregator;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 use Bio::DB::GFF::Util::Rearrange; # for rearrange()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 use Bio::DB::GFF::Feature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 @ISA = qw(Bio::Root::Root);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 my $ALWAYS_TRUE = sub { 1 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 Title : new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 Usage : $a = Bio::DB::GFF::Aggregator->new(@args)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 Function: create a new aggregator
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 Returns : a Bio::DB::GFF::Aggregator object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 Args : see below
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 This is the constructor for Bio::DB::GFF::Aggregator. Named arguments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 are as follows:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 -method the method for the composite feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 -main_method the top-level raw feature, if any
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 -sub_parts the list of raw features that will form the subparts
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 of the composite feature (array reference or scalar)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 my $class = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 my ($method,$main,$sub_parts) = rearrange(['METHOD',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 ['MAIN_PART','MAIN_METHOD'],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 ['SUB_METHODS','SUB_PARTS']
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 ],@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 return bless {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 method => $method,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 main_method => $main,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 sub_parts => $sub_parts,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 },$class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 =head2 disaggregate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 Title : disaggregate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 Usage : $a->disaggregate($types,$factory)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 Function: disaggregate type list into components
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 Returns : a true value if this aggregator should be called to reaggregate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 Args : see below
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 This method is called to disaggregate a list of types into the set of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 low-level features to be retrieved from the GFF database. The list of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 types is passed as an array reference containing a series of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 [method,source] pairs. This method synthesizes a new set of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 [method,source] pairs, and appends them to the list of requested
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 types, changing the list in situ.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 Arguments:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 $types reference to an array of [method,source] pairs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 $factory reference to the Adaptor object that is calling
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 this method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 Note that the API allows disaggregate() to remove types from the type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 list. This feature is probably not desirable and may be deprecated in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 the future.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 # this is called at the beginning to turn the pseudo-type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 # into its component feature types
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 sub disaggregate {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 my $types = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 my $factory = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 my $sub_features = $factory->parse_types($self->get_part_names);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 my $main_feature = $factory->parse_types($self->get_main_name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 if (@$types) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 my (@synthetic_types,@unchanged);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 foreach (@$types) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 my ($method,$source) = @$_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 if (lc $method eq lc $self->get_method) { # e.g. "transcript"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 push @synthetic_types,map { [$_->[0],$_->[1] || $source] } @$sub_features,@$main_feature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 push @unchanged,$_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 # remember what we're searching for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 $self->components(\@synthetic_types);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 $self->passthru(\@unchanged);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 @$types = (@unchanged,@synthetic_types);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 # we get here when no search types are listed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 my @stypes = map { [$_->[0],$_->[1]] } @$sub_features,@$main_feature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 $self->components(\@stypes);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 $self->passthru(undef);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 return $self->component_count > 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 =head2 aggregate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 Title : aggregate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 Usage : $features = $a->aggregate($features,$factory)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 Function: aggregate a feature list into composite features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 Returns : an array reference containing modified features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 Args : see below
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 This method is called to aggregate a list of raw GFF features into the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 set of composite features. The method is called an array reference to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 a set of Bio::DB::GFF::Feature objects. It runs through the list,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 creating new composite features when appropriate. The method result
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 is an array reference containing the composite features.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 Arguments:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 $features reference to an array of Bio::DB::GFF::Feature objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 $factory reference to the Adaptor object that is calling
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 this method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 NOTE: The reason that the function result contains the raw features as
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 well as the aggregated ones is to allow queries like this one:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 @features = $segment->features('exon','transcript:curated');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 Assuming that "transcript" is the name of an aggregated feature and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 that "exon" is one of its components, we do not want the transcript
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 aggregator to remove features of type "exon" because the user asked
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 for them explicitly.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 sub aggregate {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 my $features = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 my $factory = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 my $main_method = $self->get_main_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 my $matchsub = $self->match_sub($factory) or return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 my $passthru = $self->passthru_sub($factory);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 my (%aggregates,@result);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 for my $feature (@$features) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 if ($feature->group && $matchsub->($feature)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 if ($main_method && lc $feature->method eq lc $main_method) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 $aggregates{$feature->group,$feature->refseq}{base} ||= $feature->clone;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 push @{$aggregates{$feature->group,$feature->refseq}{subparts}},$feature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 push @result,$feature if $passthru && $passthru->($feature);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 push @result,$feature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 # aggregate components
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 my $pseudo_method = $self->get_method;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 my $require_whole_object = $self->require_whole_object;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 foreach (keys %aggregates) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 if ($require_whole_object && $self->components) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 next unless $aggregates{$_}{base} && $aggregates{$_}{subparts};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 my $base = $aggregates{$_}{base};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 unless ($base) { # no base, so create one
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 my $first = $aggregates{$_}{subparts}[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 $base = $first->clone; # to inherit parent coordinate system, etc
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 $base->score(undef);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 $base->phase(undef);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 $base->method($pseudo_method);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 $base->add_subfeature($_) foreach @{$aggregates{$_}{subparts}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 $base->adjust_bounds;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 $base->compound(1); # set the compound flag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 push @result,$base;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 @$features = @result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 =head2 method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 Title : method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 Usage : $string = $a->method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 Function: get the method type for the composite feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 Returns : a string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 Status : Protected
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 This method is called to get the method to be assigned to the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 composite feature once it is aggregated. It is called if the user did
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 not explicitly supply a -method argument when the aggregator was
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 created.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 This is the method that should be overridden in aggregator subclasses.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 # no default method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 sub method {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 =head2 main_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 Title : main_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 Usage : $string = $a->main_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 Function: get the method type for the "main" component of the feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 Returns : a string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 Status : Protected
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 This method is called to get the method of the "main component" of the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 composite feature. It is called if the user did not explicitly supply
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 a -main-method argument when the aggregator was created.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 This is the method that should be overridden in aggregator subclasses.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 # no default main method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 sub main_name {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 =head2 part_names
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 Title : part_names
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 Usage : @methods = $a->part_names
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 Function: get the methods for the non-main various components of the feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 Returns : a list of strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 Status : Protected
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 This method is called to get the list of methods of the "main component" of the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 composite feature. It is called if the user did not explicitly supply
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 a -main-method argument when the aggregator was created.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 This is the method that should be overridden in aggregator subclasses.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 # no default part names
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 sub part_names {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 =head2 require_whole_object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 Title : require_whole_object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 Usage : $bool = $a->require_whole_object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 Function: see below
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 Returns : a boolean flag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 Status : Internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 This method returns true if the aggregator should refuse to aggregate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 an object unless both its main part and its subparts are present.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 sub require_whole_object { 0; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 =head2 match_sub
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 Title : match_sub
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 Usage : $coderef = $a->match_sub($factory)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 Function: generate a code reference that will match desired features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 Returns : a code reference
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 Args : see below
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 Status : Internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 This method is used internally to generate a code sub that will
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 quickly filter out the raw features that we're interested in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 aggregating. The returned sub accepts a Feature and returns true if
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 we should aggregate it, false otherwise.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 sub match_sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 my $factory = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 my $types_to_aggregate = $self->components() or return; # saved from disaggregate call
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 return unless @$types_to_aggregate;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 return $factory->make_match_sub($types_to_aggregate);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 sub passthru_sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 my $factory = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 my $passthru = $self->passthru() or return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 return unless @$passthru;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 return $factory->make_match_sub($passthru);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 =head2 components
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 Title : components
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 Usage : @array= $a->components([$components])
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 Function: get/set stored list of parsed raw feature types
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 Returns : an array in list context, an array ref in scalar context
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 Args : new arrayref of feature types
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 Status : Internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 This method is used internally to remember the parsed list of raw
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 features that we will aggregate. The need for this subroutine is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 seen when a user requests a composite feature of type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 "clone:cosmid". This generates a list of components in which the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 source is appended to the method, like "clone_left_end:cosmid" and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 "clone_right_end:cosmid". components() stores this information for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 later use.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 sub components {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 my $d = $self->{components};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 $self->{components} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 return unless ref $d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 return wantarray ? @$d : $d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 sub component_count {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 my @c = shift->components;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 scalar @c;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 sub passthru {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 my $d = $self->{passthru};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 $self->{passthru} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 return unless ref $d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 return wantarray ? @$d : $d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 sub clone {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 my %new = %{$self};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 return bless \%new,ref($self);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 =head2 get_part_names
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 Title : get_part_names
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 Usage : @array = $a->get_part_names
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 Function: get list of sub-parts for this type of feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 Returns : an array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 Status : Internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 This method is used internally to fetch the list of feature types that
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 form the components of the composite feature. Type names in the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 format "method:source" are recognized, as are "method" and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 Bio::DB::GFF::Typename objects as well. It checks instance variables
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 first, and if not defined calls the part_names() method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 sub get_part_names {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 if ($self->{sub_parts}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 return ref $self->{sub_parts} ? @{$self->{sub_parts}} : $self->{sub_parts};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 return $self->part_names;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 =head2 get_main_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 Title : get_main_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 Usage : $string = $a->get_main_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 Function: get the "main" method type for this feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 Returns : a string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 Status : Internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 This method is used internally to fetch the type of the "main part" of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 the feature. It checks instance variables first, and if not defined
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 calls the main_name() method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 sub get_main_name {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 return $self->{main_method} if defined $self->{main_method};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 return $self->main_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 =head2 get_method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 Title : get_method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 Usage : $string = $a->get_method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 Function: get the method type for the composite feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 Returns : a string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 Status : Internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 This method is used internally to fetch the type of the method that
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 will be assigned to the composite feature once it is synthesized.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 sub get_method {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 return $self->{method} if defined $self->{method};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 return $self->method;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 =head1 BUGS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 None known yet.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 =head1 SEE ALSO
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 L<Bio::DB::GFF>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 L<Bio::DB::GFF::Aggregator::alignment>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 L<Bio::DB::GFF::Aggregator::clone>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 L<Bio::DB::GFF::Aggregator::coding>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577 L<Bio::DB::GFF::Aggregator::match>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 L<Bio::DB::GFF::Aggregator::processed_transcript>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 L<Bio::DB::GFF::Aggregator::transcript>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 L<Bio::DB::GFF::Aggregator::none>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 =head1 AUTHOR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 Lincoln Stein E<lt>lstein@cshl.orgE<gt>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 Copyright (c) 2001 Cold Spring Harbor Laboratory.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 This library is free software; you can redistribute it and/or modify
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 it under the same terms as Perl itself.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592