annotate variant_effect_predictor/Bio/EnsEMBL/Funcgen/BindingMatrix.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 # Ensembl module for Bio::EnsEMBL::Funcgen::BindingMatrix
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 # You may distribute this module under the same terms as Perl itself
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 Copyright (c) 1999-2011 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 developers list at <ensembl-dev@ebi.ac.uk>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 Bio::EnsEMBL::Funcgen::BindingMatrix - A module to represent a BindingMatrix.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 In EFG this represents the binding affinities of a Transcription Factor to DNA.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 use Bio::EnsEMBL::Funcgen::BindingMatrix;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 my $matrix = Bio::EnsEMBL::Funcgen::BindingMatrix->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 -name => "MA0122.1",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 -type => "Jaspar",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 -description => "Nkx3-2 Jaspar Matrix",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 $matrix->frequencies("A [ 4 1 13 24 0 0 6 4 9 ]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 C [ 7 4 1 0 0 0 0 6 7 ]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 G [ 4 5 7 0 24 0 18 12 5 ]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 T [ 9 14 3 0 0 24 0 2 3 ]");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 print $matrix->relative_affinity("TGGCCACCA")."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 print $matrix->threshold."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 This class represents information about a BindingMatrix, containing the name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 (e.g. the Jaspar ID, or an internal name), and description. A BindingMatrix
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 is always associated to an Analysis (indicating the origin of the matrix e.g.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 Jaspar) and a FeatureType (the binding factor).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 =head1 SEE ALSO
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 Bio::EnsEMBL::Funcgen::DBSQL::BindingMatrixAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 package Bio::EnsEMBL::Funcgen::BindingMatrix;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 use Bio::EnsEMBL::Utils::Argument qw( rearrange ) ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 use Bio::EnsEMBL::Utils::Exception qw( throw warning );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 use Bio::EnsEMBL::Funcgen::Storable;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 @ISA = qw(Bio::EnsEMBL::Funcgen::Storable);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 Arg [-name]: string - name of Matrix
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 Arg [-analysis]: Bio::EnsEMBL::Analysis - analysis describing how the matrix was obtained
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 Arg [-frequencies]: (optional) string - frequencies representing the binding affinities of a Matrix
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 Arg [-threshold]: (optional) float - minimum relative affinity for binding sites of this matrix
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 Arg [-description]: (optional) string - descriptiom of Matrix
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 Example : my $matrix = Bio::EnsEMBL::Funcgen::BindingMatrix->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 -name => "MA0122.1",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 -analysis => $analysis,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 -description => "Jaspar Matrix",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 Description: Constructor method for BindingMatrix class
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 Returntype : Bio::EnsEMBL::Funcgen::BindingMatrix
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 Exceptions : Throws if name or/and type not defined
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 Status : Medium risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 my $caller = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 my $obj_class = ref($caller) || $caller;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 my $self = $obj_class->SUPER::new(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 my ( $name, $analysis, $freq, $desc, $ftype, $thresh ) = rearrange
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 ( [
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 'NAME', 'ANALYSIS', 'FREQUENCIES', 'DESCRIPTION', 'FEATURE_TYPE', 'THRESHOLD'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 ], @_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 if(! defined $name){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 throw("Must supply a name\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 if(! ((ref $analysis) && $analysis->isa('Bio::EnsEMBL::Analysis') )){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 throw("You must define a valid Bio::EnsEMBL::Analysis");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 #leave is stored test to adaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 if(! (ref($ftype) && $ftype->isa('Bio::EnsEMBL::Funcgen::FeatureType'))){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 throw("You must define a valid Bio::EnsEMBL::Funcgen::FeatureType");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 #leave is stored test to adaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 $self->name($name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 $self->{analysis} = $analysis;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 $self->{feature_type} = $ftype;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 $self->frequencies($freq) if $freq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 $self->description($desc) if $desc;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 $self->threshold($thresh) if $thresh;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 =head2 feature_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 Example : my $ft_name = $matrix->feature_type()->name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 Description: Getter for the feature_type attribute for this matrix.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 Returntype : Bio::EnsEMBL::Funcgen::FeatureType
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 Status : At risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 sub feature_type {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 return $self->{'feature_type'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 =head2 name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 Arg [1] : (optional) string - name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 Example : my $name = $matrix->name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 Description: Getter and setter of name attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 Status : Low Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 sub name {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 $self->{'name'} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 return $self->{'name'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 =head2 description
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 Arg [1] : (optional) string - description
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 Example : my $desc = $matrix->description();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 Description: Getter and setter of description attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 Status : Low Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 sub description {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 $self->{'description'} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 return $self->{'description'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 =head2 threshold
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 Arg [1] : (optional) float - threshold
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 Example : my $thresh = $matrix->threshold();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 Description: Getter and setter of threshold attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 Returntype : float
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 sub threshold {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 $self->{'threshold'} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 return $self->{'threshold'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 =head2 analysis
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 Example : $matrix->analysis()->logic_name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 Description: Getter for the feature_type attribute for this matrix.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 Returntype : Bio::EnsEMBL::Analysis
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 Status : At risk
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 sub analysis {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 return $self->{'analysis'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 =head2 frequencies
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 Arg [1] : (optional) string - frequencies
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 Example : $matrix->frequencies($frequencies_string);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 Description: Getter and setter of frequencies attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 The attribute is a string representing the matrix binding
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 affinities in the Jaspar format. E.g.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 ">
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 [ ]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 Exceptions : Throws if the string attribute is not a properly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 formed matrix in the Jaspar format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 sub frequencies {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 my $frequencies = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 if($frequencies){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 $self->_weights($frequencies);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 $self->{'frequencies'} = $frequencies;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 return $self->{'frequencies'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 =head2 frequencies_revcomp
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 Example : $matrix->frequencies_revcomp();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 Description: Getter for the reverse complement frequencies attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 The attribute represents the reverse complement of frequencies
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 sub frequencies_revcomp {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 return $self->{'frequencies_revcomp'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 =head2 relative_affinity
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 Arg [1] : string - Binding Site Sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 Arg [2] : (optional) boolean - 1 if results are to be in linear scale (default is log scale)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 Example : $matrix->relative_affinity($sequence);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 Description: Calculates the binding affinity of a given sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 relative to the optimal site for the matrix
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 The site is taken as if it were in the proper orientation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 Considers a purely random background p(A)=p(C)=p(G)=p(T)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 Returntype : double
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 Exceptions : Throws if the sequence length does not have the matrix length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 or if the sequence has unclear bases (N is not accepted)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 sub relative_affinity {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 my ($self, $sequence, $linear) = (shift, shift, shift);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 $sequence =~ s/^\s+//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 $sequence =~ s/\s+$//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 throw "No sequence given" if !$sequence;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 $sequence = uc($sequence);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 if($sequence =~ /[^ACGT]/){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 throw "Sequence $sequence contains invalid characters: Only Aa Cc Gg Tt accepted";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 my $weight_matrix = $self->_weights;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 my $matrix_length = scalar(@{$weight_matrix->{'A'}});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 if(length($sequence) != $matrix_length){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 throw "Sequence $sequence does not have length $matrix_length";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 my $log_odds = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 my @bases = split(//,$sequence);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 for(my $i=0;$i<$matrix_length;$i++){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 $log_odds += $weight_matrix->{$bases[$i]}->[$i];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 #This log scale may be quite unrealistic... but usefull just for comparisons...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 if(!$linear){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 return ($log_odds - $self->_min_bind) / ($self->_max_bind - $self->_min_bind);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 return (exp($log_odds) - exp($self->_min_bind)) / (exp($self->_max_bind) - exp($self->_min_bind));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 =head2 is_position_informative
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 Arg [1] : int - 1-based position withing the matrix
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 Arg [2] : (optional) double - threshold [0-2] for information content [default is 1.5]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 Example : $matrix->is_position_informative($pos);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 Description: Returns true if position information content is over threshold
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 Returntype : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 Exceptions : Throws if position or threshold out of bounds
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 Status : At High Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 sub is_position_informative {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 my ($self,$position,$threshold) = (shift,shift,shift);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 throw "Need a position" if(!defined($position));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 throw "Position out of bounds" if(($position<1) || ($position > $self->length));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 if(!defined($threshold)){ $threshold = 1.5; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 throw "Threshold out of bounds" if(($threshold<0) || ($threshold>2));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 return ($self->{'ic'}->[$position-1] >= $threshold);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 =head2 length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 Example : $bm->length();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 Description: Returns the length of the the matrix (e.g. 19bp long)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 Returntype : int with the length of this binding matrix
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 sub length {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 my $weight_matrix = $self->_weights;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 return scalar(@{$weight_matrix->{'A'}});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 =head2 _weights
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 Arg [1] : (optional) string - frequencies
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 Example : _weights($frequencies);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 Description: Private Getter Setter for the weight matrix based on frequencies
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 Returntype : HASHREF with the weights of this binding matrix
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 Exceptions : Throws if the frequencies attribute string does not correspond
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 to 4 rows of an equal number of integer numbers.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 Caller : Self
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 sub _weights {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 #for the moment use equiprobability and constant pseudo-count
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 my $pseudo = 0.1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 #TODO allow for it to be passed as parameters?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 my $frequencies = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 if($frequencies){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 $frequencies =~ s/^(>.*?\n)//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 my $header = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 my ($a,$c,$g,$t) = split(/\n/,$frequencies);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 my @As = split(/\s+/,_parse_matrix_line('[A\[\]]',$a));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 my @Cs = split(/\s+/,_parse_matrix_line('[C\[\]]',$c));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 my @Gs = split(/\s+/,_parse_matrix_line('[G\[\]]',$g));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 my @Ts = split(/\s+/,_parse_matrix_line('[T\[\]]',$t));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 if((scalar(@As)!=scalar(@Cs)) || (scalar(@As)!=scalar(@Gs)) || (scalar(@As)!=scalar(@Ts)) ){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 throw "Frequencies provided are not a valid frequency matrix"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 $self->_calc_ic(\@As,\@Cs,\@Gs,\@Ts,$pseudo);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 #Create the reverse complement
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 my @revT = reverse(@As);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 my @revA = reverse(@Ts);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 my @revC = reverse(@Gs);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 my @revG = reverse(@Cs);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 my $revcomp = $header;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 $revcomp.= "A [ ".join("\t",@revA)." ]\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 $revcomp.= "C [ ".join("\t",@revC)." ]\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 $revcomp.= "G [ ".join("\t",@revG)." ]\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 $revcomp.= "T [ ".join("\t",@revT)." ]\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 $self->{'frequencies_revcomp'} = $revcomp;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 my @totals;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 for(my $i=0;$i<scalar(@As);$i++){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 $totals[$i]=$As[$i]+$Cs[$i]+$Gs[$i]+$Ts[$i];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 my %weights;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 #We can allow distinct background per nucleotide, instead of 0.25 for all... pass as parameter
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 #But if the matrix was obtained using in-vivo data, it shouldn't matter the organism nucleotide bias..
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 #We're using 0.1 as pseudo-count... the matrix cannot have very few elements... (e.g. <30 not good)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 my @was; for(my $i=0;$i<scalar(@As);$i++){ $was[$i] = log((($As[$i] + $pseudo) / ($totals[$i]+(4*$pseudo))) / 0.25); };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 $weights{'A'} = \@was;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 my @wcs; for(my $i=0;$i<scalar(@Cs);$i++){ $wcs[$i] = log((($Cs[$i] + $pseudo) / ($totals[$i]+(4*$pseudo))) / 0.25); };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 $weights{'C'} = \@wcs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 my @wgs; for(my $i=0;$i<scalar(@Gs);$i++){ $wgs[$i] = log((($Gs[$i] + $pseudo) / ($totals[$i]+(4*$pseudo))) / 0.25); };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 $weights{'G'} = \@wgs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 my @wts; for(my $i=0;$i<scalar(@Ts);$i++){ $wts[$i] = log((($Ts[$i] + $pseudo) / ($totals[$i]+(4*$pseudo))) / 0.25); };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 $weights{'T'} = \@wts;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 $self->{'weights'} = \%weights;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 my $max = 0; my $min = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 for(my $i=0;$i<scalar(@As);$i++){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 my $col = [ $was[$i], $wcs[$i], $wgs[$i], $wts[$i] ];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 $min += _min($col);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 $max += _max($col);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 #Log scale
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 $self->_max_bind($max);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 $self->_min_bind($min);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 return $self->{'weights'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 =head2 _calc_ic
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 Example : _calc_ic($as,$cs,$gs,$ts,$pseudo);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 Description: Private function to calculate the matrix information content per position
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 Caller : self
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 sub _calc_ic {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 my ($self,$as, $cs, $gs, $ts,$pseudo) = (shift,shift, shift, shift, shift, shift);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 my @ic = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 for (my $i=0;$i<scalar(@$as);$i++){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 my $total_i = $as->[$i] + $cs->[$i] + $gs->[$i] + $ts->[$i] + (4*$pseudo);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 my $fas = ($as->[$i] + $pseudo) / $total_i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 my $fcs = ($cs->[$i] + $pseudo) / $total_i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 my $fgs = ($gs->[$i] + $pseudo) / $total_i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 my $fts = ($ts->[$i] + $pseudo) / $total_i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 my $ic_i = 2 + ($fas * log($fas)/log(2)) + ($fcs * log($fcs)/log(2)) + ($fgs * log($fgs)/log(2)) + ($fts * log($fts)/log(2));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 push @ic, $ic_i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 $self->{'ic'} = \@ic;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 sub _parse_matrix_line {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 my ($pat,$line) = (shift,shift);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 $line=~s/$pat//g; $line=~s/^\s+//; $line=~s/\s+$//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 return $line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 sub _max { return _min_max(shift, 0); }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 sub _min { return _min_max(shift, 1); }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 sub _min_max {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 my ($list,$min) = (shift, shift);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 my $min_max = $list->[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 map { if($min ? $_ < $min_max : $_ > $min_max){ $min_max = $_; } } @$list;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 return $min_max;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 =head2 _max_bind
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 Arg [1] : (optional) double - maximum binding affinity
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 Example : $matrix->_max_bind(10.2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 Description: Private Getter and setter of max_bind attribute (not to be called directly)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 Returntype : float with the maximum binding affinity of the matrix
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 Caller : Self
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 sub _max_bind {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 $self->{'max_bind'} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 return $self->{'max_bind'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 =head2 _min_bind
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 Arg [1] : (optional) double - minimum binding affinity
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 Example : $matrix->_min_bind(-10.2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 Description: Private Getter and setter of min_bind attribute (not to be called directly)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 Returntype : float with the minimum binding affinity of the matrix
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 Caller : Self
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 sub _min_bind {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 $self->{'min_bind'} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 return $self->{'min_bind'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 1;