annotate variant_effect_predictor/Bio/EnsEMBL/Funcgen/RegulatoryFeature.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 Copyright (c) 1999-2012 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 developers list at <ensembl-dev@ebi.ac.uk>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 Bio::EnsEMBL::Funcgen::RegulatoryFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 use Bio::EnsEMBL::Registry;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 use Bio::EnsEMBL::Funcgen::RegulatoryFeature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 my $reg = Bio::EnsEMBL::Registry->load_adaptors_from_db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 -host => 'ensembldb.ensembl.org',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 -user => 'anonymous'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 my $regfeat_adaptor = $reg->get_adaptor($species, 'funcgen', 'RegulatoryFeature');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 ### Creating/storing a RegulatoryFeature Set ###
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 my $feature = Bio::EnsEMBL::Funcgen::RegulatoryFeature->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 -SLICE => $chr_1_slice,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 -START => 1_000_000,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 -END => 1_000_024,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 -STRAND => 0,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 -DISPLAY_LABEL => $text,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 -FEATURE_SET => $fset,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 -FEATURE_TYPE => $reg_ftype,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 -ATTRIBUTE_CACHE => \%attr_cache,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 my ($stored_feat) = @{$regfeat_adaptor->store([$feature])};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 ### Fetching some RegualtoryFeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 my @regfeats = @{$regfeat_adaptor->fetch_all_by_Slice_FeatureSets($slice, \@fsets)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 ### Print the bound and core loci
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 print join(' - ', ($reg_feat->bound_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 $reg_feat->start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 $reg_feat->end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 $reg_feat->bound_end)."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 ### Getting some supporting evidence for a RegualtoryFeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 my @reg_attrs = @{$reg_feat->regulatory_attributes('annotated')};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 A RegulatoryFeature object represents the output of the Ensembl RegulatoryBuild:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 http://www.ensembl.org/info/docs/funcgen/regulatory_build.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 It is comprises many possible histone, transcription factor, polymerase and open
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 chromatin features, which have been combined to provide a summary view and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 classification of the regulatory status at a given loci.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 =head1 SEE ALSO
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 Bio::EnsEMBL:Funcgen::DBSQL::RegulatoryFeatureAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 Bio::EnsEMBL::Funcgen::SetFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 package Bio::EnsEMBL::Funcgen::RegulatoryFeature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 use Bio::EnsEMBL::Utils::Argument qw( rearrange );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 use Bio::EnsEMBL::Utils::Exception qw( throw );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 use base qw(Bio::EnsEMBL::Funcgen::SetFeature); #@ISA
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 Arg [-SLICE] : Bio::EnsEMBL::Slice - The slice on which this feature is located.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 Arg [-START] : int - The start coordinate of this feature relative to the start of the slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 it is sitting on. Coordinates start at 1 and are inclusive.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 Arg [-END] : int -The end coordinate of this feature relative to the start of the slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 it is sitting on. Coordinates start at 1 and are inclusive.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 Arg [-FEATURE_SET] : Bio::EnsEMBL::Funcgen::FeatureSet - Regulatory Feature set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 Arg [-FEATURE_TYPE] : Bio::EnsEMBL::Funcgen::FeatureType - Regulatory Feature sub type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 Arg [-BINARY_STRING] : (optional) string - Regulatory Build binary string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 Arg [-STABLE_ID] : (optional) string - Stable ID for this RegualtoryFeature e.g. ENSR00000000001
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 Arg [-DISPLAY_LABEL] : (optional) string - Display label for this feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 Arg [-ATTRIBUTE_CACHE] : (optional) HASHREF of feature class dbID|Object lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 Arg [-PROJECTED] : (optional) boolean - Flag to specify whether this feature has been projected or not
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 Arg [-dbID] : (optional) int - Internal database ID.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 Arg [-ADAPTOR] : (optional) Bio::EnsEMBL::DBSQL::BaseAdaptor - Database adaptor.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 Example : my $feature = Bio::EnsEMBL::Funcgen::RegulatoryFeature->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 -SLICE => $chr_1_slice,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 -START => 1000000,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 -END => 1000024,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 -DISPLAY_LABEL => $text,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 -FEATURE_SET => $fset,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 -FEATURE_TYPE => $reg_ftype,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 -ATTRIBUTE_CACHE => \%attr_cache,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 Description: Constructor for RegulatoryFeature objects.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 Returntype : Bio::EnsEMBL::Funcgen::RegulatoryFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 my $caller = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 my $class = ref($caller) || $caller;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 my $self = $class->SUPER::new(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 my ($stable_id, $attr_cache, $bin_string, $projected)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 = rearrange(['STABLE_ID', 'ATTRIBUTE_CACHE', 'BINARY_STRING', 'PROJECTED'], @_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 #None of these are mandatory at creation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 #under different use cases
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 $self->{binary_string} = $bin_string if defined $bin_string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 $self->{stable_id} = $stable_id if defined $stable_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 $self->{projected} = $projected if defined $projected;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 $self->attribute_cache($attr_cache) if $attr_cache;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 =head2 display_label
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 Example : my $label = $feature->display_label();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 Description: Getter for the display label of this feature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 Returntype : String
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 sub display_label {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 if(! defined $self->{'display_label'}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 $self->{'display_label'} = $self->feature_type->name.' Regulatory Feature';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 if( defined $self->cell_type ){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 $self->{'display_label'} .= ' - '.$self->cell_type->name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 return $self->{display_label};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 =head2 display_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 Example : print $feature->display_id();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 Description: This method returns a string that is considered to be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 the 'display' identifier. In this case the stable Id is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 preferred
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 Returntype : String
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 Caller : web drawing code, Region Report tool
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 sub display_id { return $_[0]->{stable_id}; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 =head2 binary_string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 Arg [1] : optional string - binary string from regulatory build
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 Example : my $bin_string = $feature->binary_string();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 Description: Getter and setter for the binary_string for this feature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 Returntype : String
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 Status : At Risk - May change to BLOB, remove setter functionality
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 sub binary_string{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 my ($self, $bin_string) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 if (defined $bin_string){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 #added v67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 warn "RegualtoryFeature::binary_string setter functionality is being removed\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 $self->{binary_string} = $bin_string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 return $self->{binary_string};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 =head2 stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 Arg [1] : (optional) string - stable_id e.g ENSR00000000001
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 Example : my $stable_id = $feature->stable_id();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 Description: Getter and setter for the stable_id attribute for this feature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 Status : At risk - setter functionality to be removed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 sub stable_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 if (@_){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 #added v67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 warn "RegualtoryFeature::stable_id setter functionality is being removed\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 $self->{stable_id} = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 return $self->{stable_id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 =head2 regulatory_attributes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 Arg [1] : String (optional) - Class of feature e.g. annotated or motif
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 Example : print "Regulatory Attributes:\n\t".join("\n\t", (map $_->feature_type->name, @{$feature->regulatory_attributes()}))."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 Description: Getter for the regulatory_attributes for this feature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 Returntype : ARRAYREF
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 Exceptions : Throws if feature class not valid
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 sub regulatory_attributes{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 my ($self, $feature_class) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 #Incorporating the MFs like this does cause some redundancy in the DB
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 #But will speed up display of the RegFeat image including the MFs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 #Redefine the cache to have class keys e.g. TFBS, OpenChromatin, Histone Mods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 #Can't do this as we need the table key to be able to fetch the features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 #Really need something to be able to draw the image first, then create the zmenu details later.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 my %adaptors = (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 'annotated' => $self->adaptor->db->get_AnnotatedFeatureAdaptor,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 'motif' => $self->adaptor->db->get_MotifFeatureAdaptor,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 #external
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 my @fclasses;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 if(defined $feature_class){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 if(exists $adaptors{lc($feature_class)}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 @fclasses = (lc($feature_class));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 throw("The feature class you specified is not valid:\t$feature_class\n".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 "Please use one of:\t".join(', ', keys %adaptors));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 @fclasses = keys %adaptors;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 foreach my $fclass(@fclasses){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 #Now structured as hash to facilitate faster has_attribute method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 #Very little difference to array based cache
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 my @attr_dbIDs = keys %{$self->{'attribute_cache'}{$fclass}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 if(scalar(@attr_dbIDs) > 0){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 if( ! ( ref($self->{'regulatory_attributes'}{$fclass}->[0]) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 ref($self->{'regulatory_attributes'}{$fclass}->[0])->isa('Bio::EnsEMBL::Feature') )){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 $adaptors{$fclass}->force_reslice(1);#So we don't lose attrs which aren't on the slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 $self->{'regulatory_attributes'}{$fclass} = $adaptors{$fclass}->fetch_all_by_dbID_list(\@attr_dbIDs, $self->slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 #Having problems here if we are trying to project between Y PAR and X
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 #Current dest_slice mapping code simply changes the start end values assuming the slice is correct
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 #currently no test for seq_region name match
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 #foreach my $attr(@{ $self->{'regulatory_attributes'}{$fclass}}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 # warn "$attr ".$attr->dbID." ".$attr->feature_Slice->name."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 #}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 $adaptors{$fclass}->force_reslice(0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 #Problems here with attrs not being returning when they do not lie on dest slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 #i.e. core projected to cell line, but dest slice only over laps a region of the core which
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 #actually has no attrs.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 #either use the feature_Slice and reslice everthing to the dest slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 #or skip test in attr obj_frm_sth?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 #This method transfers to the query slice, do not use fetch_by_dbID
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 #It also should use _final_clause
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 #This is currently only specified in the MotifFeatureAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 #as these are required to be sorted to relate to the structure string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 #but we are stll storing in has where order is not preserved!!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 #so this will not match order of underlying strcture!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 #separate so we can have ordered array returned
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 #do we need redundant caches?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 #defo need db id cache for 'has' methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 #foreach my $attr(@{$fclass_attrs}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 # $self->{'regulatory_attributes'}{$fclass}{$attr->dbID} = $attr;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 #}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 $self->{'regulatory_attributes'}{$fclass} = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 return [ map { @{$self->{'regulatory_attributes'}{$_}} } @fclasses ];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 =head2 has_attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 Arg [1] : Attribute Feature dbID
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 Arg [2] : Attribute Feature class e.g. motif or annotated
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 Example : if($regf->has_attribute($af->dbID, 'annotated'){ #do something here }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 Description: Identifies whether this RegualtoryFeature has a given attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 Returntype : Boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 Exceptions : Throws if args are not defined
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 sub has_attribute{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 my ($self, $dbID, $fclass) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 throw('Must provide a dbID and a Feature class argument') if ! $dbID && $fclass;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 return exists ${$self->attribute_cache}{$fclass}{$dbID};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 =head2 get_focus_attributes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 Arg [1] : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 Example : my @focus_attrs = @{$regf->get_focus_attributes};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 Description: Getter for the focus features of this RegualtoryFeature, used to defined the core region
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 Returntype : ARRAYREF
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 sub get_focus_attributes{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 if(! exists $self->{'focus_attributes'} ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 ! @{$self->{'focus_attributes'}}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 $self->_sort_attributes;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 return $self->{'focus_attributes'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 =head2 get_nonfocus_attributes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 Arg [1] : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 Example : my @non_focus_attrs = @{$regf->get_nonfocus_attributes};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 Description: Getter for the non-focus features of this RegulatoryFeature, used to defined
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 the non core region i.e. the whiskers.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 Returntype : ARRAYREF
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 sub get_nonfocus_attributes{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 #Test focus here as we may not have any nonfocus
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 #But focus will show that we have sorted already
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 if(! exists $self->{'focus_attributes'} ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 ! @{$self->{'focus_attributes'}}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 $self->_sort_attributes;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 return $self->{'nonfocus_attributes'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 #Add pod here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 sub _sort_attributes{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 $self->{'focus_attributes'} = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 $self->{'nonfocus_attributes'} = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 foreach my $attrf(@{$self->regulatory_attributes}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 if($attrf->isa('Bio::EnsEMBL::Funcgen::MotifFeature') ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 $attrf->feature_set->is_focus_set){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 push @{$self->{'focus_attributes'}}, $attrf;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 push @{$self->{'nonfocus_attributes'}}, $attrf;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 =head2 attribute_cache
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 Arg [1] : optional - HASHREF of attribute table keys with values as either a list of attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 feature dbIDs or objects. If passing object, any MotifFeature objects should be in position
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 order with respect to the slice.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 Example : $feature->attribute_cache(\%attribute_feature_info);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 Description: Setter for the regulatory_attribute cache for this feature. This is a short cut method used by the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 regulatory build and the webcode to avoid unnecessary fetching and enable enable lazy loading
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 Returntype : HASHREF
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 Exceptions : Throws if trying to overwrite existing cache
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 Caller : RegulatoryFeatureAdaptor.pm and build_regulatory_features.pl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 sub attribute_cache{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 my ($self, $attr_hash) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 # if(! defined $attr_hash){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 # $self->regulatory_attributes; #Fetch the attrs?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 # #Do we need to do this now we have separated the caches?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 # }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 if(defined $attr_hash){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 foreach my $fclass(keys %{$attr_hash}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 if(exists $self->{'attribute_cache'}{$fclass}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 throw("You are trying to overwrite a pre-existing regulatory attribute cache entry for feature class:\t$fclass");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 $self->{'attribute_cache'}{$fclass} = $attr_hash->{$fclass};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 return $self->{'attribute_cache'} || {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 =head2 bound_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 Example : my $bound_start = $feature->bound_start();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 Description: Getter for the bound_start attribute for this feature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 Gives the 5' most start value of the underlying attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 features.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 sub bound_start {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 $self->get_underlying_structure if ! defined $self->{'bound_start'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 return $self->{'bound_start'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 =head2 bound_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 Example : my $bound_end = $feature->bound_start();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 Description: Getter for the bound_end attribute for this feature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 Gives the 3' most end value of the underlying attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 features.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 sub bound_end {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 $self->get_underlying_structure if ! defined $self->{'bound_end'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 return $self->{'bound_end'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 =head2 bound_seq_region_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 Example : my $bound_sr_start = $feature->bound_seq_region_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 Description: Getter for the seq_region bound_start attribute for this feature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 Gives the 5' most start value of the underlying attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 features.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 sub bound_seq_region_start {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 if(! defined $self->{bound_seq_region_start}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 if($self->slice->strand == 1){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 $self->{bound_seq_region_start} = $self->slice->start + $self->bound_start - 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 else{ #strand = -1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 $self->{bound_seq_region_start} = $self->slice->end - $self->bound_end + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 return $self->{bound_seq_region_start};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 =head2 bound_seq_region_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 Example : my $bound_sr_end = $feature->bound_seq_region_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 Description: Getter for the seq_region bound_end attribute for this feature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 Gives the 3' most end value of the underlying attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 features.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 sub bound_seq_region_end {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 if(! defined $self->{bound_seq_region_end}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 if($self->slice->strand == 1){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577 $self->{bound_seq_region_end} = $self->slice->start + $self->bound_end - 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 else{ #strand = -1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 $self->{bound_seq_region_end} = $self->slice->end - $self->bound_start + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 return $self->{bound_seq_region_end};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592 =head2 is_projected
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 Arg [1] : optional - boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595 Example : if($regf->is_projected){ #do something different here }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 Description: Getter/Setter for the projected attribute.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597 Returntype : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 Status : At risk - remove setter functionality
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 sub is_projected {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607 if(@_){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 #added v67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 warn "RegulatoryFeature::is_projected setter functionality is being removed\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610 $self->{'projected'} = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613 return $self->{'projected'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 =head2 get_underlying_structure
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 Example : $self->get_underlying_structure() if(! exists $self->{'bound_end'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 Description: Getter for the bound_end attribute for this feature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 Gives the 3' most end value of the underlying attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622 features.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 #This should really be precomputed and stored in the DB to avoid the MF attr fetch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631 #Need to be aware of projecting here, as these will expire if we project after this method is called
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633 sub get_underlying_structure{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636 if(! defined $self->{underlying_structure}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638 my @attrs = @{$self->regulatory_attributes()};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 if(! @attrs){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641 throw('No underlying regulatory_attribute features to get_underlying_structure for dbID '.$self->dbID);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642 #This should never happen even with a projection build
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 #We only need to set the bounds when storing on full slice/seq_region values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648 #else they should be fetched from the DB
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650 if(! defined $self->{'bound_start'}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652 my (@start_ends);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654 foreach my $attr(@attrs){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 push @start_ends, ($attr->start, $attr->end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658 #Accounts for core region, where data may be absent on this cell type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659 push @start_ends, ($self->start, $self->end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661 @start_ends = sort { $a <=> $b } @start_ends;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663 $self->{'bound_end'} = pop @start_ends;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664 $self->{'bound_start'} = shift @start_ends;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666 #Need to account for projection build here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667 #i.e. attr extremeties may not extend past core start/end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669 if($self->is_projected){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670 $self->{'bound_end'} = $self->end if $self->end > $self->{'bound_end'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671 $self->{'bound_start'} = $self->start if $self->start < $self->{'bound_start'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675 #Now deal with MotifFeature loci
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676 my @mf_loci;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678 foreach my $mf(@{$self->regulatory_attributes('motif')}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679 push @mf_loci, ($mf->start, $mf->end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682 $self->{underlying_structure} = [$self->{'bound_start'}, $self->start, @mf_loci, $self->end, $self->{'bound_end'}];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686 return $self->{underlying_structure};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690 =head2 is_unique_to_FeatureSets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692 Arg[1] : optional - ARRAYREF of regualtory Bio::EnsEMBL::Funcgen::FeatureSet objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693 Default is FeatureSet of given RegulatoryFeature, else need to be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694 defined explicitly.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695 Arg[2] : optional - HASHREF Params hash:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697 include_projected => 0|1, # Boolean, include 'projected' features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699 Example : if($reg_feat->is_unique_to_FeatureSets($fsets)}{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700 #then do some analysis here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702 Description: Identifies whether this RegualtoryFeature is unique to a set of FeatureSets.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
703 Returntype : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
704 Exceptions : Throw is arguments not stored or valid.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
705 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
706 Status : At risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
707
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
708 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
709
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
710 #Probably want to add in an FeatureType constraint here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
711 #e.g. so we can compare active vs inactive or poised promoters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
712
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
713 #omit include_multi doesn't make sense here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
714
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
715 sub is_unique_to_FeatureSets{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
716 my ($self, $fsets, $params_hash) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
717
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
718 $fsets ||= [$self->feature_set];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
719 my @fset_ids;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
720
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
721
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
722 #define to avoid deref fails below.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
723 $params_hash ||= {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
724 if(ref($params_hash) ne 'HASH'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
725 throw("The params hash argument must be a valid HASHREF:\t".ref($params_hash));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
726 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
727
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
728
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
729 foreach my $fset(@$fsets){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
730 #assume we have an adaptor set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
731 $self->adaptor->db->is_stored_and_valid('Bio::EnsEMBL::Funcgen::FeatureSet', $fset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
732
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
733 if($fset->feature_class ne 'regulatory'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
734 throw('Found non-regulatory FeatureSet');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
735 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
736
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
737 push @fset_ids, $fset->dbID;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
738 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
739
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
740 my $stable_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
741 ($stable_id = $self->stable_id) =~ s/^[A-Z0]+//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
742
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
743
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
744 my @other_rf_ids = @{$self->adaptor->_fetch_other_dbIDs_by_stable_feature_set_ids
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
745 ($stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
746 \@fset_ids,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
747 { include_projected => $params_hash->{include_projected}} )};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
748
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
749 return (@other_rf_ids) ? 0 : 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
750 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
751
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
752
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
753
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
754 =head2 get_other_RegulatoryFeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
755
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
756 Arg[1] : optional - ARRAYREF of regualtory Bio::EnsEMBL::Funcgen::FeatureSet objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
757 Default is FeatureSet of given RegulatoryFeature, else need to be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
758 defined explicitly.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
759 Arg[2] : optional - HASHREF Params hash:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
760 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
761 include_projected => 0|1, # Boolean, include 'projected' features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
762 include_multicell => 0|1, # Boolean, include MultiCell features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
763 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
764 Example : my @other_fsets = @{$reg_feat->get_other_FeatureSets($fsets)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
765 Description: Gets other RegualtoryFeatures (linked via the stable ID) which are present in the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
766 specified list of FeatureSets.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
767 Returntype : ARRAYREF of Bio::EnsEMBL::Funcgen::RegulatoryFeature objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
768 Exceptions : Throw is arguments not stored or valid.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
769 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
770 Status : At risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
771
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
772 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
773
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
774 sub get_other_RegulatoryFeatures{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
775 my ($self, $fsets, $params_hash) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
776
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
777 #define to avoid deref fails below.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
778 $params_hash ||= {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
779 if(ref($params_hash) ne 'HASH'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
780 throw("The params hash argument must be a valid HASHREF:\t".ref($params_hash));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
781 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
782
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
783 $fsets ||= [$self->feature_set];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
784 my @fset_ids;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
785
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
786 foreach my $fset(@$fsets){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
787 #assume we have an adaptor set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
788 $self->adaptor->db->is_stored_and_valid('Bio::EnsEMBL::Funcgen::FeatureSet', $fset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
789
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
790 if($fset->feature_class ne 'regulatory'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
791 throw('Found non-regulatory FeatureSet');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
792 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
793
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
794 push @fset_ids, $fset->dbID;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
795 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
796
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
797 my $stable_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
798 ($stable_id = $self->stable_id) =~ s/^[A-Z0]+//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
799
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
800 my @other_fsets_ids = @{$self->adaptor->_fetch_other_dbIDs_by_stable_feature_set_ids
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
801 ($stable_id, \@fset_ids,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
802 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
803 include_projected => $params_hash->{include_projected},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
804 include_multicell => $params_hash->{include_multicell},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
805 })};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
806
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
807 return $self->adaptor->fetch_all_by_dbID_list(\@other_fsets_ids);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
808 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
809
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
810
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
811
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
812 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
813
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
814 __END__