annotate dir_plugins/Condel.pm @ 3:49397129aec0 draft

Uploaded
author dvanzessen
date Mon, 15 Jul 2019 05:20:39 -0400
parents e545d0a25ffe
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1 =head1 LICENSE
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
2
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
3 Copyright [1999-2015] Wellcome Trust Sanger Institute and the EMBL-European Bioinformatics Institute
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
4 Copyright [2016-2018] EMBL-European Bioinformatics Institute
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
5
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
6 Licensed under the Apache License, Version 2.0 (the "License");
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
7 you may not use this file except in compliance with the License.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
8 You may obtain a copy of the License at
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
9
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
10 http://www.apache.org/licenses/LICENSE-2.0
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
11
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
12 Unless required by applicable law or agreed to in writing, software
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
13 distributed under the License is distributed on an "AS IS" BASIS,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
15 See the License for the specific language governing permissions and
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
16 limitations under the License.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
17
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
18 =head1 CONTACT
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
19
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
20 Ensembl <http://www.ensembl.org/info/about/contact/index.html>
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
21
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
22 =cut
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
23
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
24 =head1 NAME
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
25
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
26 Condel
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
27
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
28 =head1 SYNOPSIS
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
29
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
30 mv Condel.pm ~/.vep/Plugins
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
31 ./vep -i variations.vcf --plugin Condel,/path/to/config/Condel/config,b
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
32
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
33 =head1 DESCRIPTION
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
34
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
35 This is a plugin for the Ensembl Variant Effect Predictor (VEP) that calculates
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
36 the Consensus Deleteriousness (Condel) score (1) for a missense mutation
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
37 based on the pre-calculated SIFT (2) and PolyPhen-2 (3) scores from the Ensembl
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
38 API (4). It adds one new entry class to the VEP's Extra column, Condel which is
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
39 the calculated Condel score. This version of Condel was developed by the Biomedical Genomics Group
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
40 of the Universitat Pompeu Fabra, at the Barcelona Biomedical Research Park and available at
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
41 (http://bg.upf.edu/condel) until April 2014. The code in this plugin is based on a script provided by this
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
42 group and slightly reformatted to fit into the Ensembl API.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
43
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
44 The plugin takes 3 command line arguments, the first is the path to a Condel
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
45 configuration directory which contains cutoffs and the distribution files etc.,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
46 the second is either "s", "p", or "b" to output the Condel score, prediction or
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
47 both (the default is both), and the third argument is either 1 or 2 to use the
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
48 original version of Condel (1), or the newer version (2) - 2 is the default and
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
49 is recommended to avoid false positive predictions from Condel in some
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
50 circumstances.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
51
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
52 An example Condel configuration file and a set of distribution files can be found
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
53 in the config/Condel directory in this repository. You should edit the
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
54 config/Condel/config/condel_SP.conf file and set the 'condel.dir' parameter to
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
55 the full path to the location of the config/Condel directory on your system.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
56
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
57 References:
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
58
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
59 (1) Gonzalez-Perez A, Lopez-Bigas N.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
60 Improving the assessment of the outcome of non-synonymous SNVs with a Consensus deleteriousness score (Condel)
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
61 Am J Hum Genet 88(4):440-449 (2011)
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
62 doi:10.1016/j.ajhg.2011.03.004
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
63
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
64 (2) Kumar P, Henikoff S, Ng PC.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
65 Predicting the effects of coding non-synonymous variants on protein function using the SIFT algorithm
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
66 Nature Protocols 4(8):1073-1081 (2009)
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
67 doi:10.1038/nprot.2009.86
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
68
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
69 (3) Adzhubei IA, Schmidt S, Peshkin L, Ramensky VE, Gerasimova A, Bork P, Kondrashov AS, Sunyaev SR.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
70 A method and server for predicting damaging missense mutations
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
71 Nature Methods 7(4):248-249 (2010)
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
72 doi:10.1038/nmeth0410-248
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
73
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
74 (4) Flicek P, et al.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
75 Ensembl 2012
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
76 Nucleic Acids Research (2011)
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
77 doi: 10.1093/nar/gkr991
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
78
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
79 =cut
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
80
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
81 package Condel;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
82
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
83 use strict;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
84 use warnings;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
85
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
86 use Bio::EnsEMBL::Variation::Utils::BaseVepPlugin;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
87
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
88 use base qw(Bio::EnsEMBL::Variation::Utils::BaseVepPlugin);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
89
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
90 sub version {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
91 return '2.4';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
92 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
93
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
94 sub feature_types {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
95 return ['Transcript'];
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
96 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
97
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
98 sub get_header_info {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
99 return {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
100 Condel => "Consensus deleteriousness score for an amino acid substitution based on SIFT and PolyPhen-2",
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
101 };
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
102 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
103
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
104 sub new {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
105 my $class = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
106
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
107 my $self = $class->SUPER::new(@_);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
108
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
109 # parse the config file and distribution files
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
110
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
111 my $config_dir = $self->params->[0];
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
112 $self->{output} = $self->params->[1] || 'b';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
113 $self->{version} = $self->params->[2] || 2;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
114
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
115 # find config dir
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
116 unless($config_dir && -d $config_dir) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
117 $config_dir = $INC{'Condel.pm'};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
118 $config_dir =~ s/Condel\.pm/config\/Condel\/config/;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
119 die "ERROR: Unable to find Condel config path\n" unless -d $config_dir;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
120 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
121
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
122 my $config_file = "$config_dir/condel_SP.conf";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
123
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
124 open(CONF, "<$config_file") || die "Could not open $config_file";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
125
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
126 my @conf = <CONF>;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
127
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
128 my $safe_conf = 0;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
129
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
130 for (my $i = 0; $i < @conf; $i++){
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
131 if ($conf[$i] =~ /condel\.dir=\'(\S+)\'/){
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
132 $self->{config}->{'condel.dir'} = $1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
133
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
134 # user has not edited config, attempt to get correct dir
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
135 if($self->{config}->{'condel.dir'} eq 'path/to/config/Condel/') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
136 my $dir = $INC{'Condel.pm'};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
137 $dir =~ s/Condel\.pm/config\/Condel/;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
138 $self->{config}->{'condel.dir'} = $dir;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
139 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
140 $safe_conf++ if -d $self->{config}->{'condel.dir'};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
141 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
142 elsif ($conf[$i] =~ /(cutoff\.HumVar\.\w+)=\'(\S+)\'/){
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
143 $self->{config}->{$1} = $2;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
144 $safe_conf++;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
145 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
146 elsif ($conf[$i] =~ /(max\.HumVar\.\w+)=\'(\S+)\'/){
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
147 $self->{config}->{$1} = $2;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
148 $safe_conf++;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
149 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
150 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
151
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
152 if ($safe_conf < 3){
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
153 die "Malformed config file!!!\n\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
154 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
155
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
156 open(SIFT, $self->{config}->{'condel.dir'}."/methdist/sift.data");
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
157 my @sift = <SIFT>;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
158 close SIFT;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
159
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
160 for (my $i = 0; $i < @sift; $i++){
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
161 if ($sift[$i] =~ /(\S+)\s+(\S+)\s+(\S+)/){
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
162 $self->{sift}->{tp}->{$1} = $2;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
163 $self->{sift}->{tn}->{$1} = $3;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
164 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
165 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
166
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
167 open(POLYPHEN, $self->{config}->{'condel.dir'}."/methdist/polyphen.data");
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
168 my @polyphen = <POLYPHEN>;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
169 close POLYPHEN;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
170
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
171 for (my $i = 0; $i < @polyphen; $i++){
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
172 if ($polyphen[$i] =~ /(\S+)\s+(\S+)\s+(\S+)/){
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
173 $self->{polyphen}->{tp}->{$1} = $2;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
174 $self->{polyphen}->{tn}->{$1} = $3;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
175 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
176 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
177
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
178 return $self;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
179 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
180
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
181 sub run {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
182 my ($self, $tva) = @_;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
183
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
184 my $pph_score = $tva->polyphen_score;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
185 my $pph_pred = $tva->polyphen_prediction;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
186 my $sift_score = $tva->sift_score;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
187
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
188 my $results = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
189
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
190 if (defined $pph_score && defined $sift_score && $pph_pred ne 'unknown') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
191
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
192 my ($condel_pred, $condel_score) = $self->compute_condel($sift_score, $pph_score);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
193
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
194 $condel_score = sprintf "%.3f", $condel_score;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
195
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
196 my $output = "$condel_pred($condel_score)";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
197
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
198 $output = $condel_pred if ($self->{output} =~ /^p/);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
199 $output = $condel_score if ($self->{output} =~ /^s/);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
200
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
201 $results = {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
202 Condel => $output,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
203 };
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
204 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
205
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
206 return $results;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
207 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
208
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
209 sub compute_condel {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
210
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
211 my ($self, $sift_score, $polyphen_score) = @_;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
212
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
213 my $USE_V2 = $self->{version} == 2;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
214
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
215 my $class;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
216
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
217 my $base = 0;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
218 my $int_score = 0;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
219
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
220 $sift_score = sprintf("%.3f", $sift_score);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
221 $polyphen_score = sprintf("%.3f", $polyphen_score);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
222
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
223 if ($sift_score <= $self->{config}->{'cutoff.HumVar.sift'}){
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
224 $int_score += sprintf("%.3f", (1 - $sift_score/$self->{config}->{'max.HumVar.sift'})*(1-$self->{sift}->{tn}->{$sift_score}));
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
225 $base += $USE_V2 ? 1 : 1-$self->{sift}->{tn}->{$sift_score};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
226 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
227 else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
228 $int_score += sprintf("%.3f", (1 - $sift_score/$self->{config}->{'max.HumVar.sift'})*(1-$self->{sift}->{tp}->{$sift_score}));
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
229 $base += $USE_V2 ? 1 : 1-$self->{sift}->{tp}->{$sift_score};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
230 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
231
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
232 if ($polyphen_score >= $self->{config}->{'cutoff.HumVar.polyphen'}){
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
233 $int_score += sprintf("%.3f", $polyphen_score/$self->{config}->{'max.HumVar.polyphen'}*(1-$self->{polyphen}->{tn}->{$polyphen_score}));
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
234 $base += $USE_V2 ? 1 : 1-$self->{polyphen}->{tn}->{$polyphen_score};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
235 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
236 else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
237 $int_score += sprintf("%.3f", $polyphen_score/$self->{config}->{'max.HumVar.polyphen'}*(1-$self->{polyphen}->{tp}->{$polyphen_score}));
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
238 $base += $USE_V2 ? 1 : 1-$self->{polyphen}->{tp}->{$polyphen_score};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
239 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
240
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
241 if ($base == 0){
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
242 $int_score = -1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
243 $class = 'not_computable_was';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
244 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
245 else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
246 $int_score = sprintf("%.3f", $int_score/$base);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
247 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
248
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
249 if ($int_score >= 0.469){
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
250 $class = 'deleterious';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
251 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
252 elsif ($int_score >= 0 && $int_score < 0.469) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
253 $class = 'neutral';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
254 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
255
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
256 # if the user wants an array, return the class and score, otherwise just return the class
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
257
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
258 return ($class, $int_score);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
259 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
260
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
261 1;