Mercurial > repos > mahtabm > ensembl
comparison variant_effect_predictor/Bio/EnsEMBL/Funcgen/AnnotatedFeature.pm @ 0:1f6dce3d34e0
Uploaded
author | mahtabm |
---|---|
date | Thu, 11 Apr 2013 02:01:53 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:1f6dce3d34e0 |
---|---|
1 # | |
2 # Ensembl module for Bio::EnsEMBL::Funcgen::AnnotatedFeature | |
3 # | |
4 # You may distribute this module under the same terms as Perl itself | |
5 | |
6 =head1 LICENSE | |
7 | |
8 Copyright (c) 1999-2011 The European Bioinformatics Institute and | |
9 Genome Research Limited. All rights reserved. | |
10 | |
11 This software is distributed under a modified Apache license. | |
12 For license details, please see | |
13 | |
14 http://www.ensembl.org/info/about/code_licence.html | |
15 | |
16 =head1 CONTACT | |
17 | |
18 Please email comments or questions to the public Ensembl | |
19 developers list at <ensembl-dev@ebi.ac.uk>. | |
20 | |
21 Questions may also be sent to the Ensembl help desk at | |
22 <helpdesk@ensembl.org>. | |
23 | |
24 | |
25 =head1 NAME | |
26 | |
27 Bio::EnsEMBL::AnnotatedFeature - A module to represent a feature mapping as | |
28 predicted by the eFG pipeline. | |
29 | |
30 =head1 SYNOPSIS | |
31 | |
32 use Bio::EnsEMBL::Funcgen::AnnotatedFeature; | |
33 | |
34 my $feature = Bio::EnsEMBL::Funcgen::AnnotatedFeature->new | |
35 ( | |
36 -SLICE => $chr_1_slice, | |
37 -START => 1_000_000, | |
38 -SUMMIT => 1_000_019, | |
39 -END => 1_000_024, | |
40 -STRAND => -1, | |
41 -DISPLAY_LABEL => $text, | |
42 -SCORE => $score, | |
43 -FEATURE_SET => $fset, | |
44 ); | |
45 | |
46 | |
47 | |
48 =head1 DESCRIPTION | |
49 | |
50 An AnnotatedFeature object represents the genomic placement of a prediction | |
51 generated by the eFG analysis pipeline. This normally represents the | |
52 output of a peak calling analysis. It can have a score and/or a summit, the | |
53 meaning of which depend on the specific Analysis used to infer the feature. | |
54 For example, in the case of a feature derived from a peak call over a ChIP-seq | |
55 experiment, the score is the peak caller score, and summit is the point in the | |
56 feature where more reads align with the genome. | |
57 | |
58 =head1 SEE ALSO | |
59 | |
60 Bio::EnsEMBL::Funcgen::DBSQL::AnnotatedFeatureAdaptor | |
61 | |
62 =cut | |
63 | |
64 use strict; | |
65 use warnings; | |
66 | |
67 package Bio::EnsEMBL::Funcgen::AnnotatedFeature; | |
68 | |
69 use Bio::EnsEMBL::Utils::Argument qw( rearrange ); | |
70 use Bio::EnsEMBL::Utils::Exception qw( throw ); | |
71 use Bio::EnsEMBL::Funcgen::SetFeature; | |
72 | |
73 use vars qw(@ISA); | |
74 @ISA = qw(Bio::EnsEMBL::Funcgen::SetFeature); | |
75 | |
76 | |
77 =head2 new | |
78 | |
79 Arg [-SLICE] : Bio::EnsEMBL::Slice - The slice on which this feature is. | |
80 Arg [-START] : int - The start coordinate of this feature relative to the start of the slice | |
81 it is sitting on. Coordinates start at 1 and are inclusive. | |
82 Arg [-END] : int -The end coordinate of this feature relative to the start of the slice | |
83 Arg [-STRAND] : int - The orientation of this feature. Valid values are 1, -1 and 0. | |
84 it is sitting on. Coordinates start at 1 and are inclusive. | |
85 Arg [-DISPLAY_LABEL]: string - Display label for this feature | |
86 Arg [-SUMMIT] : optional int - seq_region peak summit position | |
87 Arg [-SCORE] : optional int - Score assigned by analysis pipeline | |
88 Arg [-dbID] : optional int - Internal database ID. | |
89 Arg [-ADAPTOR] : optional Bio::EnsEMBL::DBSQL::BaseAdaptor - Database adaptor. | |
90 Example : my $feature = Bio::EnsEMBL::Funcgen::AnnotatedFeature->new | |
91 ( | |
92 -SLICE => $chr_1_slice, | |
93 -START => 1_000_000, | |
94 -END => 1_000_024, | |
95 -STRAND => -1, | |
96 -FEATURE_SET => $fset, | |
97 -DISPLAY_LABEL => $text, | |
98 -SCORE => $score, | |
99 -SUMMIT => 1_000_019, | |
100 ); | |
101 | |
102 | |
103 Description: Constructor for AnnotatedFeature objects. | |
104 Returntype : Bio::EnsEMBL::Funcgen::AnnotatedFeature | |
105 Exceptions : None | |
106 Caller : General | |
107 Status : Medium Risk | |
108 | |
109 =cut | |
110 | |
111 sub new { | |
112 my $caller = shift; | |
113 | |
114 my $class = ref($caller) || $caller; | |
115 my $self = $class->SUPER::new(@_); | |
116 #Hard code strand => 0 here? And remove from input params? | |
117 my ($score, $summit) = rearrange(['SCORE', 'SUMMIT'], @_); | |
118 | |
119 #Direct assingment here removes need for set arg test in method | |
120 | |
121 $self->{'score'} = $score if defined $score; | |
122 $self->{'summit'} = $summit if defined $summit; | |
123 | |
124 return $self; | |
125 } | |
126 | |
127 | |
128 =head2 score | |
129 | |
130 Arg [1] : (optional) int - score | |
131 Example : my $score = $feature->score(); | |
132 Description: Getter for the score attribute for this feature. | |
133 Returntype : int | |
134 Exceptions : None | |
135 Caller : General | |
136 Status : Low Risk | |
137 | |
138 =cut | |
139 | |
140 sub score { | |
141 my $self = shift; | |
142 return $self->{'score'}; | |
143 } | |
144 | |
145 =head2 summit | |
146 | |
147 Arg [1] : (optional) int - summit postition | |
148 Example : my $peak_summit = $feature->summit; | |
149 Description: Getter for the summit attribute for this feature. | |
150 Returntype : int | |
151 Exceptions : None | |
152 Caller : General | |
153 Status : At Risk | |
154 | |
155 =cut | |
156 | |
157 sub summit { | |
158 my $self = shift; | |
159 return $self->{'summit'}; | |
160 } | |
161 | |
162 | |
163 =head2 display_label | |
164 | |
165 Example : my $label = $feature->display_label(); | |
166 Description: Getter for the display label of this feature. | |
167 Returntype : String | |
168 Exceptions : None | |
169 Caller : General | |
170 Status : Medium Risk | |
171 | |
172 =cut | |
173 | |
174 sub display_label { | |
175 my $self = shift; | |
176 | |
177 #auto generate here if not set in table | |
178 #need to go with one or other, or can we have both, split into diplay_name and display_label? | |
179 | |
180 if(! $self->{'display_label'} && $self->adaptor){ | |
181 $self->{'display_label'} = $self->feature_type->name()." -"; | |
182 $self->{'display_label'} .= " ".$self->cell_type->name(); | |
183 $self->{'display_label'} .= " Enriched Site"; | |
184 } | |
185 | |
186 return $self->{'display_label'}; | |
187 } | |
188 | |
189 | |
190 =head2 is_focus_feature | |
191 | |
192 Args : None | |
193 Example : if($feat->is_focus_feature){ ... } | |
194 Description: Returns true if AnnotatedFeature is part of a focus | |
195 set used in the RegulatoryBuild | |
196 Returntype : Boolean | |
197 Exceptions : None | |
198 Caller : General | |
199 Status : At Risk | |
200 | |
201 =cut | |
202 | |
203 sub is_focus_feature{ | |
204 my $self = shift; | |
205 | |
206 #Do we need to test for FeatureSet here? | |
207 | |
208 return $self->feature_set->is_focus_set; | |
209 } | |
210 | |
211 | |
212 =head2 get_underlying_structure | |
213 | |
214 Example : my @loci = @{ $af->get_underlying_structure() }; | |
215 Description: Returns and array of loci consisting of: | |
216 (start, (motif_feature_start, motif_feature_end)*, end) | |
217 Returntype : ARRAYREF | |
218 Exceptions : None | |
219 Caller : General | |
220 Status : At Risk - This is TFBS specific and could move to TranscriptionFactorFeature | |
221 | |
222 =cut | |
223 | |
224 #This should really be precomputed and stored in the DB to avoid the MF attr fetch | |
225 #Need to be aware of projecting here, as these will expire if we project after this method is called | |
226 | |
227 sub get_underlying_structure{ | |
228 my $self = shift; | |
229 | |
230 if(! defined $self->{underlying_structure}){ | |
231 my @loci = ($self->start); | |
232 | |
233 foreach my $mf(@{$self->get_associated_MotifFeatures}){ | |
234 push @loci, ($mf->start, $mf->end); | |
235 } | |
236 | |
237 push @loci, $self->end; | |
238 | |
239 $self->{underlying_structure} = \@loci; | |
240 } | |
241 | |
242 return $self->{underlying_structure}; | |
243 } | |
244 | |
245 =head2 get_associated_MotifFeatures | |
246 | |
247 Example : my @assoc_mfs = @{ $af->get_associated_MotifFeatures }; | |
248 Description: Returns and array associated MotifFeature i.e. MotifFeatures | |
249 representing a relevanting PWM/BindingMatrix | |
250 Returntype : ARRAYREF | |
251 Exceptions : None | |
252 Caller : General | |
253 Status : At Risk - This is TFBS specific and could move to TranscriptionFactorFeature | |
254 | |
255 =cut | |
256 | |
257 sub get_associated_MotifFeatures{ | |
258 my ($self) = @_; | |
259 | |
260 if(! defined $self->{'assoc_motif_features'}){ | |
261 my $mf_adaptor = $self->adaptor->db->get_MotifFeatureAdaptor; | |
262 | |
263 #These need reslicing! | |
264 | |
265 $self->{'assoc_motif_features'} = $mf_adaptor->fetch_all_by_AnnotatedFeature($self, $self->slice); | |
266 } | |
267 | |
268 return $self->{'assoc_motif_features'}; | |
269 } | |
270 | |
271 | |
272 1; | |
273 |